<font size=2 face="sans-serif"><br>
Durwin F. De La Rue<br>
Management Sciences, Inc.<br>
6022 Constitution Ave. NE<br>
Albuquerque, NM  87110<br>
Phone (505) 255-8611</font>
<br>
<br><tt><font size=2>"Stuart D. Gathman" <stuart@bmsi.com>
wrote on 10/19/2011 05:05:15 PM:<br>
<br>
> "Stuart D. Gathman" <stuart@bmsi.com> </font></tt>
<br><tt><font size=2>> 10/19/2011 05:05 PM</font></tt>
<br><tt><font size=2>> <br>
> To</font></tt>
<br><tt><font size=2>> <br>
> durwin@mgtsciences.com</font></tt>
<br><tt><font size=2>> <br>
> cc</font></tt>
<br><tt><font size=2>> <br>
> pymilter@bmsi.com</font></tt>
<br><tt><font size=2>> <br>
> Subject</font></tt>
<br><tt><font size=2>> <br>
> Re: [Pymilter] Where do I find details of the class variables?</font></tt>
<br><tt><font size=2>> <br>
> On Wed, 19 Oct 2011, durwin@mgtsciences.com wrote:<br>
> <br>
> > I have the milter-template working.  I want to access the
'Received:'<br>
> > headers and search them for the IP address of the server it came
from.<br>
> <br>
> Short answer: You don't need to do that.<br>
> <br>
> Long answer: If you did need to search the Received headers, the header
call<br>
> back is called for each header field and provides the field name and<br>
> value for each header in turn (as it is received by sendmail/postfix).<br>
> <br>
> However, your milter is called in real time as the message is received,<br>
> and the connect ip is provided in the connect callback - so there
is usually<br>
> no need to search received headers.  I generally save this to
self.connectip.<br>
> (milter-template.py saves it to self.IP).<br>
> <br>
> Advanced answer: If you are running "behind" another (trusted)
MX, <br>
> and you want<br>
> the ip that connected to *that* MX, then the first Received header
encountered<br>
> by the header callback has the information.  You could generalize
this,<br>
> and make self.connectip a list, which gets the the current connect
ip as the<br>
> first member, and appends addition ips from received headers in order.<br>
> So *if* self.connectip[0] is trusted, then the IP that connected to
it<br>
> is self.connectip[1].  (I would post sample code, but don't know
how to<br>
> parse the Received header right off the bat.)</font></tt>
<br>
<br><tt><font size=2>I am beginning to understand what is occurring.  Does
milter-template.py pass the email through unmodified?  As I see it,
it copies the email into a string buffer (as it gets each piece) and in
the end returns the string buffer as the email?  It never modifies
the email directly? It does look like the from is being modified in 'envfrom'.</font></tt>
<br>
<br><tt><font size=2>When 'header' is called with each header field, I
would just look for 'Received:' in 'name' and parse the 'hval' string for
what I want?</font></tt>
<br>
<br><tt><font size=2>Since the string buffer is created in envfrom, is
it the first callback (after the init and connect)?</font></tt>
<br>
<br><tt><font size=2>What is 'envfrom' and 'envrcpt'?  Aren't the
from and recipient fields sent to header are well?</font></tt>
<br><tt><font size=2>Where is 'log' writing to?  maillog?  Would
'log ' be a good place to put debug information?</font></tt>
<br><tt><font size=2>What does background do?</font></tt>
<br><tt><font size=2><br>
> <br>
> > I see a whole lot of lines with 'self.<something>' but
I can't find<br>
> > where to get details about each of those. What variables are
available to<br>
> > me?<br>
> <br>
> Short answer: None<br>
> <br>
> Long answer: In python, you create instance variables by just assigning
them.<br>
> There are no public instance variables in Milter.Base except ones
you create.<br>
> There are public methods, and callbacks.  The callbacks provide<br>
> information in the arguments (for example the helo callback provides<br>
> the helo name used), and additional information can gotten from<br>
> methods like getsymval().<br>
> <br>
> Vaporware answer: I have thought about providing a plugin framework<br>
> on top of Milter.Base, which would include standard information gathering<br>
> plugins.  This is not much of a win for a single purpose milter
(such<br>
> as you are probably writing), but would help organize bloated, overgrown,<br>
> all singing, all dancing multi-purpose milters such as bms.py milter<br>
> (in the milter package).<br>
> <br>
> > Can anyone direct me to the documentation I need?<br>
> <br>
> </font></tt><a href=http://spidey2.bmsi.com/pymilter/><tt><font size=2>http://spidey2.bmsi.com/pymilter/</font></tt></a><tt><font size=2><br>
> <br>
> (on the left side navbar on pymilter page)<br>
> <br>
> --<br>
>           Stuart D. Gathman <stuart@bmsi.com><br>
>      Business Management Systems Inc.  Phone:
703 591-0911 Fax: 703 591-6154<br>
> "Confutatis maledictis, flammis acribus addictis" - background
song for<br>
> a Microsoft sponsored "Where do you want to go from here?"
commercial.<br>
</font></tt>
<br>
<br><tt><font size=2>Thank you for your time.</font></tt>
<br>
<br><tt><font size=2>Durwin</font></tt><font size=2 face="sans-serif"><br>
<br>
<br>
This email message and any attachments are for the sole use of the intended
recipient(s) and may contain proprietary and/or confidential information
which may be privileged or otherwise protected from disclosure. Any unauthorized
review, use, disclosure or distribution is prohibited. If you are not the
intended recipient(s), please contact the sender by reply email and destroy
the original message and any copies of the message as well as any attachments
to the original message.</font>

<!DSPAM:13321F6FB4D1286202746950>