前几天才刚宣称从thunderbird转向gmail,就马上遇到难题:一个我必须使用的信箱,因为服务变更,不支持Forward了,只支持webmail或者IMAP。这几乎就使得我用Gmail作为统一信箱的计划破产,因为我没办法自动把信件Forward到Gmail了。这使得,我要么总开着除了Gmail以外的另一个webmail查信,要么总开着一个邮件客户端(如thunderbird)设置好IMAP查信。这样不是很方便,也很不甘心。
但是,我记得Linux下面有个叫做fetchmail的东东,查了一下,发现有戏。fetchmail可以通过IMAP/POP3协议到服务器上把信件fetch下来,然后forward给本地的用户。大喜,开始配fetchmail,但是始终没搞明白怎么能够把fetch下来的信件forward给不是本地的信箱。因为没时间也没心思去看文档,就本着投机取巧的心理在网上找。最后终于找到一个方案。我的最终方案和他描述的基本完全一样,我这里算是复述一遍。
需要的软件是fetchmail, procmail, 和sendmail。简单说来,就是fetchmail通过IMAP协议把信件从服务器fetch下来,然后procmail做处理,通过sendmail发往目的地。步骤如下:
1. 安装:aptitude install fetchmail procmail sendmail。我用ubuntu,是Debian系的,所以用aptitude/apt-get一条命令就能轻松把软件装上。
2. 配置fetchmail:在$HOME(~/)目录下创建一个叫做.fetchmailrc的文件。在这个文件内就简单写入一行 (复杂的功能,请看manual):
poll your-imap-mail.server.org proto IMAP username ‘yourusername‘ pass ‘yourpasswd‘ is ‘yourlocalusername‘ here
your-imap-mail.server.org: 替换成邮件服务器的域名
IMAP:协议,可以是IMAP,也可以是POP3,如果你的邮件供应商提供的是POP3的话。
yourusername: 你的邮件的用户名。
yourpasswd: 你查信用的密码。
yourlocalusername: 就是你配置fetchmail的这台机器上的你的用户名。
需要注意的一点是,在.fetchmailrc里面,邮箱密码是明文存放的。所有,文件权限不应该高于711。另外,只能在信得过的机器上使用,因为root总是能看这个文件的。
另外,我还没有试过怎么配IMAP over SSL,如果你的邮件服务器是支持IMAP over SSL的,就需要查一下手册了。
3. 配置procmail: 在$HOME(~/)目录下创建一个叫做.procmail的目录和一个mail目录,再创建一个叫做.procmailrc的文件。然后配置.procmailrc文件, 我的写成了这样:
PMDIR=$HOME/.procmail
MAILDIR=$HOME/mail
LOGFILE=$PMDIR/procmail.log
LOGABSTRACT=yes
:0
! your...@gmail.com
一开始的四行是一些基本变量设置,顾名思义啦。从:0开始,就是定义规则。我定义的是最简单的规则 — 没有规则。所有mail一律forward到your...@gmail.com。”!“就是forward的意思。procmail是可以通过regular expression来定义规则的,功能非常强大。具体就查手册吧(俺也没查,:P)。 这里有一个不错的关于procmail配置的tutorial和有不少例子网页。 procmail是非常常用的sort/filter邮件的工具,几乎所有unix/linux邮件服务器都支持它,可以自动完成很多功能。
4. 测试: 在shell下输入
$fetchmail -k
根据信箱的状态,你会看到一些信息,比如
fetchmail: No mail for yourusername at your-imap-mail.server.org
或者
1 message for yourusername at your-imap-mail.server.org.
reading message yourusername@your-imap-mail.server.org:1 of 1 (1903 header octets) . (363 body octets) . not flushed
注意使用fetchmail的时候,”-k“选项保证了被fetch的邮件还保留在服务器上,你可以注意到上面的信息里有一句”not flushed“, 如果不用”-k“的话,就会是flushed.
去看一下procmail的log,根据上面procmail的设置,log在$HOME/.procmail/procmail.long (~/.procmail/procmail.log),应该能看到关于每条邮件的处理。比如
From x...@hotmail.com Sat Apr 29 01:00:44 2006
Subject: Hello
Folder: /usr/sbin/sendmail -oi your...@gmail.com 2592
查一下Gmail, 信件已经出现在inbox里了,和支持forward的信箱forward之后的效果一模一样。
5. 自动化。在crontab里面设置任务,
$crontab -e
默认的编辑器就会被唤起,然后加入下面一行
0,20,40 * * * * /usr/bin/fetchmail -k -s
意思是每隔20分钟调用一次fetchmail, “-s“的意思是silent, 就不会输出我们测试时候看到的那些信息。(也可以不用crontab, 可以用”fetchmail -d 300″, 这样的命令让fetchmail以daemon模式运行,它会每隔300秒查一次信, 把”fetchmail -d 300″加入到你的startup script (比如.bashrc)里面, crontab的好处是即使用户不login, 只要机器开着,也一样会定时运行)
这样就算搞定了,从今以后只要配置了fetchmail的那台机器开着并联网,那个不支持forward的信箱的邮件就会被自动发往Gmail或者其他任何你愿意的信箱。
Related posts
Recent Comments