昨天配置了个定时任务需要发送邮件确认是否执行成功,就折腾了一下Linux的邮件,走了很多弯路才搞成功,这里记录一下配置过程吧

主要参考的文章是:Postfix使用外部SMTP服务器发送邮件

接下来我补充一些注意事项

安装

1
sudo apt install mailutils

配置

1
2
3
$ sudo vim /etc/postfix/sasl_passwd
#写入SMTP账号密码
[smtp.qq.com]:465 myEmail:password

qq邮箱的密码需要在设置-帐号里生成授权码
然后加密

1
sudo postmap /etc/postfix/sasl_passwd

映射发件人

默认是用你的用户名@主机名的方式发送邮件的,这样的邮件会被smtp服务器拒绝,所以要把发件人映射为你的qq邮箱地址

1
2
3
$ sudo vim /etc/postfix/generic
#写入映射关系
[email protected] [email protected]

myhostname是/etc/postfix/main.cf里面的myhostname

加密

1
sudo postmap /etc/postfix/generic

###修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$ sudo vim /etc/postfix/main.cf

#修改relayhost
relayhost = [smtp.exmail.qq.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

# where to find generic
smtp_generic_maps = hash:/etc/postfix/generic

# Enable STARTTLS encryption
smtp_use_tls = yes

# where to find CA certificates
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

# Enable tls encryption
smtp_tls_wrappermode = yes
smtp_tls_security_level = encrypt

使用

接下来重启postfix就可以发信了

1
2
sudo service postfix restar
echo "test" | mail -s "hello" [email protected]