事情是这样的,工作需要去外网下点pdf,由于老外很多网站还停留在十年前的web技术上,而且大量年事已高的网站还在勉强运营加上服务器部署的机器数量少/国内直连的网速感人,几个pdf尝试了好多次都没法下载。我自己试了下确实在国内直接请求下载贼慢,于是通过在美国的vps去断点续传,然后再将文件scp到本地。但是在这个过程中我突然想,好蠢啊,为什么不直接将文件在机器上透过邮件直接投递呢?于是就去折腾了一下mutt,在centos7主机上发送gmail。

安装

$ sudo yum install mutt msmtp fetchmail procmail
# 其中msmtp可能在官方rpm仓库里是安装不到的,需要先拓展镜像源

在网上查了,centos6开始,基本都默认支持postfix来发送邮件,但是msmtp都兼容性更好。

procmail是用来对邮件进行分类的。

fetchmail用来通过pop3协议,从邮件服务器拉取邮件

而mutt则是一个套件,将上述三部分串联起来

关于如何配置以上客户端,google也给出了文档获取邮件参考

fetchmail

邮箱设置

首先你要在google邮箱确认已经设置了允许通过pop/imap协议下载邮件,这里不推荐pop(post office protocol)协议来下载邮件,imap的方式支持多设备,切可以双向操作, pop3的话据说容易丢失邮件和多次重复下载邮件。

其次由于google账号的安全性,你需要在自己谷歌账号的安全设置里开启“安全性较低的应用的访问权限”, 这里若不开启,fetchmail是拉不到你邮件的。

启用安全性较低的应用的访问权限

SSL

保证你的目标机器(如果你想在vps收邮件)开启了openssl,确保fetchmail有SSL支持。可以通过敲下列代码来检查:

$ ldd /usr/bin/fetchmail

openssl

若看到libssl.so.0等关键字表示OK。

ca

确保你的机器安装了ca。通过以下命令:

$ openssl s_client -connect pop.gmail.com:995

你应该看到+OK Gpop ready for requests from ....的字眼,表示OK。

~/.fetchmailrc

设置~/.fetchmailrc文件。

我的配置如下,保存后chmod 660 ~/.fetchmailrc

# set username
set postmaster "user5"
# set polling time (5 minutes)
set daemon 600

poll pop.gmail.com with proto POP3
   user '[email protected]' there with password 'secretpassword' is user5 here options ssl

测试

测试是否能正确拉取邮件,执行以下命令, 但是注意,若你是通过ssh连接到远程ISP的vps服务器上时,这个测试不要一只挂着,因为如果你的邮箱里有很多邮件,下面的命令会全部拉取并输出到你本地的屏幕,vps提供商可能会检测认为你在大量发送垃圾邮件而将你的机器停掉。

fetchmail -d0 -vk pop.gmail.com

procmail

~/.procmailrc

我的配置如下,保存后chmod 660 ~/.procmailrc

MAILDIR=$HOME/Mail   #邮件存储地址
DEFAULT=$MAILDIR/inbox   #默认:收件箱
VERBOSE=off
LOGFILE=/tmp/procmaillog

# 某个垃圾邮件规则
:0
* ^From: webmaster@st\.zju\.edu\.cn
/dev/null    #垃圾文件的存储位置

# 其它所有都存到收件箱中
:0:
inbox/

上一步fetchmail配资中,最后加入如下一行,可接收到的邮件就可以被procmail进行归档分类:

mda "/usr/bin/procmail"

在这里我发现的问题是,邮件在gmail中我标记已读了,但是procmail仍然归类在new里面,这个就有点迷了,需要再查阅一下procmail的文档。

msmtp

step1. 确认msmtp已经安装

where msmtp

若能获取到msmtp路径说明安装成功

step2. 查看smtp服务器是否支持tls加密

msmtp --host=smtp.gmail.com --serverinfo

查看smtp服务器信息

step3. 编辑~/.msmtprc文件如下。

我的配置如下,保存后chmod 660 ~/.msmtprc

.msmtprc file

这里msmtprc文件涉及到tls证书的配置,基本linux发行版都会默认安装证书,只是安装位置不同,可以参考如下位置:

“/etc/ssl/certs/ca-certificates.crt”, // Debian/Ubuntu/Gentoo etc.

“/etc/pki/tls/certs/ca-bundle.crt”, // Fedora/RHEL 6

“/etc/ssl/ca-bundle.pem”, // OpenSUSE

“/etc/pki/tls/cacert.pem”, // OpenELEC

“/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem”, // CentOS/RHEL 7

“/etc/ssl/certs”, // SLES10/SLES11, https://golang.org/issue/12139

“/system/etc/security/cacerts”, // Android

“/usr/local/share/certs”, // FreeBSD

“/etc/pki/tls/certs”, // Fedora/RHEL

“/etc/openssl/certs”, // NetBSD

setp4. 给自己发一封电子邮件测试

send an email to yourself

如果邮件正常收到,说明msmtp配置成功(去垃圾邮件里找找看)

success


references:

https://www.axllent.org/docs/view/gmail-pop3-with-fetchmail/

https://segmentfault.com/a/1190000018131615

https://golang.org/src/crypto/x509/root_linux.go