PHP Laravel NGINX html css Bootstrap Python Symfony Apache Windows linux jquery Django ASP vanilla Slim vagrant docker Homestead MySQL Redis Git SVN ssh Root vim PhpStorm Pycharm sass less PHP Laravel android html css Vue Angular React NGINX html css Javascript

阿里云服务器使用postfix通过三方stmp服务器发送邮件

原创

原创不易 ~ 转载请注明出处哦

最近在使用crontab的时候,需要在定时任务触发时,给自己的邮箱发送邮件。当然如果用Python自己写一个程序来发送邮件会非常简单,不过crontab本身就默认会进行邮件通知。那么今天我们就来看一下,如何通过postfix在命令行通过第三方的smtp服务器给自己的邮箱发邮件。

首先声明一下我的服务器环境:Ubutu 18.04 LTS
我们使用网易SMTP服务器为例做讲解。

最终我们要实现的是,在命令行输入:

 echo "This is really cool!" | mail -s "我正在使用postfix给自己发送邮件" -a "From: myname@163.com" myname@163.com

我们将在收件箱看到一封新邮件。


那么我们开始。

首先我们需要安装mailutils

$ sudo apt update
$ sudo apt install mailutils

完成后我们下载安装postfix

$ sudo apt install postfix

过程中会弹出如下选项,我们选择Internet Site:
blog.sbot.io - postfix installation.png

接下来还会有另一个弹出框:
blog.sbot.io - postfix mail name.png

这个输入无关紧要,我们用自己的域名即可(没有域名随意填也OK):

blog.sbot.io

完成后,我们就可以开始填写SMTP服务器的用户名和密码了。


由于存在一定安全隐患,现在很多服务商都会使用启授权密码,以免邮箱主密码泄露。网易邮箱需要在设置中,开启SMTP服务并且设置好授权密码。具体步骤很简单,这里不赘述。那么我们现在有了用户名和授权密码,我们需要在/etc/postfix文件夹下新建一个名为sasl_passwd的文件:

$ sudo nano /etc/postfix/sasl_passwd

文件中,我们填入我们的SMTP服务器地址,端口以及用户名和密码

[smtp.163.com]:465 username:password

保存文件。

接下来我们创建hash db文件:

$ sudo postmap /etc/postfix/sasl_passwd

如果一切顺利,你会看到/etc/postfix/文件夹下多出了一个名为sasl_passwd.db的文件。

由于以上两个文件里以明文形式储存了你的邮箱密码,我们需要将文件权限改成仅root用户可访问:

$ sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
$ sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db

至此,我们配置好了SMTP的用户名和密码。接下来我们还需要为postfix配置Relay Host

使用编辑器打开/etc/postfix/main.cf,找到relayhost配置,并添加上我们的SMTP服务器地址和端口:

# specify SMTP relay host
relayhost = [smtp.163.com]:465

然后我们在文件最后,添加上以下配置:

# enable SASL authentication
smtp_sasl_auth_enable = yes

# disallow methods that allow anonymous authentication.
smtp_sasl_security_options = noanonymous

# where to find sasl_passwd
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

# Enable STARTTLS encryption
smtp_use_tls = yes

# !!!IMPORTANT
smtp_tls_wrappermode = yes
smtp_tls_security_level = encrypt

完成后,保存配置文件并重启postfix

$ sudo systemctl restart postfix

这样一来,我们就已经大功告成!速度来测试一下:

$ echo "This is really cool!" | mail -s "我正在使用postfix给自己发送邮件" -a "From: myname@163.com" myname@163.com

注意-a "From: myname@163.com"这个参数很重要,必须携带。如果一切顺利,我们就会收到自己发送的邮件了!

最后声明一点,由于postfix是一个邮件服务器,我们如果只需要将其配置为一个向外发送通知邮件的服务,那么我们需要禁用外部连接。打开main.cf文件,将inet_interfaces改成loopback-only并保存即可:

inet_interfaces = loopback-only

正在加载验证码......
请先完成验证