一直以来对linux的底层发送机制一知半解,所以所有的配置过程都是撞大运。此次使用mailutils一步一步地配置,和思考来解决发送邮件的自动化处理过程。
这里以digitalocean工程师的指导文章(原文在此)为依据,自行配置在树莓派3上。
如果仔细的研究就不难发现我说说的mailutilis是一个叫做Postfix的软件,安装Postfix就是install Mailutils,呵呵,我是很感慨这点因为在第一次安装的时候就无缘无故的跳过了setup Postfix的界面,因为按Y就开始自动安装,2分钟就装好了,结果就开始”问题频频“连一封邮件都没有成功的发出去过。
工程师的语言能力是有限的的,所以列表来表达步骤:
在一切开始之前,你需要检查文中提到的域或者子域是否和服务器的名字一致。检查你服务器的名字很简单:输入hostname然后回车就能看到:
pi@raspberrypi:~ $ hostname raspberrypi #这里就是你的hostname:raspberrypi pi@raspberrypi:~ $
第一步:安装Postfix
安装Postfix就是安装mailutils,在安装之前最好是更新一下,以便系统保持最新的软件下载更新结点,指令如下:
sudo apt-get update sudo apt install mailutils
中间会提示是否执行安装Y/N?输入Y后回车,安装会继续执行,在接近尾声时系统会跳出一个可视化的界面,这个界面就是指导配置Postfix的.如果等待中你无聊或者急切地按了几次回车,那么恭喜你,你会跳过Postfix的配置界面,直接以默认的配置安装直到结束。但说来也奇怪的是我就算第二次安装,也还是漏过这个界面。。。再次看到时,木已成舟。不过呢,有办法再次打开这个界面,那就是re-configuration,通过reconfig就能打开界面,检测我的hostname和域是不是一样的,这里需要提一下的是:该名字是根邮件的”域“名字,如果根邮件是soo@example.org,那么正确的”mail name“就是example.org。而这里我还是不明白它会影响到我后续的邮件设置吗?
sudo dpkg-reconfigure postfix #解救办法,呵呵!
hostname
修改完后会执行更改
第二步:配置Postfix
接下来来配置Postfix,这里由于要求是”只发邮件”,所以邮件只需处理当前localhost的要求,然后发出邮件就行。为了实现这个单向的工作,Postfix只需利用服务器虚拟网络中的内部通讯去监听内部回传loopback interface。所以修改/etc/postfix/main.cf的配置以适配。
sudo vim /etc/postfix/main.cf --------------------------------- # 找到inet_interfaces = all . . . mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all . . . #将 all 改成 backloop-only . . . mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = backloop-only . . . # 找到mydestination并修改成到域名的配置 . . . mydestination = $myhostname, example.com, localhost.com, , localhost . . . # 把默认的后面仨改成你自己的域名,搞不懂就不改 . . . mydestination = $myhostname, localhost.$mydomain, $mydomain . . . # 修改完后,重启一下Postfix服务 sudo systemctl restart postfix
第三部:测试
在这里为了测试邮件的发送功能, 我执行了一个指令
echo "This is only the body of the email" | mail -s "This is the subject line" my@gmail.com #我自用的gmail为了使用API在两年前降低了安全级别所以能接受未被认证的SMTP邮件
在第一次测试时,我成功的收到了邮件,而第二封发送给outlook的失败了,接下来所有的发送都失败了,无论gmail还是outlook都是如此。在var/mail/pi中我看到了一句话,它指出IPv6的认证出现问题,这个非固定的IPv6地址被gmail认定为群发邮件的源头,在未经DNS反向解析的情况下,非固定IP地址就被这样杀死了。所以我回到reconfig里面把邮件指定为IP4发送。然后重启Postfix服务,三次发送给gmail都成功,但是outlook还是不行。刚刚查看了退件,发现outlook是在PBL上发现了我的IP,为什么呢?因为我的SMTP邮件是在未经认证的情况下发出的,这也就是为什么我的邮件就算收到了也是在垃圾箱里。这里列出两个坑:
- 测试用的收件箱安全级别不要太高
- 测试发送邮件避免使用IPv6
- 如果可以不要再第一次就使用安全级别高的邮箱来测试,这会自曝IP给全世界,封堵你的IP地址
- 在你的IP被光荣曝光后,自己去擦屁股remove你的IP(无妄之灾啊!)
- curl ipinfo.io/ip查看自己的IP
- 进入自助移除中心,移除自己的IPv4地址
第四部:转发系统邮件
在这列其实不是很重要,因为转发系统邮件给自己的外部邮箱也会遇到outlook反水给SPAMHUAS的事情,一旦被认定为spam邮件,尼玛,这就是很尴尬的事了。
编辑外部用户
sudo nano /etc/aliases #找到postmater: root ------------------------------ # /etc/aliases mailer-daemon: postmaster postmaster: root ------------------------------ # /etc/aliases mailer-daemon: postmaster postmaster: root root: my@gmail.com #增加这个 ------------------------------ # 重启刷新 sudo newaliases #发个给root的邮件试试 echo "This is the body of the email" | mail -s "This is the subject line" root #看看垃圾箱吧
至此,安装和配置Postfix就成功了,但是这只是一个开始,因为这仅限于利用gmail,而outlook还不能接受邮件,要知道国内是没法接受gmail的,而我最终的目的是更新最近的IPv4地址以便远程登录管理服务器。