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

73

我正在使用 Laravel 发送电子邮件的 SMTP 邮件功能。除了 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; 由于永久性例外无法处理消息,消息提交失败

我已经在谷歌上搜索了很多关于这个错误的内容,像这个链接解决方案,但我按照所有步骤后仍然没有找到任何线索。

由于这是我们客户的电子邮件ID,我没有权限登录该账号。

我也创建了一个Outlook电子邮件ID并测试了这个电子邮件设置。它运行得非常好。我不知道客户电子邮件ID有什么问题。

有任何建议都可以,非常感谢。


你提供的解决方案是针对另一个错误"MapiExceptionNotFound",针对你的错误,请看这里:https://social.technet.microsoft.com/Forums/en-US/69426f64-717d-47e0-aa1b-700903ee83cc/520-storedrv-error?forum=exchangesvrsecuremessaginglegacy - dparoli
你的链接也表明了同样的事情。 但是我找不到所提到的混乱。 - Milind Patel
你需要使用“Sender”头部,而不是“From”头部。确保在设置发送邮件地址时,了解你的客户端会影响哪个头部。 - Paul-Sebastian Manole
9个回答

126

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

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

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


4
您使用的发送代码的发件人邮箱和实际发送邮件的发件人邮箱不同。 - Milind Patel
3
这对我解决了问题。我正在使用WordPress插件Easy WP SMTP,我需要确保“发件人电子邮件地址”和“SMTP用户名”相同。 - Jake
2
是的,我为这个问题浪费了7天的时间。最终,问题得到了解决。希望你没有浪费这么多时间在这个问题上。 - Milind Patel
8
这太疯狂了。我猜只是太容易返回一个错误信息,比如“发件人地址与信封寄送者不匹配”或“用户名和电子邮件地址不匹配”。SMTP是一种开放标准。微软不应该通过SMTP返回特定于实现的消息,这些消息应该在服务器日志中记录。理想情况下,我们不应该知道我们正在通过哪个环境发送。在我们能开始找到解决方案之前,我们绝不能花费数小时搜索SMTP错误的含义。 - imclean
2
你的回答是正确的,但不幸的是你提供的链接页面上写着:“自2021年5月10日起,微软将停止允许连接新账户到Outlook.com。” 看起来他们已经移除了该功能,我们现在无法添加其他发送地址。 - Betty
显示剩余11条评论

36

这个错误意味着在 SMTP 连接中指定的凭据用户无法代表在 From 和/或 Sender MIME 标头或 FROM SMTP 命令中指定的用户提交消息。


7
我被这个错误困扰了整整4天。终身每一天,我都会想起你,先生! - IfElseTryCatch

16

我遇到了类似的问题,现在已经解决了。

你可能遇到这个问题是因为身份验证选项中的“用户”电子邮件和邮件选项中的“发件人”电子邮件不同。将用户和发件人电子邮件设置为相同,它就会起作用。

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));
        });

如果您的电子邮件未经过验证,则很可能会遇到更多错误。


4

经过4天的尝试,邮件开始通过端口25触发,因此尝试使用其他端口号而不是587或465。

主机:"smtp.office***.*", 端口:25, 安全连接:false, 需要TLS:true, TLS:{     密码:'SSLv3' }, 认证:{     用户:*,     密码:*** }


4

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

以下是我的环境文件设置。

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!)

在执行上述步骤后,一切都正常工作。


2

对我来说有效的方法是将DEFAULT_FROM_EMAIL设置为EMAIL_HOST_USER。使用Office 365 SMTP和Django 3.0.10进行操作。


0

你还可以使用这个邮件驱动程序: https://github.com/motze92/office365-mail

在这里,你可以指定任何发送者邮箱地址,只要你的租户有权限。发送的电子邮件也会进入收件人的已发送项目文件夹。


0

针对此问题,请检查Jenkins系统管理员电子邮件,它应该与SMTP用户电子邮件相同。


-1
在Spring Boot Java中,您可以通过以下代码解决此问题。
application.properties文件
spring.mail.properties.mail.smtp.connecttimeout=5000
spring.mail.properties.mail.smtp.timeout=3000
spring.mail.properties.mail.smtp.writetimeout=5000
spring.mail.host=smtp.office365.com
spring.mail.password=password
spring.mail.port=587
spring.mail.username=abc@outlook.com
spring.mail.properties.mail.smtp.starttls.enable=true
security.require-ssl=true
spring.mail.properties.mail.smpt.auth=true

实现邮件功能的Java类

@Component
public class MailSenderClass {

@Value("${spring.mail.username}")
private String from;

@Autowired
private JavaMailSender javaMailSender;

public void sendMail(String to, String subject, String body) throws MessagingException {
    MimeMessage message = javaMailSender.createMimeMessage();
    MimeMessageHelper helper;
    helper = new MimeMessageHelper(message, true);//true indicates multipart message
    helper.setFrom(from) // <--- THIS IS IMPORTANT
    helper.setSubject(subject);
    helper.setTo(to);
    helper.setText(body, true);//true indicates body is html
    javaMailSender.send(message);
}

}

注意:你必须添加helper.setFrom(from)这一行代码,这非常重要,只有这样才能解决你的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接