无法使用 office365 设置发送 SMTP 邮件

Posted

技术标签:

【中文标题】无法使用 office365 设置发送 SMTP 邮件【英文标题】:Unable to send SMTP mails using office365 settings 【发布时间】:2019-07-14 00:43:26 【问题描述】:

我正在使用 SMTP 邮件通过 Laravel 发送邮件。除了 office365 邮件设置之外,一切都运行良好。

我使用的设置如下:

SMTP HOST = smtp.office365.com
SMTP PORT = 587
SMTP ENCRYPTION = tls
SMTP USER = username(email)
SMTP PASS = password

我得到的错误是:

554 5.2.0 STOREDRV.Submission.Exception:SendAsDeniedException.MapiExceptionSendAsDenied; 由于消息的永久异常,无法处理消息 无法提交消息

我已经在谷歌上搜索了很多这个错误,每个人都说像这个链接这样的混乱 Solution to this error 但是我个人在执行完所有提到的步骤后并没有发现任何混乱。

我无法登录此电子邮件,因为它是我们的客户电子邮件 ID,我没有登录权限。

我还创建了一个 Outlook 电子邮件 ID 并测试了此电子邮件设置。 它就像魅力一样。 我不知道客户电子邮件 ID 有什么问题。

任何建议都会很棒。

【问题讨论】:

您链接的解决方案是针对另一个错误“MapiExceptionNotFound”,您的错误请看这里:social.technet.microsoft.com/Forums/en-US/… 您的链接也暗示了相同的内容。但我无法找到前面提到的混乱 您需要使用 Sender 标头,而不是 From 标头。当您设置发送邮件的电子邮件地址时,请确保您的客户正在影响哪个标头。 【参考方案1】:

此错误意味着您在 SMTP 连接中指定其凭据的用户无法代表From 和/或Sender MIME 标头或FROM SMTP 命令中指定的用户提交邮件。

【讨论】:

我被这个错误困扰了整整 4 天。先生,我会在我生命中的每一天都想着你!!【参考方案2】:

Outlook 不提供使用不同于您的用户名登录的地址发送。

您需要两个电子邮件地址相同。

您可以在管理面板中添加一个或多个发件人,之后您可以轻松地从不同地址发送。

【讨论】:

您用于发送代码的发件人电子邮件以及您实际发送的电子邮件。 这解决了我的问题。我使用的是 Wordpress 插件 Easy WP SMTP,我需要确保“发件人电子邮件地址”和“SMTP 用户名”相同。 是的,我为这个问题浪费了 7 天。最后,这解决了我的问题。希望你没有浪费这么多时间。 这太疯狂了。我想返回一个错误消息太容易了,比如“发件人地址与信封发件人不匹配”。或“用户名和电子邮件地址不匹配”。 SMTP 是一个开放标准。 Microsoft 不应通过 SMTP 返回特定于实现的消息,这些消息属于服务器日志。理想情况下,我们不知道我们发送的环境是什么。在我们开始寻找解决方案之前,我们不应该花费数小时搜索 SMTP 错误的含义。 您的回答有效,但不幸的是,您链接的页面显示“Microsoft 将从 2021 年 5 月 10 日起取消将新帐户连接到 Outlook.com 的功能。”似乎他们已经删除了它,我们现在无法添加其他发送地址。【参考方案3】:

尝试了 4 天后,邮件开始使用端口:25 触发,所以不要尝试使用 587 或 465。尝试使用其他端口号。

主机:“smtp.office***.*”, 端口:25, 安全连接:假, 要求TLS:真, tls: 密码:'SSLv3' , 授权: 用户:*, 经过: ***

【讨论】:

【参考方案4】:

我遇到了类似的问题,我现在解决了, 您很可能会遇到此问题,因为您在 auth 选项中的“用户”电子邮件和在邮件选项中的“发件人”电子邮件不同

使用户和电子邮件相同,它将为您工作

const transporter = nodemailer.createTransport(
            service: 'outlook',
            port: 587,
            auth: 
                user: 'abcde@outlook.com',
                pass: '******'
            ,
            tls: 
                rejectUnauthorized: false
            
        );


        // setup email data with unicode symbols
        let mailOptions = 
            from: "abcde@outlook.com", // sender address
            to: 'xyz@gmail.com', // list of receivers
            subject: 'Node Contact Request', // Subject line
            text: 'Hello world?', // plain text body
            html: output // html body
        ;

        // send mail with defined transport object
        transporter.sendMail(mailOptions, (error, info) => 
            console.log(info);
            if (error) 
                return console.log(error);
            
            console.log('Message sent: %s', info.messageId);
            console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));
        );

如果您的电子邮件未通过验证,您可能会收到更多错误

【讨论】:

【参考方案5】:

我使用 Hotmail 并遇到了这个问题,但通过将 MAIL_FROM_ADDRESS 编辑为与 MAIL_USERNAME 相同来解决它

下面是我设置的 env 文件。

MAIL_MAILER=smtp
MAIL_HOST=smtp-mail.outlook.com
MAIL_PORT=587
MAIL_USERNAME=myemail@hotmail.com (this must be the same as MAIL_FROM_ADDRESS!)
MAIL_PASSWORD=mypassword
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=myemail@hotmail.com (this must be the same as MAIL_USERNAME!)

完成上述操作后一切正常。

【讨论】:

【参考方案6】:

您也可以使用此邮件驱动程序: https://github.com/motze92/office365-mail

您可以在此处指定租户有权使用的任何发件人电子邮件地址。已发送的电子邮件也将进入收件人已发送项目文件夹。

【讨论】:

【参考方案7】:

对于这个问题,请检查 jenkins 系统管理员电子邮件,它与 smtp 用户电子邮件相同

【讨论】:

【参考方案8】:

对我有用的是将DEFAULT_FROM_EMAIL 设置为EMAIL_HOST_USER。 使用 Office 365 SMTP 和 Django 3.0.10。

【讨论】:

以上是关于无法使用 office365 设置发送 SMTP 邮件的主要内容,如果未能解决你的问题,请参考以下文章

fsockopen 超时,无法连接到 Office 365 SMTP

使用 Office365 发送 javamail

如何设置outlook office365邮箱的中继

尝试通过 Office 365 发送电子邮件时出现 SMTP 5.7.57 错误

使用Office 365账号配置SMTP中继服务器

Laravel 队列,连接到 tcp://smtp.office365.com:587 超时