Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Use this forum if you have installed hMailServer and want to ask a question related to a production release of hMailServer. Before posting, please read the troubleshooting guide. A large part of all reported issues are already described in detail here.
Post Reply
User avatar
SorenR
Senior user
Senior user
Posts: 4198
Joined: 2006-08-21 15:38
Location: Denmark

Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by SorenR » 2020-12-20 16:14

hMailServer 5.6.8 B2505.RvdH_based_with_a_few_mods.

I swear that I have NOT changed ANY code pertaining to rules and/or delivery ... I have corrected vbscript/jscript script calling in POP3, IMAP and SMTP but that should NOT do this ...

Completely out of the blue I am now getting delivery errors ... And they are perfectly spot on !?!?!

I have a couple of global rules handling SPAM. The main ones are:
1: Score < 7 move to SPAM-folder AND copy to spam@mydomain..
2: Score > 6 copy to spam@mydomain AND delete mail..

The error message I get is: "Message delivery cancelled during global rules" ... Yes? I delete the email in the rule! Why bitch about this now?

This is triggered when it happens and I have had to insert a "file exist check" to avoid an entry in the ERROR logging.
.

Code: Select all

Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)
    Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
    Dim strRegEx, oMatch, oMatchCollection, strResult, strFilename
    Dim EventLogX : Set EventLogX = New LogWriter
    EventLogX.LogFile = "deliveryfail"
    '
    '   Weird stuff
    '
    strRegEx = "^(?:.*Remote server replied:\s)([0-9]{3})(?:\s.*)$"
    Set oMatchCollection = oLookup(strRegEx, sErrorMessage, False)
    For Each oMatch In oMatchCollection
        If oMatch.SubMatches.Count > 0 Then strResult = oMatch.SubMatches(0)
    Next
    EventLogX.Write( LPad("DeliveryFailed", 15, " ") & vbTab & "sRecipient = " & sRecipient )
    EventLogX.Write( LPad("DeliveryFailed", 15, " ") & vbTab & "sErrorMessage = " & sErrorMessage )
    EventLogX.Write( LPad("DeliveryFailed", 15, " ") & vbTab & "oMessage.Filename = " & oMessage.Filename )
    '
    '   Return mail with message
    '
    If fso.FileExists(oMessage.Filename) Then
        With CreateObject("hMailServer.Message")
            strFilename = .Filename
            fso.CopyFile oMessage.Filename, strFilename, True
            .RefreshContent
            .AddRecipient oMessage.HeaderValue("X-Envelope-From"), oMessage.HeaderValue("X-Envelope-From")
            .Subject = "[* FAILED DELIVERY *] " & .Subject
            .Body = LPad("DeliveryFailed", 15, " ") & vbTab & sRecipient & vbTab & strResult & vbNewLine & _
                    LPad("DeliveryFailed", 15, " ") & vbTab & sRecipient & vbTab & sErrorMessage & vbNewLine & .Body
            .Save
        End With
    Else
        EventLogX.Write( LPad("DeliveryFailed", 15, " ") & vbTab & "oMessage.Filename = ** DELETED **" )
    End If
    Set EventLogX = Nothing
    Set oMatch = Nothing
    Set oMatchCollection = Nothing
    Set fso = Nothing
End Sub
Christmas ghost showing his ugly face or gremlins?
SørenR.

Algorithm (noun.)
Word used by programmers when they do not want to explain what they did.

palinka
Senior user
Senior user
Posts: 2475
Joined: 2017-09-12 17:57

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by palinka » 2020-12-20 17:42

Have you tried de-ordinating the flux capacitor?

palinka
Senior user
Senior user
Posts: 2475
Joined: 2017-09-12 17:57

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by palinka » 2020-12-20 17:50

SorenR wrote:
2020-12-20 16:14
Christmas ghost showing his ugly face or gremlins?
Krampus.

Just reboot and you'll be fine.

User avatar
RvdH
Senior user
Senior user
Posts: 1218
Joined: 2008-06-27 14:42
Location: Netherlands

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by RvdH » 2020-12-20 18:00

You have been tinkering with the code to much? :mrgreen:

