使用getmail(Debian Etch)从远程服务器检索电子邮件
版本1.1
作者:Falko Timme
Getmail是从远程服务器检索电子邮件的程序; 它与fetchmail非常相似,但更灵活。 例如,它可以配置为将邮件直接传递到Maildir或mbox邮箱,而不需要诸如Postfix之类的MTA,但是当然也可以通过MTA来管理邮件。 Getmail可以使用所谓的过滤器,如SpamAssassin和ClamAV来扫描邮件,甚至可以在一定天数之后告诉getmail在原始服务器上删除邮件。
我不会保证这将为您工作!
1初步说明
我在Debian Etch系统上测试了一个名为falko
的本地用户的getmail
,该用户的本地电子邮件地址为falko@example.com
。
2安装getmail
为了安装getmail,我们要做的就是运行
apt-get install getmail4
作为根。
3配置getmail
可以通过每用户配置文件配置Getmail,然后可以由该用户运行getmail。 要使getmail自动运行,我们可以为该用户创建一个cron作业。
在本章中,我假设您以用户falko登录,而不是root!
Getmail正在寻找配置文件〜/ .getmail / getmailrc
,所以首先我们要创建目录〜/ .getmail
,权限为0700
:
mkdir -m 0700 ~/.getmail
然后我们创建〜/ .getmail / getmailrc
配置文件。 getmailrc
文件必须至少有一个[检索者]
部分和一个[目的地]
部分。
vi ~/.getmail/getmailrc
[retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = falko@someprovider.tld password = secret [destination] type = Maildir path = ~/Maildir/ |
上面的例子假设falko
有一个邮件帐户,用户名为falko@someprovider.tld
,密码在服务器pop.someprovider.tld
,并且他在这个服务器上有一个Maildir帐号,其中〜/ Maildir /
是他的Maildir目录。
这已经足够配置getmail了。 falko
现在可以通过运行从远程服务器检索电子邮件
getmail
当然, falko
不想每隔几分钟手动启动检索,所以我们为他创建一个cron工作。 仍然是用户falko
,我们跑
crontab -e
并创建一个这样的cron工作(每5分钟启动一次getmail):
*/5 * * * * /usr/bin/getmail &> /dev/null |
现在假设falko
没有Maildir帐户,但是这个服务器上有一个mbox帐户( / var / mail / falko
)。 我们要做的就是修改〜/ .getmail / getmailrc
中的[destination]
部分,例如:
vi ~/.getmail/getmailrc
[retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = falko@someprovider.tld password = secret [destination] type = Mboxrd path = /var/mail/falko |
在下一个示例中,我们想通过MTA(如Postfix)管理从远程服务器检索的电子邮件(我认为Postfix已经安装并工作)。 Postfix可以随时注意是否将邮件传递到Maildir或mbox,也可以通过amavisd-new来调用垃圾邮件和病毒扫描程序 。
vi ~/.getmail/getmailrc
[retriever] type = SimplePOP3Retriever server = pop.someprovider.tld username = falko@someprovider.tld password = secret [destination] type = MDA_external path = /usr/sbin/sendmail arguments = ("-i", "-bm", "falko@example.com") unixfrom = true |
(如你所见,我们告诉getmail, falko
的本地电子邮件地址是falko@example.com
。)
参数
行中的-i
开关很重要(感谢Chris Moules的提示):
问题是一些邮件在传递给sendmail时将被截断。 当消息的身体拉扯时,可能会发生这种情况
从源代码中包含一个带有单点(。)的行。 在SMTP中,这用于指示消息的结束。 调用时
sendmail在命令行上,默认是结束EOF上的消息或单点。
引用Postfix sendmail手册页:
-
默认情况下,Postfix sendmail(1)从标准输入读取消息,直到EOF或直到它
只读一行。 字符,并安排交货。
-
引用sendmail手册页:
-
没有标志,sendmail读取其标准输入,直到文件结尾或
一行仅由一个点组成,并发送该消息的副本
找到所有列出的地址。
-
我收到了客户的通知,有时候他们的电子邮件被“腐败”,“丢失”或“截断”。 看了之后
我们的服务器上的消息和他们的邮件系统是什么显然有一个问题。
一些研究表明,需要使用'-i'选项调用本地sendmail:
引用Postfix sendmail手册页:
-
-i从标准输入读取消息时,不要只处理一行。 字符作为输入的结尾。
-
这使得sendmail等到文件结束,直到提交消息。
您可以使用以下电子邮件测试-i
开关:
--- Four: .... Three: ... Two: .. One: . ---
3.1选项
我们还可以在〜/ .getmail / getmailrc
中添加一个[options]
部分,在这里我们可以更改getmail的默认行为,例如:
vi ~/.getmail/getmailrc
[...] [options] verbose = 1 read_all = false delete = true message_log_syslog = true |
上述选项告诉getmail打印有关检索到的消息的消息,仅检索新消息,在检索后从远程服务器删除消息,并登录到syslog。
如果您只想删除10天以上的邮件,可以按如下方式更改[options]
部分:
vi ~/.getmail/getmailrc
[...] [options] verbose = 1 read_all = false delete_after = 10 message_log_syslog = true |
您可以在http://pyropus.ca/software/getmail/configuration.html#conf-options上了解有关所有可用选项的更多信息。