You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:23:18