Anyway...what is the purpose of "Add HELO/EHLO as string to OnHELO(oClient, sTxt)"? As you already have this value available through oClient.HELO this seems completely redundant
And X-SA-hMail-Mail-From, is this related/similar as this https://www.hmailserver.com/forum/viewt ... 20#p177520
CIDR to RegEx: d-fault.nl/CIDRtoRegEx
DNS Lookup: d-fault.nl/DNSTools
DNSBL Lookup: d-fault.nl/DNSBLLookup
GEOIP Lookup: d-fault.nl/GeoipLookup

User avatar
RvdH
Senior user
Senior user
Posts: 1218
Joined: 2008-06-27 14:42
Location: Netherlands

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by RvdH » 2020-12-20 18:07

OnClientLogon(oClient, sPassword) :evil:
This is a no go for me, this can be abused to collect a full list of username/passwords if someone/something has gain unauthorized access to the server running hMailServer making it vulnerable
Last edited by RvdH on 2020-12-20 18:11, edited 1 time in total.
CIDR to RegEx: d-fault.nl/CIDRtoRegEx
DNS Lookup: d-fault.nl/DNSTools
DNSBL Lookup: d-fault.nl/DNSBLLookup
GEOIP Lookup: d-fault.nl/GeoipLookup

User avatar
RvdH
Senior user
Senior user
Posts: 1218
Joined: 2008-06-27 14:42
Location: Netherlands

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by RvdH » 2020-12-20 18:10

Back to topic, i don't seem to have the problem you describe above, i do exactly the same, eg: spam forwarding and spam deleting using global rules
CIDR to RegEx: d-fault.nl/CIDRtoRegEx
DNS Lookup: d-fault.nl/DNSTools
DNSBL Lookup: d-fault.nl/DNSBLLookup
GEOIP Lookup: d-fault.nl/GeoipLookup

User avatar
SorenR
Senior user
Senior user
Posts: 4198
Joined: 2006-08-21 15:38
Location: Denmark

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by SorenR » 2020-12-20 18:32

RvdH wrote:
2020-12-20 18:07
OnClientLogon(oClient, sPassword) :evil:
This is a no go for me, this can be abused to collect a full list of username/passwords if someone/something has gain unauthorized access to the server running hMailServer making it vulnerable
Yes, I get your concern. I may change it to only list invalid passwords. I use it to reference failed logons with sites like https://haveibeenpwned.com/

The addition to OnHELO(oClient, sTxt) is to capture "HELO" or "EHLO". I can use this to shortcircuit my IDS code if a spammer first tries a EHLO and a second later a HELO. I'm not quite done with that as I need to add an indicator for STARTTLS active.

The thing that puzzles me is the error message...

Message delivery cancelled during global rules

Martin put it in the code for a reason - probably ... Why have I not seen it before?
Rules have not been modified for years. :roll:

Hmm... Could it really be that easy?

I enabled AWStats LOG about a week ago...

SMTPDeliverer.cpp

Code: Select all

      // Apply rules on this message.
      if (!RunGlobalRules_(pMessage, globalRuleResult))
      {
         LogAwstatsMessageRejected_(sendersIP, pMessage, "Message delivery cancelled during global rules");
         return false;
      }
I'm going to switch off AWStats LOG now and see what happens .. :shock:
SørenR.

Algorithm (noun.)
Word used by programmers when they do not want to explain what they did.

User avatar
RvdH
Senior user
Senior user
Posts: 1218
Joined: 2008-06-27 14:42
Location: Netherlands

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by RvdH » 2020-12-20 18:41

SorenR wrote:
2020-12-20 18:32
The addition to OnHELO(oClient, sTxt) is to capture "HELO" or "EHLO". I can use this to shortcircuit my IDS code if a spammer first tries a EHLO and a second later a HELO. I'm not quite done with that as I need to add an indicator for STARTTLS active.
What shortcut? it is triggered only on OnHelo, and on HELO/EHLO you have this available to you through oClient.HELO, not? Really see no point passing this as string.

I doubt it is related due to awstats... or at least i honestly can not say i never ever have seen that message before.... maybe you should verify your jscript "fixes" don't break anything
CIDR to RegEx: d-fault.nl/CIDRtoRegEx
DNS Lookup: d-fault.nl/DNSTools
DNSBL Lookup: d-fault.nl/DNSBLLookup
GEOIP Lookup: d-fault.nl/GeoipLookup

