使用getmail(Debian Etch)从远程服务器检索电子邮件

使用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上了解有关所有可用选项的更多信息。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