160 lines
5.9 KiB
HTML
160 lines
5.9 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
|
|
<html>
|
|
<head>
|
|
<title>Python Milter FAQ</title>
|
|
</head><body>
|
|
|
|
<h1> Python Milter <a name=faq>FAQ</a> </h1>
|
|
|
|
<ol>
|
|
<h3> Compiling Python Milter </h3>
|
|
<li> Q. I have installed sendmail from source, but Python milter won't
|
|
compile.
|
|
<p> A. Even though libmilter is officially supported in sendmail-8.12,
|
|
you need to build and install it in separate steps. Take a look
|
|
at the <a href="/aix/sendmail12.spec">RPM spec file</a> for sendmail-8.12.
|
|
The %prep section shows you how to create
|
|
a site.config.m4 that enables MILTER. The %build section shows you how
|
|
to build libmilter in a separate invocation of make. The %install section
|
|
shows you how to install libmilter with a separate invocation of make.
|
|
<p>
|
|
|
|
<li> Q. Why is mfapi.h not found when I try to compile Python milter on
|
|
RedHat 7.2?
|
|
<p> A. RedHat forgot to include the header in the RPM. See the
|
|
<a href="milter.html#rh72">RedHat 7.2 requirements</a>.
|
|
<p>
|
|
|
|
<h3> Running Python Milter </h3>
|
|
|
|
<li> Q. The sample.py milter prints a message, then just sits there.
|
|
<pre>
|
|
To use this with sendmail, add the following to sendmail.cf:
|
|
|
|
O InputMailFilters=pythonfilter
|
|
Xpythonfilter, S=local:inet:1030@localhost
|
|
|
|
See the sendmail README for libmilter.
|
|
sample milter startup
|
|
</pre>
|
|
<p> A. You need to tell sendmail to connect to your milter. The
|
|
sample milter tells you what to add to your sendmail.cf to tell
|
|
sendmail to use the milter. You can also add an INPUT_MAIL_FILTER
|
|
macro to your sendmail.mc file and rebuild sendmail.cf - see the sendmail
|
|
README for milters.
|
|
<p>
|
|
|
|
<li> Q. I've configured sendmail properly, but still nothing happens
|
|
when I send myself mail!
|
|
<p> A. Sendmail only milters SMTP mail. Local mail is not miltered.
|
|
You can pipe a raw message through sendmail to test your milter:
|
|
<pre>
|
|
$ cat rawtextmsg | sendmail myname@my.full.domain
|
|
</pre>
|
|
Now check your milter log.
|
|
<p>
|
|
|
|
<li> Q. Why do I get this ImportError exception?
|
|
<pre>
|
|
File "mime.py", line 370, in ?
|
|
from sgmllib import declstringlit, declname
|
|
ImportError: cannot import name declstringlit
|
|
</pre>
|
|
<p> A. <code>declstringlit</code> is not provided by sgmllib in all versions
|
|
of python. For instance, python-2.2 does not have it. Upgrade to
|
|
milter-0.4.5 or later to remove this dependency.
|
|
<p>
|
|
|
|
<li> Q. Why do I get <code>milter.error: cannot add recipient</code>?
|
|
<pre>
|
|
</pre>
|
|
<p> A. You must tell libmilter how you might mutate the message with
|
|
<code>set_flags()</code> before calling <code>runmilter()</code>. For
|
|
instance, <code>Milter.set_flags(Milter.ADDRCPT)</code>. You must add together
|
|
all of <code>ADDHDRS, CHGBODY, ADDRCPT, DELRCPT, CHGHDRS</code> that apply.
|
|
<p>
|
|
|
|
<li> Q. Why does sendmail sometimes print something like:
|
|
"...write(D) returned -1, expected 5: Broken pipe"
|
|
in the sendmail log?
|
|
<p> A. Libmilter expects "rcpt to" shortly after getting "mail from".
|
|
"Shortly" is defined by the timeout parameter you passed to
|
|
<code>Milter.runmilter()
|
|
</code> or <code>milter.settimeout()</code>. If the timeout is 10 seconds,
|
|
and looking up the first recipient in DNS takes more than
|
|
10 seconds, libmilter will give up and break the connection.
|
|
<code>Milter.runmilter()</code> defaulted to 10 seconds in 0.3.4. In 0.3.5
|
|
it will keep the libmilter default of 2 hours.
|
|
<p>
|
|
|
|
<li> Q. Why does milter block messages with big5 encoding? What if I
|
|
want to receive them?
|
|
<p> A. sample.py is a sample. It is supposed to be easily modified
|
|
for your specific needs. We will of course continue to move generic
|
|
code out of the sample as the project evolves. Think of sample.py as
|
|
an active config file.
|
|
<p>
|
|
|
|
<li> Q. Why does sendmail coredump with milters on OpenBSD?
|
|
<p> A. Sendmail has a problem with unix sockets on OpenBSD. Use
|
|
an internet domain socket instead. For example, in <code>sendmail.cf</code> use
|
|
<pre>
|
|
Xpythonfilter, S=inet:1234@localhost
|
|
</pre>
|
|
and change sample.py accordingly.
|
|
<p>
|
|
|
|
<li> Q. How can I change the bounce message for an invalid recipient?
|
|
I can only change the recipient in the eom callback, but the eom callback
|
|
is never called when the recipient is invalid!
|
|
<p> A. Configure sendmail to use virtusertable, and send all unknown
|
|
addresses to /dev/null. For example,
|
|
<h4>/etc/mail/virtusertable</h4>
|
|
<pre>
|
|
@mycorp.com dev-null
|
|
dan@mycorp.com dan
|
|
sally@mycorp.com sally
|
|
</pre>
|
|
<h4>/etc/aliases</h4>
|
|
<pre>
|
|
dev-null: /dev/null
|
|
</pre>
|
|
Now your milter will get to the eom callback, and can change the
|
|
envelope recipient at will. Thanks to Dredd at
|
|
<a href=http://www.milter.org/>milter.org</a> for this solution.
|
|
<p>
|
|
|
|
<li> Q. I am having trouble with the setreply method. It always outputs
|
|
"milter.error: cannot set reply".
|
|
<p> A. Check the sendmail log for errors. If sendmail is getting
|
|
milter timeouts, then your milter is taking too long and sendmail gave
|
|
up waiting. You can adjust the timeouts in your sendmail config. Here
|
|
is a milter declaration for sendmail.cf with all timeouts specified:
|
|
<pre>
|
|
Xpythonfilter, S=local:/var/log/milter/pythonsock, F=T, T=C:5m;S:20s;R:60s;E:5m
|
|
</pre>
|
|
|
|
<a name="spf">
|
|
<li> Q. So how do I use the SPF support? The sample.py milter doesn't seem
|
|
to use it.
|
|
<p> A. The bms.py milter supports spf. The RedHat RPMs will set almost
|
|
everything up for you. For other systems:
|
|
<ol type=i>
|
|
<li> Arrange to run bms.py in the background (as a service perhaps) and
|
|
redirect output and errors to a logfile. For instance, on AIX you'll want
|
|
to use SRC (System Resource Controller).
|
|
<li> Copy milter.cfg to the directory you run bms.py in, and edit it. The
|
|
comments should explain the options.
|
|
<li> Start bms.py in the background as arranged.
|
|
<li> Add Xpythonfilter to sendmail.cf or add an INPUT_MAIL_FILTER to
|
|
sendmail.mc. Regen sendmail.cf if you use sendmail.mc and restart
|
|
sendmail.
|
|
<li> Arrange to rotate log files and remove old defang files in
|
|
<code>tempdir</code>. The RedHat RPM uses <code>logrotate</code> for
|
|
logfiles and a simple cron script using <code>find</code> to clean
|
|
<code>tempdir</code>.
|
|
</ol>
|
|
|
|
</ol>
|
|
</html>
|