User avatar
SorenR
Senior user
Senior user
Posts: 4198
Joined: 2006-08-21 15:38
Location: Denmark

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by SorenR » 2020-12-20 18:52

RvdH wrote:
2020-12-20 18:41
SorenR wrote:
2020-12-20 18:32
The addition to OnHELO(oClient, sTxt) is to capture "HELO" or "EHLO". I can use this to shortcircuit my IDS code if a spammer first tries a EHLO and a second later a HELO. I'm not quite done with that as I need to add an indicator for STARTTLS active.
What shortcut? it is triggered only on OnHelo, and on HELO/EHLO you have this available to you through oClient.HELO, not? Really see no point passing this as string.

I doubt it is related due to awstats... or at least i honestly can not say i never ever have seen that message before.... maybe you should verify your jscript "fixes" don't break anything
OnHELO is called on both EHLO and HELO greetings but does not differentiate between the two.

When BOT's first try they use a EHLO greeting and if you reject that they try a HELO greeting. If you get an EHLO greeting and a HELO greeting from same IP in under 1 second it is a BOT. That simple. Normal servers give up if you reject on EHLO.
SørenR.

Algorithm (noun.)
Word used by programmers when they do not want to explain what they did.

User avatar
RvdH
Senior user
Senior user
Posts: 1218
Joined: 2008-06-27 14:42
Location: Netherlands

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by RvdH » 2020-12-20 19:00

You do not get my point, there is NO reason to pass the HELO/EHLO greeting as a string....you ALREADY HAVE IT in oClient.HELO :)

[edit]
Ah, i see what you mean now... you don't pass the EHLO/HELO FCDN but only HELO/EHLO
CIDR to RegEx: d-fault.nl/CIDRtoRegEx
DNS Lookup: d-fault.nl/DNSTools
DNSBL Lookup: d-fault.nl/DNSBLLookup
GEOIP Lookup: d-fault.nl/GeoipLookup

User avatar
SorenR
Senior user
Senior user
Posts: 4198
Joined: 2006-08-21 15:38
Location: Denmark

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by SorenR » 2020-12-20 20:40

RvdH wrote:
2020-12-20 19:00
You do not get my point, there is NO reason to pass the HELO/EHLO greeting as a string....you ALREADY HAVE IT in oClient.HELO :)

[edit]
Ah, i see what you mean now... you don't pass the EHLO/HELO FCDN but only HELO/EHLO
Yes, and since I am still playing with it I parse it as a parameter and not part of the oClient object. :wink:

If I don't scrap the whole idea I may have the greeting type (HELO/EHLO), SSL/TLS [0|1|2] and Active Cipher as part of the oClient object ...
SørenR.

Algorithm (noun.)
Word used by programmers when they do not want to explain what they did.

User avatar
SorenR
Senior user
Senior user
Posts: 4198
Joined: 2006-08-21 15:38
Location: Denmark

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by SorenR » 2020-12-20 21:29

//---------------------------------------------------------------------------()
// DESCRIPTION:
// If awstats logging is enabled, this function goes through all the recipients
// of the message, and logs to the awstats log that they have been rejected.
// This is used if a message is rejected after it has been transferred from the
// client to the server.
//---------------------------------------------------------------------------()

Hmm... Events::FireOnDeliveryFailed(pMessage, sSendersIP, sRecipientAddress, sReason);
.

Code: Select all

   SMTPDeliverer::LogAwstatsMessageRejected_(const String &sSendersIP, std::shared_ptr<Message> pMessage, const String &sReason)
   //---------------------------------------------------------------------------()
   // DESCRIPTION:
   // If awstats logging is enabled, this function goes through all the recipients
   // of the message, and logs to the awstats log that they have been rejected.
   // This is used if a message is rejected after it has been transferred from the
   // client to the server.
   //---------------------------------------------------------------------------()
   {
      // Check that message exists, and that the awstats log is enabled.
      if (!pMessage || !AWStats::GetEnabled())
         return;

      // Go through the recipients and log one row for each of them.
      String sFromAddress = pMessage->GetFromAddress();     

      const std::vector<std::shared_ptr<MessageRecipient> > vecRecipients = pMessage->GetRecipients()->GetVector();
      std::vector<std::shared_ptr<MessageRecipient> >::const_iterator iterRecipient = vecRecipients.begin();
      while (iterRecipient != vecRecipients.end())
      {
         String sRecipientAddress = (*iterRecipient)->GetAddress();

         // Log the error message
         AWStats::LogDeliveryFailure(sSendersIP, pMessage->GetFromAddress(), sRecipientAddress,  550);
         Events::FireOnDeliveryFailed(pMessage, sSendersIP, sRecipientAddress, sReason);

         iterRecipient++;
      }

   }
