<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        color:black;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";
        color:black;}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle18
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";
        color:black;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body bgcolor=white lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='color:#1F497D'>OK, so here’s the issue.<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>My original milter would “crap out” when an unknown command was sent to Postfix.  That milter is designed to remove attachments from a message, save them and replace them with a single HTML file pointing to where the attachments have been saved.  I was never able to diagnose why until I saw the postfix logs having Unknown commands at the exact same time as the message was received.  I started logging these and, lo and behold, coincidence.  <o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>Now, I have a milter that comes before my original that just passes on e-mail with unknown commands, but logs when they occur, to whom they were sent, etc.  <o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>I’ve just written yet another milter (evolved from the original) that I want to call when the unknown commands are hit.  This one would log the headers, et. al. to a database, with the attachments as blobs.<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>My concern is that this one will fail as well.  How do I tell my milter to only to the DB stuff if the unknown command is received?  Should that be  a true/false value as the trigger when unknown is hit?<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>Let me know if you’d like to see the code to my milters for clarification.<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>Regards,<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><div><p class=MsoNormal style='margin-bottom:10.0pt'><b><span style='font-size:10.5pt;color:#626262'>Larry G. Wapnitsky</span></b><span style='font-size:8.0pt;color:#626262'> MBA, MCSE, MCP+I<br>IT SUPPORT & ADMINISTRATION COORDINATOR<br><a href="http://www.wrtdesign.com/"><b><span style='font-size:10.5pt;color:#94BD2D;text-decoration:none'>WRT</span></b></a></span><b><span style='font-size:10.5pt;color:#94BD2D'><a href="http://www.wrtdesign.com/"><span style='color:#94BD2D;font-weight:normal;text-decoration:none'>  |  Wallace Roberts & Todd, LLC</span></a></span></b><span style='font-size:10.5pt;color:#94BD2D'><br></span><span style='font-size:8.5pt;color:#626262'>1700 Market Street, 28th Fl<br>Philadelphia, PA 19103<br><b>T  </b>215.430.5068<br><b>C  </b>215.713.8635<br><b>E  <a href="mailto:lwapnitsky@WRTdesign.com"><span style='color:#626262;font-weight:normal;text-decoration:none'>lwapnitsky@WRTdesign.com</span></a></b><o:p></o:p></span></p></div><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext'> Larry G. Wapnitsky <br><b>Sent:</b> Wednesday, May 23, 2012 12:01 PM<br><b>To:</b> 'Stuart D Gathman'; pymilter@bmsi.com<br><b>Subject:</b> RE: [Pymilter] Unknown command and further processing<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='color:#1F497D'>No problem yet.  I’m modifying two bits of existing code write now and wanted to make sure I could do what I needed to before continuing on.  I’ll keep you  posted on progress.<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><div><p class=MsoNormal style='margin-bottom:10.0pt'><b><span style='font-size:10.5pt;color:#626262'>Larry G. Wapnitsky</span></b><span style='font-size:8.0pt;color:#626262'> MBA, MCSE, MCP+I<br>IT SUPPORT & ADMINISTRATION COORDINATOR<br><a href="http://www.wrtdesign.com/"><b><span style='font-size:10.5pt;color:#94BD2D;text-decoration:none'>WRT</span></b></a></span><b><span style='font-size:10.5pt;color:#94BD2D'><a href="http://www.wrtdesign.com/"><span style='color:#94BD2D;font-weight:normal;text-decoration:none'>  |  Wallace Roberts & Todd, LLC</span></a></span></b><span style='font-size:10.5pt;color:#94BD2D'><br></span><span style='font-size:8.5pt;color:#626262'>1700 Market Street, 28th Fl<br>Philadelphia, PA 19103<br><b>T  </b>215.430.5068<br><b>C  </b>215.713.8635<br><b>E  <a href="mailto:lwapnitsky@WRTdesign.com"><span style='color:#626262;font-weight:normal;text-decoration:none'>lwapnitsky@WRTdesign.com</span></a></b><o:p></o:p></span></p></div><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext'> Stuart D Gathman <a href="mailto:[mailto:stuart@bmsi.com]">[mailto:stuart@bmsi.com]</a> <br><b>Sent:</b> Tuesday, May 22, 2012 2:59 PM<br><b>To:</b> <a href="mailto:pymilter@bmsi.com">pymilter@bmsi.com</a><br><b>Subject:</b> Re: [Pymilter] Unknown command and further processing<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Long ago, Nostradamus foresaw that on 05/22/2012 11:54 AM, Larry G. Wapnitsky would write: <o:p></o:p></p><p class=MsoNormal>I have the following code in a milter that determines when Postfix has received an unknown command:<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>@Milter.noreply</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>    def unknown(self, cmd):</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>        self.unkMilterlog.warning('Invalid command sent: %s' % cmd)</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>        try:</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>            self.unkMilterlog.warning('From: %s' % self.canon_from)</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>        except:</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>            self.unkMilterlog.warning('unable to determine Sender')</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>        try:</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>            for R in self.R:</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>                for recipient in R:</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>                    if not len(recipient) < 1: self.log('To %s' % recipient)</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>        except:</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>            self.unkMilterlog.warning('unable to determine Recipient(s)')</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>        return Milter.CONTINUE</span><o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal>Is it possible to do further processing on a message when “unknown” has been called?  Part of the reason this was initially created (for logging purposes) was that another milter was not being hit when an unknown command was being interpreted.  What I’d like to do is take the full message and put it into a MySQL blob for further analysis.<o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:12.0pt;font-family:"Times New Roman","serif"'>Nothing about milter prevents further processing.   I tested with sendmail, results below.  What problem are you having, exactly?<br><br>Milter code:<br><br>  @Milter.noreply<br>  def unknown(self, cmd):<br>    self.log('Invalid command sent: %s' % cmd)<br>    return Milter.CONTINUE<br><br>Client side:<br><br>220 mail.bmsi.com ESMTP Sendmail 8.14.3/8.14.3; Tue, 22 May 2012 14:50:40 -0400<br>HELO hulk<br>250 mail.bmsi.com Hello hulk [192.168.0.102], pleased to meet you<br>HELP<br>214-2.0.0 This is sendmail version 8.14.3<br>214-2.0.0 Topics:<br>214-2.0.0     HELO    EHLO    MAIL    RCPT    DATA<br>214-2.0.0     RSET    NOOP    QUIT    HELP    VRFY<br>214-2.0.0     EXPN    VERB    ETRN    DSN    AUTH<br>214-2.0.0     STARTTLS<br>214-2.0.0 For more info use "HELP <topic>".<br>214-2.0.0 To report bugs in the implementation see<br>214-2.0.0     <a href="http://www.sendmail.org/email-addresses.html">http://www.sendmail.org/email-addresses.html</a><br>214-2.0.0 For local information send email to Postmaster at your site.<br>214 2.0.0 End of HELP info<br>PING super<br>500 5.5.1 Command unrecognized: "PING super"<br>MAIL FROM: <a href="mailto:stuart@hulk.bmsi.com"><stuart@hulk.bmsi.com></a><br>250 2.1.0 <a href="mailto:stuart@hulk.bmsi.com"><stuart@hulk.bmsi.com></a>... Sender ok<br>RCPT TO: <a href="mailto:stuart@bmsi.com"><stuart@bmsi.com></a><br>250 2.1.5 <a href="mailto:stuart@bmsi.com"><stuart@bmsi.com></a>... Recipient ok<br>SCRIBBLE: foo<br>500 5.5.1 Command unrecognized: "SCRIBBLE: foo"<br>DATA<br>354 Enter mail, end with "." on a line by itself<br>Testing<br>.<br>250 2.0.0 q4MIoefa002370 Message accepted for delivery<br>quit<br>221 2.0.0 mail.bmsi.com closing connection<br>Connection closed by foreign host.<br><br>Milter log:<br><br>2012May22 14:50:40 [1] connect from hulk at ('192.168.0.102', 34367) INTERNAL<br>2012May22 14:50:54 [1] hello from hulk<br>2012May22 14:51:14 [1] Invalid command sent: PING super<br>2012May22 14:51:49 [1] mail from <a href="mailto:stuart@hulk.bmsi.com"><stuart@hulk.bmsi.com></a> ()<br>2012May22 14:51:58 [1] rcpt to <a href="mailto:stuart@bmsi.com"><stuart@bmsi.com></a> ()<br>2012May22 14:52:06 [1] Invalid command sent: SCRIBBLE: foo<br>2012May22 14:52:17 [1] Authentication-Results: mail.bmsi.com; iprev=pass policy.iprev=192.168.0.102 (hulk)<br>2012May22 14:52:17 [1] X-DSpam-Score: 0.152536<br>2012May22 14:52:17 [1] eom<o:p></o:p></span></p></div>
<p><pre>



----wrtmail--%3423wrt%----
</pre></p>
</body></html>