Linux配置sendmail通过外部SMTP发送邮件

某些服务商禁用了sendmail的发信端口25,例如vultr.com的云VPS,导致sendmail不能发送邮件。
可以通过配置sendmail使用外部SMTP邮箱(例如谷歌的GMAIL和微软的outlook邮箱)发送邮件来解决这个问题。
相关软件安装:

yum -y install sendmail sendmail-*
wget ftp://ftp.cyrusimap.org/cyrus-sasl/cyrus-sasl-2.1.26.tar.gz
tar -zxvf cyrus-sasl-2.1.26.tar.gz
cd cyrus-sasl-2.1.26
./configrue
make && make install

I.生成sendmail证书

cd /etc/ssl/certs/
make sendmail.pem

II.添加SMTP账号
在/etc/mail/access 中添加使用的SMTP账号,例如outlook.com的邮箱:

AuthInfo:smtp-mail.outlook.com "U:smmsp" "I:[email protected]" "P=base64编码后的邮箱密码" "M:PLAIN"
AuthInfo:smtp-mail.outlook.com:587 "U:smmsp" "I:[email protected]" "P=base64编码后的邮箱密码" "M:PLAIN"

注:使用”P=”后面为base64编码的密码,使用”P:”则为没有编码的密码。
生成用户权限数据库
makemap -r hash /etc/mail/access.db > /etc/mail/access
III.配置SMTP发送服务器的smarthost
编辑 /etc/mail/sendmail.mc
在文件最后的MAILER(smtp)dnl前添加:

FEATURE(`authinfo',`hash /etc/mail/access.db')dnl
define(`SMART_HOST',`smtp-mail.outlook.com')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')
define(`ESMTP_MAILER_ARGS', `TCP $h 587')
define(`CERT_DIR', `/etc/ssl/certs')
define(`confCACERT_PATH', `CERT_DIR')
define(`confCACERT', `CERT_DIR/ca-bundle.crt')
define(`confCRL', `CERT_DIR/ca-bundle.crt')
define(`confSERVER_CERT', `CERT_DIR/sendmail.pem')
define(`confSERVER_KEY', `CERT_DIR/sendmail.pem')
define(`confCLIENT_CERT', `CERT_DIR/sendmail.pem')
define(`confCLIENT_KEY', `CERT_DIR/sendmail.pem')
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')

注:如果使用GMAIL,smarthost改为: define(`SMART_HOST’,`smtp.gmail.com’)dnl
保存配置到文件sendmail.cf中

m4 sendmail.mc > sendmail.cf

IV.重启sendmail服务

service sendmail restart
点赞