WHY only with AWStats active ?? ¯\_(ツ)_/¯
SørenR.

Algorithm (noun.)
Word used by programmers when they do not want to explain what they did.

User avatar
SorenR
Senior user
Senior user
Posts: 4198
Joined: 2006-08-21 15:38
Location: Denmark

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by SorenR » 2020-12-20 23:11

RvdH wrote:
2020-12-20 18:41
I doubt it is related due to awstats... or at least i honestly can not say i never ever have seen that message before.... maybe you should verify your jscript "fixes" don't break anything
Disabled AWStats logging and "problem" went away ... :shock:

¯\_(ツ)_/¯
SørenR.

Algorithm (noun.)
Word used by programmers when they do not want to explain what they did.

User avatar
mattg
Moderator
Moderator
Posts: 21268
Joined: 2007-06-14 05:12
Location: 'The Outback' Australia

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by mattg » 2020-12-21 00:53

I was going to say that I get that message ALL of the time (hundreds of times per day), but I also log AWSTATS
Just 'cause I link to a page and say little else doesn't mean I am not being nice.
https://www.hmailserver.com/documentation

User avatar
SorenR
Senior user
Senior user
Posts: 4198
Joined: 2006-08-21 15:38
Location: Denmark

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by SorenR » 2020-12-21 01:02

mattg wrote:
2020-12-21 00:53
I was going to say that I get that message ALL of the time (hundreds of times per day), but I also log AWSTATS
I'm wondering why only when AWStats logging is active and not otherwise? It really has nothing to do with AWStats as such :wink:
SørenR.

Algorithm (noun.)
Word used by programmers when they do not want to explain what they did.

User avatar
RvdH
Senior user
Senior user
Posts: 1218
Joined: 2008-06-27 14:42
Location: Netherlands

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by RvdH » 2020-12-21 09:09

It ONLY has use for Awstats as i see it, this simply prevents your awstast statistics to go haywire when using global rules to delete mail
CIDR to RegEx: d-fault.nl/CIDRtoRegEx
DNS Lookup: d-fault.nl/DNSTools
DNSBL Lookup: d-fault.nl/DNSBLLookup
GEOIP Lookup: d-fault.nl/GeoipLookup

User avatar
SorenR
Senior user
Senior user
Posts: 4198
Joined: 2006-08-21 15:38
Location: Denmark

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by SorenR » 2020-12-21 16:10

RvdH wrote:
2020-12-21 09:09
It ONLY has use for Awstats as i see it, this simply prevents your awstast statistics to go haywire when using global rules to delete mail
That's BS!

I had a look at the rest of the code. There are two other procedures built the same way calling "Events::FireOnDeliveryFailed", but they actually work regardless if AWStats logging is enabled or not. I use one to capture delivery failures.

It's just crap programming.

" I'm not mad, I'm disappointed! "
SørenR.

Algorithm (noun.)
Word used by programmers when they do not want to explain what they did.

User avatar
jimimaseye
Moderator
Moderator
Posts: 8917
Joined: 2011-09-08 17:48

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by jimimaseye » 2020-12-21 16:15

SorenR wrote:
2020-12-21 16:10
RvdH wrote:
2020-12-21 09:09
It ONLY has use for Awstats as i see it, this simply prevents your awstast statistics to go haywire when using global rules to delete mail
That's BS!

I had a look at the rest of the code. There are two other procedures built the same way calling "Events::FireOnDeliveryFailed", but they actually work regardless if AWStats logging is enabled or not. I use one to capture delivery failures.

