Thread: [Postfixadmin-devel] Getting a new line added to vacation.pl core code...
Brought to you by:
christian_boltz,
gingerdog
From: Tanstaafl <tan...@li...> - 2013-01-05 16:10:23
|
Hi all, I just realized that some changes I had made to the vacation.pl script a while back did not survive the last update... Would it be possible to add the following to lines to the 'Take headers apart' section in the core code for vacation.pl, so I don't have to remember to manually update it? # new 'multi-string' line is for adding any string you want to test for in any header - but be careful what you put in here elsif (/^(.*):\s+(bounce|facebook|linkedin|list-|myspace|twitter)/i) { $logger->debug("Multi-string header matching $1: $2 found; exiting"); exit (0); } Also, I'd dearly appreciate comments on whether or not this line is/should work as expected/desired. It is difficult to test, since I basically have to wait for messages from one/more of these sources to show up in the logs... Thanks, Charles |
From: Christian B. <pos...@cb...> - 2013-01-06 17:20:41
|
Hello, Am Samstag, 5. Januar 2013 schrieb Tanstaafl: > I just realized that some changes I had made to the vacation.pl script > a while back did not survive the last update... > > Would it be possible to add the following to lines to the 'Take > headers apart' section in the core code for vacation.pl, so I don't > have to remember to manually update it? > > # new 'multi-string' line is for adding any string you want to test > for in any header - but be careful what you put in here > elsif (/^(.*):\s+(bounce|facebook|linkedin|list-|myspace|twitter)/i) { > $logger->debug("Multi-string header matching $1: $2 found; exiting"); > exit (0); } > > Also, I'd dearly appreciate comments on whether or not this line > is/should work as expected/desired. I'm sure it will catch every mail from facebook, twitter etc. - but at the risk of matching too many mails. While we tend to avoid autoreplies if in doubt, matching against _all_ headers (which includes for example the subject) might be a bit too much. David, what do you think? (and, while we are on it, would it be possible to have an optional hook function in vacation.conf.pl where more checks could be added?) > It is difficult to test, since I > basically have to wait for messages from one/more of these sources to > show up in the logs... If you store the mails as text file, you can test them with the test mode of vacation.pl (see the VIRTUAL_VACATION/tests/ directory). Regards, Christian Boltz -- > Genau, Office und M$-Programme haben meist alle den gleichen Stil. Stimmt, die schaffen das Kammquoting meist besonders gut. *g,d&r* [> Andre Heine und Florian Gross in suse-linux] |
From: Tanstaafl <tan...@li...> - 2013-01-06 18:43:22
|
On 2013-01-06 12:10 PM, Christian Boltz <pos...@cb...> wrote: > Am Samstag, 5. Januar 2013 schrieb Tanstaafl: >> # new 'multi-string' line is for adding any string you want to test >> for in any header - but be careful what you put in here >> elsif (/^(.*):\s+(bounce|facebook|linkedin|list-|myspace|twitter)/i) { >> $logger->debug("Multi-string header matching $1: $2 found; exiting"); >> exit (0); } >> >> Also, I'd dearly appreciate comments on whether or not this line >> is/should work as expected/desired. > I'm sure it will catch every mail from facebook, twitter etc. - but at > the risk of matching too many mails. While we tend to avoid autoreplies > if in doubt, matching against _all_ headers (which includes for example > the subject) might be a bit too much. Hmmm... ok, I thought it was only matching on the from headers... Is there an easy way to limit it to just the from headers? If not, thats ok - this is only a vacation message, so I'm really much more concerned about NOT replying when I shouldn't. It isn't the same (for me) as antispam measures, where I am indeed very careful about not implementing anything overly aggressive (prone to FPs)... > David, what do you think? > > (and, while we are on it, would it be possible to have an optional hook > function in vacation.conf.pl where more checks could be added?) Yes - I had actually posted a Feature Request in the bug tracker for something like this in the GUI... >> It is difficult to test, since I >> basically have to wait for messages from one/more of these sources to >> show up in the logs... > If you store the mails as text file, you can test them with the test > mode of vacation.pl (see the VIRTUAL_VACATION/tests/ directory). Oh, cool - thanks! Didn't know about/never noticed that! :) |
From: Christian B. <pos...@cb...> - 2013-01-06 23:53:37
|
Hello, Am Sonntag, 6. Januar 2013 schrieb Tanstaafl: > On 2013-01-06 12:10 PM, Christian Boltz wrote: > > Am Samstag, 5. Januar 2013 schrieb Tanstaafl: > >> elsif > >> (/^(.*):\s+(bounce|facebook|linkedin|list-|myspace|twitter)/i) { > >> $logger->debug("Multi-string header matching $1: $2 found; > >> exiting"); exit (0); } > >> > >> Also, I'd dearly appreciate comments on whether or not this line > >> is/should work as expected/desired. > > > > I'm sure it will catch every mail from facebook, twitter etc. - but > > at the risk of matching too many mails. While we tend to avoid > > autoreplies if in doubt, matching against _all_ headers (which > > includes for example the subject) might be a bit too much. > > Hmmm... ok, I thought it was only matching on the from headers... > > Is there an easy way to limit it to just the from headers? Yes, you can make the regex more specific. Instead of ".*" (which matches anything) (/^(.*):[...] use "From" (/^From:[...] Note: There's already a check for ^from to get the From: address into a variable. You probably need to add your rule _before_ the existing one. If you can restrict your regex a bit more (for example "-bounce@" instead of "bounce" - headers of example mails might help), there are even chances to include the check in the official code. The more interesting question is if there are better headers to identify those mails - "bounce" in the From might be a good hint, but a mailinglist header is better ;-) Therefore (the headers of) some example mails would be helpful. > > (and, while we are on it, would it be possible to have an optional > > hook function in vacation.conf.pl where more checks could be > > added?) Thinking about it, an array (or however it's named in perl) with regexes should also work. > Yes - I had actually posted a Feature Request in the bug tracker for > something like this in the GUI... I'm not sure if I want this in the GUI -IMHO it's somthing that should only be editable by the server admin. Regards, Christian Boltz -- SOAP is really now just called "SOAP", I think they've dropped the "Simple..." bit from the name as it can be anything but simple. [http://codepoets.co.uk/using-soap-and-xmlrpc-php5-newbies-findings] |
From: Tanstaafl <tan...@li...> - 2013-01-07 20:53:11
|
On 2013-01-06 6:53 PM, Christian Boltz <pos...@cb...> wrote: > The more interesting question is if there are better headers to identify > those mails - "bounce" in the From might be a good hint, but a > mailinglist header is better ;-) > Therefore (the headers of) some example mails would be helpful. Well, since sometimes these trigger and sometimes they don't, it is easier for me to find them in the logs - this doesn't give you the headers, but it shows you what the logs are seeing - for example, this one should have matched on the 'bounce', but it didn't: Jan 7 07:40:07 myhost postfix/qmgr[6122]: 125D8AE0063: from=<bounce-b_p7u18bgm62k2lkqip6d7150c3k======@bounces.livingsocial.com>, size=99193, nrcpt=2 (queue active) Jan 7 07:40:07 myhost postfix/virtual[13259]: 125D8AE0063: to=<val...@ex...>, relay=virtual, delay=0.38, delays=0.31/0/0/0.07, dsn=2.0.0, status=sent (delivered to maildir) Jan 7 07:40:07 myhost postfix-25/smtpd[13256]: disconnect from relay-eu1.maildistiller.com[5.135.34.120] Jan 7 07:40:07 myhost postfix-25/smtpd[13256]: connect from myhost.example.com[127.0.0.1] Jan 7 07:40:07 myhost postfix-25/smtpd[13256]: C5D5AAE4E7E: client=myhost.example.com[127.0.0.1] Jan 7 07:40:07 myhost postfix/cleanup[13219]: C5D5AAE4E7E: message-id=<201...@ex...> Jan 7 07:40:07 myhost postfix/qmgr[6122]: C5D5AAE4E7E: from=<val...@ex...>, size=1443, nrcpt=1 (queue active) Jan 7 07:40:07 myhost postfix-25/smtpd[13256]: disconnect from myhost.example.com[127.0.0.1] Jan 7 07:40:07 myhost postfix/qmgr[6122]: 125D8AE0063: removed Jan 7 07:40:07 myhost postfix/pipe[13261]: 125D8AE0063: to=<valid-user#exa...@au...>, orig_to=<val...@ex...>, relay=vacation, delay=0.84, delays=0.31/0.01/0/0.52, dsn=2.0.0, status=sent (delivered via vacation service) Jan 7 07:40:10 myhost postfix/smtp[13237]: C5D5AAE4E7E: to=<bounce-b_p7u18bgm62k2lkqip6d7150c3k======@bounces.livingsocial.com>, relay=filtered.maildistiller.com[5.135.34.120]:25, delay=2.8, delays=0.1/0/2.5/0.25, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 7611EA2) Jan 7 07:40:10 myhost postfix/qmgr[6122]: C5D5AAE4E7E: removed > I'm not sure if I want this in the GUI -IMHO it's somthing that should > only be editable by the server admin. Well, yeah, but it should only be in the GUI when an Admin is logged in (not a normal user)... just a field where the Admin could add strings like 'bounce', 'twitter', etc, with a selector on which of the headers to match on (ie, 'All', 'From', 'Envelope', etc...)... What I'm doing now is just much more error prone... |
From: Tanstaafl <tan...@li...> - 2013-01-09 15:00:56
|
I changed the line per your recommendation to match only on the from header, and another one that should have been matched didn't... I'd really appreciate some help getting this line working so I can stop replying to messages from linkedin and others I shouldn't be replying to... Why didn't this line: > elsif (/^from:\s+(bounce|do-not-reply|facebook|linkedin|list-|myspace|twitter)/i) { $logger->debug("Multi-string From header matching $1: $2 found; exiting"); exit (0); } match on the string 'bounce'? Jan 9 09:51:52 myhost postfix/qmgr[6122]: C8136AE6DBF: from=<bou...@ic...>, size=6162, nrcpt=2 (queue active) Jan 9 09:51:52 myhost postfix/virtual[2921]: C8136AE6DBF: to=<val...@ex...>, relay=virtual, delay=0.33, delays=0.27/0/0/0.06, dsn=2.0.0, status=sent (delivered to maildir) Jan 9 09:51:52 myhost postfix-25/smtpd[2919]: disconnect from relay-eu1.maildistiller.com[5.135.34.120] Jan 9 09:51:52 myhost postfix-25/smtpd[2640]: connect from myhost.example.com[127.0.0.1] Jan 9 09:51:52 myhost postfix-25/smtpd[2640]: 7FA89AE6DC6: client=myhost.example.com[127.0.0.1] Jan 9 09:51:52 myhost postfix/cleanup[2920]: 7FA89AE6DC6: message-id=<201...@ex...> Jan 9 09:51:52 myhost postfix/qmgr[6122]: 7FA89AE6DC6: from=<val...@ex...>, size=949, nrcpt=1 (queue active) Jan 9 09:51:52 myhost postfix-25/smtpd[2640]: disconnect from myhost.example.com[127.0.0.1] Jan 9 09:51:52 myhost postfix/pipe[2970]: C8136AE6DBF: to=<valid-user#exa...@au...>, orig_to=<val...@ex...>, relay=vacation, delay=0.83, delays=0.27/0.01/0/0.55, dsn=2.0.0, status=sent (delivered via vacation service) Jan 9 09:51:52 myhost postfix/qmgr[6122]: C8136AE6DBF: removed Jan 9 09:52:01 myhost postfix/smtp[2967]: 7FA89AE6DC6: to=<bou...@ic...>, relay=filtered.maildistiller.com[5.135.34.120]:25, delay=8.5, delays=0.12/0/6.1/2.3, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as A913DD3) Jan 9 09:52:01 myhost postfix/qmgr[6122]: 7FA89AE6DC6: removed On 2013-01-07 3:52 PM, Tanstaafl <tan...@li...> wrote: > On 2013-01-06 6:53 PM, Christian Boltz <pos...@cb...> wrote: >> The more interesting question is if there are better headers to identify >> those mails - "bounce" in the From might be a good hint, but a >> mailinglist header is better ;-) >> Therefore (the headers of) some example mails would be helpful. > > Well, since sometimes these trigger and sometimes they don't, it is > easier for me to find them in the logs - this doesn't give you the > headers, but it shows you what the logs are seeing - for example, this > one should have matched on the 'bounce', but it didn't: > > Jan 7 07:40:07 myhost postfix/qmgr[6122]: 125D8AE0063: > from=<bounce-b_p7u18bgm62k2lkqip6d7150c3k======@bounces.livingsocial.com>, > size=99193, nrcpt=2 (queue active) > Jan 7 07:40:07 myhost postfix/virtual[13259]: 125D8AE0063: > to=<val...@ex...>, relay=virtual, delay=0.38, > delays=0.31/0/0/0.07, dsn=2.0.0, status=sent (delivered to maildir) > Jan 7 07:40:07 myhost postfix-25/smtpd[13256]: disconnect from > relay-eu1.maildistiller.com[5.135.34.120] > Jan 7 07:40:07 myhost postfix-25/smtpd[13256]: connect from > myhost.example.com[127.0.0.1] > Jan 7 07:40:07 myhost postfix-25/smtpd[13256]: C5D5AAE4E7E: > client=myhost.example.com[127.0.0.1] > Jan 7 07:40:07 myhost postfix/cleanup[13219]: C5D5AAE4E7E: > message-id=<201...@ex...> > Jan 7 07:40:07 myhost postfix/qmgr[6122]: C5D5AAE4E7E: > from=<val...@ex...>, size=1443, nrcpt=1 (queue active) > Jan 7 07:40:07 myhost postfix-25/smtpd[13256]: disconnect from > myhost.example.com[127.0.0.1] > Jan 7 07:40:07 myhost postfix/qmgr[6122]: 125D8AE0063: removed > Jan 7 07:40:07 myhost postfix/pipe[13261]: 125D8AE0063: > to=<valid-user#exa...@au...>, > orig_to=<val...@ex...>, relay=vacation, delay=0.84, > delays=0.31/0.01/0/0.52, dsn=2.0.0, status=sent (delivered via vacation > service) > Jan 7 07:40:10 myhost postfix/smtp[13237]: C5D5AAE4E7E: > to=<bounce-b_p7u18bgm62k2lkqip6d7150c3k======@bounces.livingsocial.com>, > relay=filtered.maildistiller.com[5.135.34.120]:25, delay=2.8, > delays=0.1/0/2.5/0.25, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as > 7611EA2) > Jan 7 07:40:10 myhost postfix/qmgr[6122]: C5D5AAE4E7E: removed > >> I'm not sure if I want this in the GUI -IMHO it's somthing that should >> only be editable by the server admin. > > Well, yeah, but it should only be in the GUI when an Admin is logged in > (not a normal user)... just a field where the Admin could add strings > like 'bounce', 'twitter', etc, with a selector on which of the headers > to match on (ie, 'All', 'From', 'Envelope', etc...)... > > What I'm doing now is just much more error prone... > > ------------------------------------------------------------------------------ > Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, > MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current > with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft > MVPs and experts. SALE $99.99 this month only -- learn more at: > http://p.sf.net/sfu/learnmore_122412 > _______________________________________________ > Postfixadmin-devel mailing list > Pos...@li... > https://lists.sourceforge.net/lists/listinfo/postfixadmin-devel > |
From: Christian B. <pos...@cb...> - 2013-01-10 18:01:50
|
Hello, Am Mittwoch, 9. Januar 2013 schrieb Tanstaafl: > I changed the line per your recommendation to match only on the from > header, and another one that should have been matched didn't... > > I'd really appreciate some help getting this line working so I can > stop replying to messages from linkedin and others I shouldn't be > replying to... > Why didn't this line: > > elsif > > (/^from:\s+(bounce|do-not-reply|facebook|linkedin|list-|myspace|twi > > tter)/i) { $logger->debug("Multi-string From header matching $1: $2 > > found; exiting"); exit (0); } > match on the string 'bounce'? Probably because you only allow whitespace ("\s") between the "from:" and "bounce" - sorry for overlooking this before. You can replace the \s with .* to allow any number of any character, but it would probably be better to have it more restricted (for example ".*\@.*(bounce|....." would mean it only matches on the domain part - and yes, AFAIK the @ needs to be escaped in perl). Again, seeing the mail headers would it make easier to find out how strict the regex can be.) You might also want to read http://perldoc.perl.org/perlre.html to get a better understanding of the perl regex syntax ;-) Regards, Christian Boltz -- > By getting back to the bugs you are high-jacking the thread > and drawing away attention of what is asked. I'm ready to try this wonderfull new car with no engine nor wheels... [> houghi and jdd in opensuse-factory] |
From: Tanstaafl <tan...@li...> - 2013-01-13 19:51:17
|
Thanks for your help Christian... On 2013-01-10 12:59 PM, Christian Boltz <pos...@cb...> wrote: > You can replace the \s with .* to allow any number of any character, Tried this, but no luck... > Again, seeing the mail headers would it make easier to find out how > strict the regex can be.) Again, here is the one-liner that I'm trying to get working: > elsif (/^from:.*+(bounce|do-not-reply|facebook|linkedin|list-|myspace|twitter)/i) { $logger->debug("Multi-string From header matching $1: $2 found; exiting"); exit (0); } And here are the full headers for one of these messages that is generating an auto-reply that shouldn't (this is our anti-spam quarantine message): > Subject: Maildistiller Quarantine Summary > From: "Maildistiller Summary" <do-...@ma...> > Date: 2013-01-11 2:06 PM > To: cm...@me... > Return-Path: <do-...@ma...> > X-Original-To: cm...@me... > Delivered-To: cm...@me... > Received: from relay-eu1.maildistiller.com (relay-eu1.maildistiller.com [5.135.34.120]) by smtp.media-brokers.com (Postfix) with ESMTPS id 3FB5DABDA9C for <cm...@me...>; Fri, 11 Jan 2013 14:06:15 -0500 (EST) > Received: from relay-eu1.maildistiller.com (localhost [127.0.0.1]) by relay-eu1.maildistiller.com (Mail Distiller ESMTP Server) with ESMTP id 673D86005E for <cm...@me...>; Fri, 11 Jan 2013 19:06:14 +0000 (UTC) > Received: from interface1.dco.mdlocal (unknown [10.15.14.61]) by relay-eu1.maildistiller.com (Mail Distiller ESMTP Server) with ESMTP id 6530D6A for <cm...@me...>; Fri, 11 Jan 2013 19:06:14 +0000 (UTC) > Received: from localhost (localhost [127.0.0.1]) by interface1.dco.mdlocal (Mail Distiller ESMTP Server) with ESMTP id 5A4D02A1A for <cm...@me...>; Fri, 11 Jan 2013 19:06:14 +0000 (UTC) > MIME-Version: 1.0 > Content-Type: text/html; charset=utf-8 > Content-Transfer-Encoding: quoted-printable > Reply-To: "Maildistiller Summary" <do-...@ma...> > Message-ID: <201...@in...local> Any other ideas? Thanks again! |
From: Tanstaafl <tan...@li...> - 2013-01-15 14:26:16
|
Specifically, why is the 'do-not-reply' not matching the one liner? On 2013-01-13 2:50 PM, Tanstaafl <tan...@li...> wrote: > Thanks for your help Christian... > > On 2013-01-10 12:59 PM, Christian Boltz <pos...@cb...> wrote: >> You can replace the \s with .* to allow any number of any character, > > Tried this, but no luck... > >> Again, seeing the mail headers would it make easier to find out how >> strict the regex can be.) > > Again, here is the one-liner that I'm trying to get working: > >> elsif (/^from:.*+(bounce|do-not-reply|facebook|linkedin|list-|myspace|twitter)/i) { $logger->debug("Multi-string From header matching $1: $2 found; exiting"); exit (0); } > > And here are the full headers for one of these messages that is > generating an auto-reply that shouldn't (this is our anti-spam > quarantine message): > >> Subject: Maildistiller Quarantine Summary >> From: "Maildistiller Summary" <do-...@ma...> >> Date: 2013-01-11 2:06 PM >> To: cm...@me... >> Return-Path: <do-...@ma...> >> X-Original-To: cm...@me... >> Delivered-To: cm...@me... >> Received: from relay-eu1.maildistiller.com (relay-eu1.maildistiller.com [5.135.34.120]) by smtp.media-brokers.com (Postfix) with ESMTPS id 3FB5DABDA9C for <cm...@me...>; Fri, 11 Jan 2013 14:06:15 -0500 (EST) >> Received: from relay-eu1.maildistiller.com (localhost [127.0.0.1]) by > relay-eu1.maildistiller.com (Mail Distiller ESMTP Server) with ESMTP id > 673D86005E for <cm...@me...>; Fri, 11 Jan 2013 19:06:14 > +0000 (UTC) >> Received: from interface1.dco.mdlocal (unknown [10.15.14.61]) by relay-eu1.maildistiller.com (Mail Distiller ESMTP Server) with ESMTP id 6530D6A for <cm...@me...>; Fri, 11 Jan 2013 19:06:14 +0000 (UTC) >> Received: from localhost (localhost [127.0.0.1]) by interface1.dco.mdlocal (Mail Distiller ESMTP Server) with ESMTP id 5A4D02A1A for <cm...@me...>; Fri, 11 Jan 2013 19:06:14 +0000 (UTC) >> MIME-Version: 1.0 >> Content-Type: text/html; charset=utf-8 >> Content-Transfer-Encoding: quoted-printable >> Reply-To: "Maildistiller Summary" <do-...@ma...> >> Message-ID: <201...@in...local> |
From: Tanstaafl <tan...@li...> - 2013-02-25 13:00:32
|
On 2013-01-15 9:25 AM, Tanstaafl <tan...@li...> wrote: > Again, here is the one-liner (in the 'Take Headers Apart' section > thatI'm trying to get working: >> >> elsif (/^from:.*+(bounce|do-not-reply|facebook|linkedin|list-|myspace|twitter)/i) { $logger->debug("Multi-string From header matching $1: $2 found; exiting"); exit (0); } I'm still trying to get this working and am getting desperate... can someone PLEASE take a few minutes and help me? There has to be a simple solution to this. After asking on the postfix list and getting a recommendation to remove the '+' character, so it now looks like: > elsif (/^from:.*(bounce|do-not-reply|facebook|linkedin|list-|myspace|twitter)/i) { $logger->debug("Multi-string From header matching $1;$ I just saw another one in the logs go out that shouldn't have: from=<bounces+57277-7c79-validuser=exa...@se...>, size=88637, nrcpt=2 (queue active) Note the 'bounces' string in the beginning of the mail-from address. This should have matched the very first match sting ('bounce') in my one-liner... so, why isn't it? Does this 'Take Headers Apart' section even actually look at the mail-from address? Again, I just want this string to do a 'contains' match on anything in the mail-from address, whether it is in the local or domain part of the address. Anyone? Pretty please? Thanks, Charles |
From: Rudi F. <rud...@go...> - 2013-02-25 14:25:41
Attachments:
rudi_floren.vcf
|
Try this: /^from:.*(bounce|do-not-reply|facebook|linkedin|list-|myspace|twitter).*/i Am Montag, 25. Februar 2013 13:43:33 schrieb Tanstaafl: > On 2013-01-15 9:25 AM, Tanstaafl <tan...@li...> wrote: >> Again, here is the one-liner (in the 'Take Headers Apart' section >> thatI'm trying to get working: >>> >>> elsif (/^from:.*+(bounce|do-not-reply|facebook|linkedin|list-|myspace|twitter)/i) { $logger->debug("Multi-string From header matching $1: $2 found; exiting"); exit (0); } > > I'm still trying to get this working and am getting desperate... can > someone PLEASE take a few minutes and help me? There has to be a simple > solution to this. > > After asking on the postfix list and getting a recommendation to remove > the '+' character, so it now looks like: > >> elsif (/^from:.*(bounce|do-not-reply|facebook|linkedin|list-|myspace|twitter)/i) { $logger->debug("Multi-string From header matching $1;$ > > I just saw another one in the logs go out that shouldn't have: > > from=<bounces+57277-7c79-validuser=exa...@se...>, > size=88637, nrcpt=2 (queue active) > > Note the 'bounces' string in the beginning of the mail-from address. > > This should have matched the very first match sting ('bounce') in my > one-liner... so, why isn't it? > > Does this 'Take Headers Apart' section even actually look at the > mail-from address? > > Again, I just want this string to do a 'contains' match on anything in > the mail-from address, whether it is in the local or domain part of the > address. > > Anyone? Pretty please? > > Thanks, > > Charles > > ------------------------------------------------------------------------------ > Everyone hates slow websites. So do we. > Make your web apps faster with AppDynamics > Download AppDynamics Lite for free today: > http://p.sf.net/sfu/appdyn_d2d_feb > _______________________________________________ > Postfixadmin-devel mailing list > Pos...@li... > https://lists.sourceforge.net/lists/listinfo/postfixadmin-devel |
From: Tanstaafl <tan...@li...> - 2013-02-25 18:59:35
|
Thanks very much Rudi. Change applied, but only time will tell. I'll report back once I know if it works... On 2013-02-25 9:25 AM, Rudi Floren <rud...@go...> wrote: > Try this: > > /^from:.*(bounce|do-not-reply|facebook|linkedin|list-|myspace|twitter).*/i > > Am Montag, 25. Februar 2013 13:43:33 schrieb Tanstaafl: >> On 2013-01-15 9:25 AM, Tanstaafl <tan...@li...> wrote: >>> Again, here is the one-liner (in the 'Take Headers Apart' section >>> thatI'm trying to get working: >>>> >>>> elsif (/^from:.*+(bounce|do-not-reply|facebook|linkedin|list-|myspace|twitter)/i) { $logger->debug("Multi-string From header matching $1: $2 found; exiting"); exit (0); } >> >> I'm still trying to get this working and am getting desperate... can >> someone PLEASE take a few minutes and help me? There has to be a simple >> solution to this. >> >> After asking on the postfix list and getting a recommendation to remove >> the '+' character, so it now looks like: >> >>> elsif (/^from:.*(bounce|do-not-reply|facebook|linkedin|list-|myspace|twitter)/i) { $logger->debug("Multi-string From header matching $1;$ >> >> I just saw another one in the logs go out that shouldn't have: >> >> from=<bounces+57277-7c79-validuser=exa...@se...>, >> size=88637, nrcpt=2 (queue active) >> >> Note the 'bounces' string in the beginning of the mail-from address. >> >> This should have matched the very first match sting ('bounce') in my >> one-liner... so, why isn't it? >> >> Does this 'Take Headers Apart' section even actually look at the >> mail-from address? >> >> Again, I just want this string to do a 'contains' match on anything in >> the mail-from address, whether it is in the local or domain part of the >> address. >> >> Anyone? Pretty please? >> >> Thanks, >> >> Charles |
From: Jakob U. <jak...@gm...> - 2013-02-25 22:09:17
|
On 25.02.2013 19:58, Tanstaafl wrote: > [...] but only time will tell. Try it out on some regular expression website like http://regexpal.com/ if you are not sure. Looks good though. Jakob |
From: Christian B. <pos...@cb...> - 2013-03-01 21:46:05
|
Hello, sorry for not replying earlier - I was busy with too many other things. At least one of them was PostfixAdmin - the old edit-...php and create-...php files are finally gone (replaced by *Handler classes). Now up to the TODOs and the CLI ;-) (add in interactive mode already works with the *Handler classes) Am Montag, 25. Februar 2013 schrieb Tanstaafl: > Thanks very much Rudi. Change applied, but only time will tell. There might be another issue, independent from your regex. My guess is that there's another (els)if condition that matches before your regex even has a chance to get checked. To check that, please post some more lines. To be exact: I'd like to see the complete code block starting from (around line 607) $logger->debug("Script argument SMTP recipient is : '$smtp_recipient' and smtp_sender : '$smtp_sender'"); while (<STDIN>) { until (around line 630) else {$lastheader = '' ; } } Regards, Christian Boltz -- Zu schön um nicht gesiggt zu werden ;-) [Rainer Behrendt in dag°] |
From: Tanstaafl <tan...@li...> - 2013-03-02 15:00:34
|
On 2013-03-01 1:06 PM, Christian Boltz <pos...@cb...> wrote: > sorry for not replying earlier - I was busy with too many other things. > At least one of them was PostfixAdmin - the old edit-...php and > create-...php files are finally gone (replaced by *Handler classes). Now > up to the TODOs and the CLI ;-) (add in interactive mode already works > with the *Handler classes) No problem at all Christian... I'm really looking forward to the 3.x release too! :) > Am Montag, 25. Februar 2013 schrieb Tanstaafl: >> Thanks very much Rudi. Change applied, but only time will tell. > > There might be another issue, independent from your regex. > > My guess is that there's another (els)if condition that matches before > your regex even has a chance to get checked. > > To check that, please post some more lines. To be exact: I'd like to > see the complete code block starting from (around line 607) > $logger->debug("Script argument SMTP recipient is : '$smtp_recipient' and smtp_sender : '$smtp_sender'"); > while (<STDIN>) { > until (around line 630) > else {$lastheader = '' ; } > } Ok, well, just to be thorough, I'm including everything in the 'Take headers apart' section, including the line immediately following my new line: > # Take headers apart > $cc = ''; > $replyto = ''; > > $logger->debug("Script argument SMTP recipient is : '$smtp_recipient' and smtp_sender : '$smtp_sender'"); > while (<STDIN>) { > last if (/^$/); > if (/^\s+(.*)/ and $lastheader) { $$lastheader .= " $1"; next; } > elsif (/^from:\s*(.*)\n$/i) { $from = $1; $lastheader = \$from; } > elsif (/^to:\s*(.*)\n$/i) { $to = $1; $lastheader = \$to; } > elsif (/^cc:\s*(.*)\n$/i) { $cc = $1; $lastheader = \$cc; } > elsif (/^Reply\-to:\s*(.*)\s*\n$/i) { $replyto = $1; $lastheader = \$replyto; } > elsif (/^subject:\s*(.*)\n$/i) { $subject = $1; $lastheader = \$subject; } > elsif (/^message\-id:\s*(.*)\s*\n$/i) { $messageid = $1; $lastheader = \$messageid; } > elsif (/^x\-spam\-(flag|status):\s+yes/i) { $logger->debug("x-spam-$1: yes found; exiting"); exit (0); } > # new 'multi-string' line is for adding any string you want to test for in the from header, but be careful what you put in here > elsif (/^from:.*(alerts|autoreply|bounce|do-not-reply|facebook|linkedin|list-|myspace|noreply|twitter).*/i) { $logger->debug("Multi-string From header matching $1 found; exiting"); exit (0); } > elsif (/^x\-facebook\-notify:/i) { $logger->debug('Mail from facebook, ignoring'); exit(0); } Many thanks for being willing to take a look at it. Again, I'm hoping for a one-liner that tests for any of the strings in both the mail-from and any other From headers. My biggest problem is testing changes though... I basically need to wait for someone to have their vacation enabled, and that gets emails from some of these senders I want to not send vacation messages for. Anyway, thanks again, and hopefully you'll either confirm that it maybe should work now, or point out something else I should change. Regards, Charles |
From: Christian B. <pos...@cb...> - 2013-03-02 18:19:18
|
Hello, Am Samstag, 2. März 2013 schrieb Tanstaafl: > On 2013-03-01 1:06 PM, Christian Boltz <pos...@cb...> wrote: > > sorry for not replying earlier - I was busy with too many other > > things. At least one of them was PostfixAdmin - the old edit-...php > > and create-...php files are finally gone (replaced by *Handler > > classes). Now up to the TODOs and the CLI ;-) (add in interactive > > mode already works with the *Handler classes) > > No problem at all Christian... I'm really looking forward to the 3.x > release too! :) ;-) > > Am Montag, 25. Februar 2013 schrieb Tanstaafl: > >> Thanks very much Rudi. Change applied, but only time will tell. > > > > There might be another issue, independent from your regex. > > > > My guess is that there's another (els)if condition that matches > > before your regex even has a chance to get checked. > > > > To check that, please post some more lines. To be exact: I'd like to > > see the complete code block starting from (around line 607) > Ok, well, just to be thorough, I'm including everything in the 'Take > headers apart' section, including the line immediately following my > new line: > > $logger->debug("Script argument SMTP recipient is : '$smtp_recipient' and smtp_sender : '$smtp_sender'"); > > while (<STDIN>) { > > last if (/^$/); > > if (/^\s+(.*)/ and $lastheader) { $$lastheader .= " $1"; next; } > > elsif (/^from:\s*(.*)\n$/i) { $from = $1; $lastheader = \$from; } > > elsif (/^to:\s*(.*)\n$/i) { $to = $1; $lastheader = \$to; } > > elsif (/^cc:\s*(.*)\n$/i) { $cc = $1; $lastheader = \$cc; } > > elsif (/^Reply\-to:\s*(.*)\s*\n$/i) { $replyto = $1; $lastheader = \$replyto; } > > elsif (/^subject:\s*(.*)\n$/i) { $subject = $1; $lastheader = \$subject; } > > elsif (/^message\-id:\s*(.*)\s*\n$/i) { $messageid = $1; $lastheader = \$messageid; } > > elsif (/^x\-spam\-(flag|status):\s+yes/i) { $logger->debug("x-spam-$1: yes found; exiting"); exit (0); } > > # new 'multi-string' line is for adding any string you want to test for in the from header, but be careful what you put in here > > elsif (/^from:.*(alerts|autoreply|bounce|do-not-reply|facebook|linkedin|list-|myspace|noreply|twitter).*/i) { $logger->debug("Multi-string From header matching $1 found; exiting"); exit (0); } > > elsif (/^x\-facebook\-notify:/i) { $logger->debug('Mail from facebook, ignoring'); exit(0); } Looks like my guess was correct - which also means your new line was never run. The reason is: > > if (/^\s+(.*)/ and $lastheader) { $$lastheader .= " $1"; next; } > > elsif (/^from:\s*(.*)\n$/i) { $from = $1; $lastheader = \$from; } ^^^^^^^^^^^^^ This matches all lines starting with 'from:', so the condition is met. This also means the if block is "done" - perl won't check any of the following elsif conditions. Move your line near the beginning, so that it looks like this: > > if (/^\s+(.*)/ and $lastheader) { $$lastheader .= " $1"; next; } > > # new 'multi-string' line is for adding any string you want to test for in the from header, but be careful what you put in here > > elsif (/^from:.*(alerts|autoreply|bounce|do-not-reply|facebook|linkedin|list-|myspace|noreply|twitter).*/i) { $logger->debug("Multi-string From header matching $1 found; exiting"); exit (0); } > > elsif (/^from:\s*(.*)\n$/i) { $from = $1; $lastheader = \$from; } Now perl will first check your new line, and if it doesn't match, it will run the line that fills $from. For the records: This also means: your line has to call exit (it does) because otherwise it might happen that $from stays empty, which might cause some interesting[tm] problems later. Hmm, maybe I should split the if block into two (one for filling $from etc. and one for checking exit conditions) to avoid those problems. In theory, it might be slightly slower, but I doubt it's measureable - and it will make adding new checks easier because a problem like yours won't happen. > My biggest problem is testing changes though... I basically need to > wait for someone to have their vacation enabled, and that gets emails > from some of these senders I want to not send vacation messages for. You can run vacation.pl in test mode, see the VIRTUAL_VACATION/tests/ directory for some examples. test.sh is the script to run the tests. The only thing you need are some example mails ;-) Regards, Christian Boltz -- > ich mochte gerne fur eine unbestimte Zeit Linux von meiner > Festplatte werfen wie mache ich das genau? [Glenn Charpantier] Nimm die Platte aus dem Rechner, und pack sie ganz fest mit der Hand. Dann machst Du eine heftige Wurfbewegung, als wolltest Du die Platte ganz weit weg werfen. [...] Wenn die Bewgeung heftig genug war, ist Linux nun von der Platte gefallen. [Adalbert Michelic in suse-linux] |
From: Tanstaafl <tan...@li...> - 2013-03-03 12:19:20
|
On 2013-03-02 1:19 PM, Christian Boltz <pos...@cb...> wrote: > Move your line near the beginning, so that it looks like this: > >>> > > if (/^\s+(.*)/ and $lastheader) { $$lastheader .= " $1"; next; } >>> > ># new 'multi-string' line is for adding any string you want to test for in the from header, but be careful what you put in here >>> > > elsif (/^from:.*(alerts|autoreply|bounce|do-not-reply|facebook|linkedin|list-|myspace|noreply|twitter).*/i) { $logger->debug("Multi-string From header matching $1 found; exiting"); exit (0); } >>> > > elsif (/^from:\s*(.*)\n$/i) { $from = $1; $lastheader = \$from; } > Now perl will first check your new line, and if it doesn't match, it will > run the line that fills $from. Ka-ching! Thanks VERY much Christian, tested and working now... And many thanks also for the more in-depth explanations, but, just so I understand this a little better... What precisely is that other 'from' line checking: elsif (/^from:\s*(.*)\n$/i) { $from = $1; $lastheader = \$from; } and why would it be acting like a 'whitelist' of sorts? Thanks again! I'm soooo glad to get this working... :) |
From: Christian B. <pos...@cb...> - 2013-03-03 17:36:03
|
Hello, Am Sonntag, 3. März 2013 schrieb Tanstaafl: > Thanks VERY much Christian, tested and working now... :-) > What precisely is that other 'from' line checking: > > elsif (/^from:\s*(.*)\n$/i) { $from = $1; $lastheader = \$from; } > > and why would it be acting like a 'whitelist' of sorts? It isn't a real "check" or "whitelist". Instead, it stores information for later usage. Let's say there's a line From: foo bar <fo...@ex...> then the regex will match and - set $from to the first match group ("(.*)" in the regex), which is foo bar <fo...@ex...> - set $lastheader to point to $from I agree it might be a bit too much perl magic in one line ;-) Regards, Christian Boltz PS: hand-picked .sig today ;-) -- Perl - the only language that looks the same before and after RSA encryption. -- Keith Bostic |
From: Tanstaafl <tan...@li...> - 2013-03-03 17:40:23
|
On 2013-03-03 12:35 PM, Christian Boltz <pos...@cb...> wrote: > It isn't a real "check" or "whitelist". Instead, it stores information > for later usage. > > Let's say there's a line > From: foo bar<fo...@ex...> > then the regex will match and > - set $from to the first match group ("(.*)" in the regex), which is > foo bar<fo...@ex...> > - set $lastheader to point to $from Thanks Christian, but... hmmm... still not clear to me... If all it does is store info for later, why/how does it prevent my line from being evaluated if it comes after this line? |
From: Christian B. <pos...@cb...> - 2013-03-03 20:05:57
|
Hello, Am Sonntag, 3. März 2013 schrieb Tanstaafl: > If all it does is store info for later, why/how does it prevent my > line from being evaluated if it comes after this line? That's how the if / elsif / else block works: The first "true" condition (which is the "/^from:\s*(.*)\n$/i" check for lines starting with "from:") "wins". This also means that the remaining "elsif" conditions and the "else" are not even checked. To give you an (I hope) easily understandable example: if ( $day == my_birthday ) { go_out_for_lunch_with_friends; } elsif ( $day == sunday ) go_to_church; } else { go_to_work; } This pseudocode translates to: If it's your birthday, then you go out for lunch with some friends - and don't care about going to church or your work because you are in the restaurant with your friends ;-) If it's not your birthday, then you go (depending on the weekday) to church or to work. Well, real life isn't that easy, but you should get the point ;-) Regards, Christian Boltz -- given our recent direction, unmaintainable python would probably be preferred over unmaintainable perl. :) [Steve Beattie in apparmor] |
From: Rudi F. <rud...@go...> - 2013-03-03 20:51:48
Attachments:
rudi_floren.vcf
|
That means that the code is not well done. It should have a structure like: * get all information from header part * test against some patterns and set a variable to send or not to send. * send a vacation mail if the variable is true or something else. I would create patch but i don't have enough time. Am Sonntag, 3. März 2013 21:05:44 schrieb Christian Boltz: > Hello, > > Am Sonntag, 3. März 2013 schrieb Tanstaafl: >> If all it does is store info for later, why/how does it prevent my >> line from being evaluated if it comes after this line? > > That's how the if / elsif / else block works: > > The first "true" condition (which is the "/^from:\s*(.*)\n$/i" check for > lines starting with "from:") "wins". This also means that the remaining > "elsif" conditions and the "else" are not even checked. > > To give you an (I hope) easily understandable example: > > if ( $day == my_birthday ) { > go_out_for_lunch_with_friends; > } elsif ( $day == sunday ) > go_to_church; > } else { > go_to_work; > } > > This pseudocode translates to: > > If it's your birthday, then you go out for lunch with some friends - and > don't care about going to church or your work because you are in the > restaurant with your friends ;-) > > If it's not your birthday, then you go (depending on the weekday) to > church or to work. > > Well, real life isn't that easy, but you should get the point ;-) > > > Regards, > > Christian Boltz |
From: Rudi F. <rud...@go...> - 2013-03-04 00:31:12
Attachments:
rudi_floren.vcf
|
Voilá https://github.com/valkum/postfixadmin/commit/08cccdff6880d69d4523b40471c079ab13f23b2b Am Sonntag, 3. März 2013 21:51:38 schrieb Rudi Floren: > That means that the code is not well done. > > It should have a structure like: > * get all information from header part > * test against some patterns and set a variable to send or not to send. > * send a vacation mail if the variable is true or something else. > > I would create patch but i don't have enough time. > > Am Sonntag, 3. März 2013 21:05:44 schrieb Christian Boltz: >> Hello, >> >> Am Sonntag, 3. März 2013 schrieb Tanstaafl: >>> If all it does is store info for later, why/how does it prevent my >>> line from being evaluated if it comes after this line? >> >> That's how the if / elsif / else block works: >> >> The first "true" condition (which is the "/^from:\s*(.*)\n$/i" check for >> lines starting with "from:") "wins". This also means that the remaining >> "elsif" conditions and the "else" are not even checked. >> >> To give you an (I hope) easily understandable example: >> >> if ( $day == my_birthday ) { >> go_out_for_lunch_with_friends; >> } elsif ( $day == sunday ) >> go_to_church; >> } else { >> go_to_work; >> } >> >> This pseudocode translates to: >> >> If it's your birthday, then you go out for lunch with some friends - and >> don't care about going to church or your work because you are in the >> restaurant with your friends ;-) >> >> If it's not your birthday, then you go (depending on the weekday) to >> church or to work. >> >> Well, real life isn't that easy, but you should get the point ;-) >> >> >> Regards, >> >> Christian Boltz |
From: Tanstaafl <tan...@li...> - 2013-03-04 15:58:58
|
On 2013-03-03 3:05 PM, Christian Boltz <pos...@cb...> wrote: > The first "true" condition (which is the "/^from:\s*(.*)\n$/i" check for > lines starting with "from:") "wins". Ok... so, what, exactly, is that line testing for? I can't tell by looking at it... ;) |
From: Rudi F. <rud...@go...> - 2013-03-04 16:41:54
|
that part where you inserted your code fills the variables. In Perl you can run a regular expression. The expression return true or false. If the expression is true. you can access the content of "(...)". look at my code. I inserted your code a little bit later. After the empty check. There it will be processed anyway. Rudi Am Montag, 4. März 2013 16:58:26 schrieb Tanstaafl: > On 2013-03-03 3:05 PM, Christian Boltz <pos...@cb...> wrote: >> The first "true" condition (which is the "/^from:\s*(.*)\n$/i" check for >> lines starting with "from:") "wins". > > Ok... so, what, exactly, is that line testing for? I can't tell by > looking at it... ;) > > ------------------------------------------------------------------------------ > Everyone hates slow websites. So do we. > Make your web apps faster with AppDynamics > Download AppDynamics Lite for free today: > http://p.sf.net/sfu/appdyn_d2d_feb > _______________________________________________ > Postfixadmin-devel mailing list > Pos...@li... > https://lists.sourceforge.net/lists/listinfo/postfixadmin-devel |
From: Tanstaafl <tan...@li...> - 2013-03-04 17:02:21
|
On 2013-03-04 11:41 AM, Rudi Floren <rud...@go...> wrote: > that part where you inserted your code fills the variables. > In Perl you can run a regular expression. The expression return true or > false. If the expression is true. you can access the content of "(...)". > > look at my code. I inserted your code a little bit later. After the > empty check. There it will be processed anyway. Thanks very much Rudi... Hmmm... ok, being that I'm not a programmer (my bash skills are good enough to scare the hell out of a real programmer)... It appears that you have modified vacation.pl (adding lines 177-183) in such a way that I could just add this oneliner to vacation.conf, rather than having to manually edit vacation.pl every time a new version comes out? If, that would be totally awesome! But, I'm not sure I'm reading this correctly... Thanks again, as I would *love* to get this such that I could only edit vacation.conf if/when adding new strings, and not have to worry about changing vacation.pl with every update. Charles |