一步步建立邮件发送(一)

一直以来对linux的底层发送机制一知半解,所以所有的配置过程都是撞大运。此次使用mailutils一步一步地配置,和思考来解决发送邮件的自动化处理过程。

这里以digitalocean工程师的指导文章(原文在此)为依据,自行配置在树莓派3上。

如果仔细的研究就不难发现我说说的mailutilis是一个叫做Postfix的软件,安装Postfix就是install Mailutils,呵呵,我是很感慨这点因为在第一次安装的时候就无缘无故的跳过了setup Postfix的界面,因为按Y就开始自动安装,2分钟就装好了,结果就开始”问题频频“连一封邮件都没有成功的发出去过。

工程师的语言能力是有限的的,所以列表来表达步骤:

  1. 安装Postfix
  2. 配置Postfix
  3. 测试SMTP Server
  4. 转发系统邮件system mail

在一切开始之前,你需要检查文中提到的域或者子域是否和服务器的名字一致。检查你服务器的名字很简单:输入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 #解救办法,呵呵!

hostnamesystemmailname

修改完后会执行更改reconfigdone

第二步:配置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(无妄之灾啊!)

第四部:转发系统邮件

在这列其实不是很重要,因为转发系统邮件给自己的外部邮箱也会遇到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地址以便远程登录管理服务器。