It's just crap programming
Maybe worth a bug fix request in github and special update in rvhd custom 5.6.8?

[Entered by mobile. Excuse my spelling.]
5.7 on test.
SpamassassinForWindows 3.4.0 spamd service
AV: Clamwin + Clamd service + sanesecurity defs : https://www.hmailserver.com/forum/viewtopic.php?f=21&t=26829

User avatar
RvdH
Senior user
Senior user
Posts: 1218
Joined: 2008-06-27 14:42
Location: Netherlands

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by RvdH » 2020-12-21 16:28

jimimaseye wrote:
2020-12-21 16:15
SorenR wrote:
2020-12-21 16:10
RvdH wrote:
2020-12-21 09:09
It ONLY has use for Awstats as i see it, this simply prevents your awstast statistics to go haywire when using global rules to delete mail
That's BS!

I had a look at the rest of the code. There are two other procedures built the same way calling "Events::FireOnDeliveryFailed", but they actually work regardless if AWStats logging is enabled or not. I use one to capture delivery failures.

It's just crap programming
Maybe worth a bug fix request in github and special update in rvhd custom 5.6.8?

[Entered by mobile. Excuse my spelling.]
I doubt it.... hence the function is called, SMTPDeliverer::LogAwstatsMessageRejected_(const String &sSendersIP, std::shared_ptr<Message> pMessage, const String &sReason)

For what freaking reason it would trigger anywere else?
CIDR to RegEx: d-fault.nl/CIDRtoRegEx
DNS Lookup: d-fault.nl/DNSTools
DNSBL Lookup: d-fault.nl/DNSBLLookup
GEOIP Lookup: d-fault.nl/GeoipLookup

User avatar
SorenR
Senior user
Senior user
Posts: 4198
Joined: 2006-08-21 15:38
Location: Denmark

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by SorenR » 2020-12-21 16:39

Do you see any difference in these two?

Code: Select all

      // Run virus protection.
      if (!RunVirusProtection_(pMessage))
      {
         LogAwstatsMessageRejected_(sendersIP, pMessage, "Message delivery cancelled during virus scanning");
         return false;
      }

      // Apply rules on this message.
      if (!RunGlobalRules_(pMessage, globalRuleResult))
      {
         LogAwstatsMessageRejected_(sendersIP, pMessage, "Message delivery cancelled during global rules");
         return false;
      }
So if antivirus delete my outgoing email I only get to know about it IF AWStats logging is enabled ??
SørenR.

Algorithm (noun.)
Word used by programmers when they do not want to explain what they did.

User avatar
RvdH
Senior user
Senior user
Posts: 1218
Joined: 2008-06-27 14:42
Location: Netherlands

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by RvdH » 2020-12-21 16:55

No, but there it simply tells to log to awstats as rejected.... the "normal" reject message for virus found is elsewhere, you are clearly mixing things up
CIDR to RegEx: d-fault.nl/CIDRtoRegEx
DNS Lookup: d-fault.nl/DNSTools
DNSBL Lookup: d-fault.nl/DNSBLLookup
GEOIP Lookup: d-fault.nl/GeoipLookup

User avatar
SorenR
Senior user
Senior user
Posts: 4198
Joined: 2006-08-21 15:38
Location: Denmark

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by SorenR » 2020-12-21 17:16

RvdH wrote:
2020-12-21 16:55
No, but there it simply tells to log to awstats as rejected.... the "normal" reject message for virus found is elsewhere, you are clearly mixing things up
I'll repost...

