修改ASP.NET中SMTP主机时出现SendAsDeniedException错误求助
解决STOREDRV.Submission.Exception:SendAsDeniedException错误
兄弟,这个问题我太熟了——你遇到的是发件人权限被拒绝的问题,核心原因就是Outlook/Hotmail的SMTP服务器规则和Gmail不一样:
5.2.0 STOREDRV.Submission.Exception:SendAsDeniedException.MapiExceptionSendAsDenied; 因永久性异常无法处理邮件,错误信息:Cannot submit message。
看你的代码一眼就能找到问题:你创建MailMessage时用的发件人是sender@hotmail.com,但SMTP认证用的却是mymail@hotmail.com。Outlook的SMTP服务器默认不允许用一个认证账号发送另一个地址的邮件,而Gmail可能你之前无意中开启了相关权限,所以没出问题。
最快的修复方案
直接把邮件的发件人地址改成和SMTP认证账号一致就行,修改这一行代码:
// 原来的代码 MailMessage mm = new MailMessage("sender@hotmail.com", "mymail@hotmail.com"); // 修改后 MailMessage mm = new MailMessage("mymail@hotmail.com", "mymail@hotmail.com");
如果想让收件人看到自定义的发件人名称(比如“网站联系表单”),可以用带名称的MailAddress:
MailMessage mm = new MailMessage( new MailAddress("mymail@hotmail.com", "网站联系表单"), "mymail@hotmail.com" );
其他配置确认
你的代码里其他SMTP配置都是正确的,不用改:
smtp.Host = "smtp.live.com"(现在也可以用smtp.office365.com,两者兼容)smtp.EnableSsl = true(587端口必须开启SSL)smtp.UseDefaultCredentials = false(一定要设为false,否则会覆盖你设置的账号密码)smtp.Port = 587(正确的端口)
如果必须用不同的发件人地址
如果你确实需要用sender@hotmail.com作为发件人,那得在Outlook账户后台设置里,允许mymail@hotmail.com代表sender@hotmail.com发送邮件。不过这个操作要求两个账号在同一个组织的Exchange环境下,个人免费Hotmail账号基本没法实现,所以还是优先用第一种方案更靠谱。
内容的提问来源于stack exchange,提问作者M.Carreira
相关产品推荐
相关产品推荐

