Ubuntu 20.04使用mailutils工具(sendmail/mail命令)无法发送邮件求助
Ubuntu 20.04使用mailutils工具(sendmail/mail命令)无法发送邮件求助
看起来你遇到的核心问题是Office 365的SMTP服务器(587端口)要求身份验证,但你的Postfix配置里缺少认证相关设置,另外还有个小配置错误需要修正,我来一步步帮你解决:
先梳理下你的当前配置和问题
你用来发送邮件的脚本:
subject="mail subject" body="Hello World" from="user@domain.com" to="user@domain.com" echo -e "Subject:${subject}\n${body}" | sendmail -f "${from}" -t "${to}" echo "sent"
你修改的main.cf配置:
inet_interfaces = loopback-onlymyhostname = outlook.office365.com→ 这个是错误的!relayhost = [outlook.office365.com]:587
遇到的错误:
status=bounced (host outlook.office365.com[ip] said: ip Client not authenticated to send mail.
第一步:修正main.cf的基础配置错误
myhostname应该设置为你本地Ubuntu机器的主机名,而不是微软的域名。你可以通过hostname命令查看本地主机名,然后修改main.cf:
myhostname = your-local-hostname # 替换成你的实际主机名,比如ubuntu-server-01
inet_interfaces = loopback-only和relayhost = [outlook.office365.com]:587这两个可以保留。
第二步:添加SMTP认证配置到main.cf
在main.cf末尾添加以下配置,开启SMTP认证并适配Office 365的要求:
# 启用SMTP身份认证 smtp_sasl_auth_enable = yes # 禁止匿名认证 smtp_sasl_security_options = noanonymous # 配置TLS加密要求,Office 365强制加密 smtp_tls_security_level = encrypt smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt # 指定认证机制,适配Office 365 smtp_sasl_tls_security_options = noanonymous
第三步:创建认证密码文件
Postfix需要存储你的Office 365账号密码来完成认证,创建一个密码文件/etc/postfix/sasl_passwd,内容格式如下:
[outlook.office365.com]:587 你的Office365邮箱账号:你的密码
⚠️ 注意:如果你的Office 365账号开启了多因素认证(MFA),这里不能用普通登录密码,必须使用应用密码(在微软账号管理页面生成)。
然后设置文件权限,确保只有root能读取,避免密码泄露:
sudo chmod 600 /etc/postfix/sasl_passwd
第四步:生成Postfix可用的哈希数据库
运行下面的命令,让Postfix识别这个密码文件:
sudo postmap /etc/postfix/sasl_passwd
第五步:重启Postfix服务
让新配置生效:
sudo systemctl restart postfix
第六步:测试邮件发送
现在可以用你原来的脚本测试,或者用更简单的命令快速验证:
echo "这是测试邮件内容" | mail -s "测试主题" -r "你的Office365邮箱账号" 收件邮箱地址
额外注意事项
- 发件邮箱(
from参数)必须和你在密码文件里配置的Office 365账号一致,否则会被服务器拒绝 - 确保你的Ubuntu机器能访问
outlook.office365.com的587端口,可以用telnet outlook.office365.com 587测试连通性,如果连接失败需要检查防火墙或网络设置
备注:内容来源于stack exchange,提问作者Nitin Alety
相关产品推荐
相关产品推荐