Code: Select all

   SMTPDeliverer::LogAwstatsMessageRejected_(const String &sSendersIP, std::shared_ptr<Message> pMessage, const String &sReason)
   //---------------------------------------------------------------------------()
   // DESCRIPTION:
   // If awstats logging is enabled, this function goes through all the recipients
   // of the message, and logs to the awstats log that they have been rejected.
   // This is used if a message is rejected after it has been transferred from the
   // client to the server.
   //---------------------------------------------------------------------------()
   {
      // Check that message exists, and that the awstats log is enabled.
      if (!pMessage || !AWStats::GetEnabled())
         return;

      // Go through the recipients and log one row for each of them.
      String sFromAddress = pMessage->GetFromAddress();     

      const std::vector<std::shared_ptr<MessageRecipient> > vecRecipients = pMessage->GetRecipients()->GetVector();
      std::vector<std::shared_ptr<MessageRecipient> >::const_iterator iterRecipient = vecRecipients.begin();
      while (iterRecipient != vecRecipients.end())
      {
         String sRecipientAddress = (*iterRecipient)->GetAddress();

         // Log the error message
         AWStats::LogDeliveryFailure(sSendersIP, pMessage->GetFromAddress(), sRecipientAddress,  550);
         Events::FireOnDeliveryFailed(pMessage, sSendersIP, sRecipientAddress, sReason);

         iterRecipient++;
      }

   }
I beg to differ... "Events::FireOnDeliveryFailed(pMessage, sSendersIP, sRecipientAddress, sReason);" is only triggered IF AWStats logging is active!

Yes, the sender get a notification but there is NO DeliveryFailure trigger UNLESS AWStats logging is enabled and perhaps someone else (hint: ADMIN/Postmaster) would like to know about it!
SørenR.

Algorithm (noun.)
Word used by programmers when they do not want to explain what they did.

User avatar
SorenR
Senior user
Senior user
Posts: 4198
Joined: 2006-08-21 15:38
Location: Denmark

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by SorenR » 2020-12-21 19:46

Fixed it...
SørenR.

Algorithm (noun.)
Word used by programmers when they do not want to explain what they did.

User avatar
jimimaseye
Moderator
Moderator
Posts: 8917
Joined: 2011-09-08 17:48

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by jimimaseye » 2020-12-21 20:18

SorenR wrote:
2020-12-21 19:46
Fixed it...
Turned awstats logging off? :mrgreen:
5.7 on test.
SpamassassinForWindows 3.4.0 spamd service
AV: Clamwin + Clamd service + sanesecurity defs : https://www.hmailserver.com/forum/viewtopic.php?f=21&t=26829

palinka
Senior user
Senior user
Posts: 2475
Joined: 2017-09-12 17:57

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by palinka » 2020-12-21 20:20

jimimaseye wrote:
2020-12-21 20:18
SorenR wrote:
2020-12-21 19:46
Fixed it...
Turned awstats logging off? :mrgreen:
He de-ordinated the flux capacitor. Exactly what I told him to do in the beginning. :roll: :lol:

User avatar
SorenR
Senior user
Senior user
Posts: 4198
Joined: 2006-08-21 15:38
Location: Denmark

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by SorenR » 2020-12-21 21:26

palinka wrote:
2020-12-21 20:20
jimimaseye wrote:
2020-12-21 20:18
SorenR wrote:
2020-12-21 19:46
Fixed it...
Turned awstats logging off? :mrgreen:
He de-ordinated the flux capacitor. Exactly what I told him to do in the beginning. :roll: :lol:
The only reason there is such a thing called Flux Capacitor is that the De Lorean was born a lemon ;-)
It was largely unable to reach 88 miles per hour without help.

@jimimaseye
Modified the source code to allow events without having to enable AWStats logging.
SørenR.

Algorithm (noun.)
Word used by programmers when they do not want to explain what they did.

palinka
Senior user
Senior user
Posts: 2475
Joined: 2017-09-12 17:57

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by palinka » 2020-12-21 22:44

SorenR wrote:
2020-12-21 21:26
The only reason there is such a thing called Flux Capacitor is that the De Lorean was born a lemon ;-)
I won't disagree, but I still want one - an electric one with 3 tesla motors. :D

User avatar
SorenR
Senior user
Senior user
Posts: 4198
Joined: 2006-08-21 15:38
Location: Denmark

Re: Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)

Post by SorenR » 2020-12-21 23:01

palinka wrote:
2020-12-21 22:44
SorenR wrote:
2020-12-21 21:26
The only reason there is such a thing called Flux Capacitor is that the De Lorean was born a lemon ;-)
I won't disagree, but I still want one - an electric one with 3 tesla motors. :D
Nah... Mine is white --> https://www.youtube.com/watch?v=aWfurFjsUwg
SørenR.

Algorithm (noun.)
Word used by programmers when they do not want to explain what they did.

Post Reply