上周,由于联系需要,我使用服务器发送了一封邮件;本以为能正常投递到对方服务器,进而有效沟通,然而今天,我却收到了一封来自服务器内部的、发信失败被退回来的通知…
用指令postqueue -p
查询发现了大量积压的邮件,都因为和目标邮件服务器连接超时而无法发送…
(以下省略21xxxxxxx字)
于是确定了是服务器的25端口的出站流量被提供商封了,并且估计短时间内是没法解除封锁的,那么有没有办法使用非本地发送的方案进行处理呢?
本来我是以为必须要接入到应用端才能配置的,甚至想每一个客户端都做好了折腾的准备,突然在SendGrid的官网发现了将postfix设置为使用SendGrid中转发件的教程文档,那么就来顺手整理一遍吧!
在SendGrid注册账户、绑定域名与获取 API Key 之类的标准操作就不多赘述啦,需要帮助的可以留言哦,着重还是把官方的教程搬过来吧
注意有些Postfix的实例中仅允许使用数字和字母作为密码,这意味着您可能需要保证您的SendGrid密码只包含数字和字母。
首先找到postfix的主配置文件,例如/etc/postfix/main.cf
使用编辑器加入以下设置参数:
1 | smtp_sasl_auth_enable = yes |
可能与之前的设置有些会有重复项,但是不必担心,设置文件会自动以文件后段的设置为优先;也不建议去删除/注释那些设置,因为如果以后不使用SendGrid了,也许还是需要恢复原来的配置参数的。
此处我们将认证密钥设定为存储到/etc/postfix/sasl_passwd
这个文件中,您可以根据您的需要进行细节上的调整。
更推荐使用APIKey认证的方式进行处理,这样更安全,而且更加方便。
然后我们就需要将我们的认证密钥输入到这个文件内,可以按照这样的格式进行输入:
1 | [smtp.sendgrid.net]:587 yourSendGridUsername:yourSendGridPassword |
如果是apikey认证的,那么可以这样设置:
1 | [smtp.sendgrid.net]:587 apikey:SendGrid密钥 |
输入完成后保存文件,调整权限并生成对照档案文件:
1 | chmod 600 /etc/postfix/sasl_passwd |
完成之后就可以重启postfix服务啦
如果有报类似 no mechanism available
这样的错误,是因为系统缺少相关的库进行SASL的认证,可以安装这些组件哦:
对于Debian/Ubuntu系,使用apt包管理系统的,可以这样:
1 | apt install libsasl2-modules |
对于RedHat/Fedora/CentOS这些使用yum包管理器的,就需要这样安装啦:
1 | yum install cyrus-sasl-plain |
如果有遇到587端口无法工作的情况,可以考虑尝试使用2525端口;您可能同时也需要从主配置文件(如/etc/postfix/master.cf)中删除tlsmgr unix - - n 1000? 1 tlsmgr
前方的注释符号(#);
对于其他可能出现的错误,出于调试方便的目的,您可移步至您服务器的邮件系统日志文件,进行相对应的查询;如CentOS系统的默认日志文件位置为/var/log/maillog
。
这个文件会呈现的将不只有无法使用SendGrid发送邮件的错误情况,对于萌新用户而言更是一个学习服务器配置参数的绝佳机遇呀。
原文链接:Integrate SendGrid with Postfix - SendGrid Documentation