You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Azure Linux虚拟机Java应用通过O365连接SMTP中继失败求助

在Azure Linux虚拟机的Java应用中配置O365 SMTP中继及501错误排查

已知配置信息

你计划使用的O365 SMTP中继参数如下:

  • SMTP主机:smtp.office365.com
  • 端口:587
  • 启用TLS:true
  • 认证账户UID:UID-O365
  • 认证账户密码:PWD-O365

遇到的错误

发送测试邮件时触发以下异常:

MailException: com.sun.mail.smtp.SMTPSendFailedException: 501 5.1.7 Invalid address [AM4P190MB0211.EURP190.PROD.OUTLOOK.COM] ; nested exception is: com.sun.mail.smtp.SMTPSenderFailedException: 501 5.1.7 Invalid address [AM4P190MB0211.EURP190.PROD.OUTLOOK.COM]

问题分析与解决办法

这个501 5.1.7错误核心是O365判定发件人地址格式无效,和Azure Linux环境、Java开发语言关系不大,主要是发件人地址的配置不符合O365的要求,下面是具体的排查方向:

  • 发件人地址必须是完整有效的邮箱格式:O365不接受纯UID作为发件人,你需要确保代码中设置的发件人是一个完整的邮箱地址(比如your-account@your-domain.com),而不是仅用UID-O365。如果你的UID是账户前缀,那对应的完整邮箱就是UID-O365@your-domain.com

  • 发件人地址需与认证账户匹配:O365的SMTP中继默认要求发件人地址必须和你用来认证的UID-O365对应的邮箱一致。如果代码里设置的发件人是另一个邮箱,需要先在O365后台配置该认证账户有权限发送这个地址的邮件(比如设置发送权限或创建对应的邮件流规则)。

  • 检查代码中地址的拼写与格式:排查Java代码里构建发件人地址的逻辑,有没有多余的空格、特殊字符,或者域名缺失的情况。比如是否不小心写成了UID-O365@(缺少域名部分),或者邮箱地址有大小写拼写错误?

  • 用命令行工具验证SMTP连接:可以在Azure Linux虚拟机上用swaks工具先做测试,排除代码层面的问题。执行以下命令(替换成你的实际邮箱信息):

swaks --to test-recipient@example.com --from your-valid-o365-email@domain.com --server smtp.office365.com --port 587 --auth LOGIN --auth-user UID-O365 --auth-password PWD-O365 --tls

如果命令行能成功发送邮件,说明SMTP配置本身没问题,问题肯定出在Java代码的发件人地址设置上;如果命令行也报错,那需要检查O365账户是否开启了SMTP权限,或者有没有被组织的安全策略限制。

内容的提问来源于stack exchange,提问作者mwo

火山引擎 最新活动