事务失败 服务器响应为:DT:SPM 163 smtp
1
message.IsBodyHtml = true; 正解
1.我曾试过与你类似的情况,我当时的办法是避免使用SendAsync 用 Send 基本是可以通过的,你可以先试试用Send。
2. 如果改用Send仍然是不行的话,你可以在web.config中加入
<system.web>..<trust level="Full">..</system.web>
如果加入trust标记后asp.net 不能运行证明你的 Host 是Medium Trust ,主是代码信任级别,如果是中级那么很多方法是不能被正常调用的,你的发送就有可能是遇到代码权限不足的异常了。
@旋转乾坤: 很明显你的网站是被强制中等代码信任级别的,这个与godaddy上一样坑爹。中等代码信任级别中 读取smtp 配置节是会引发安全异常的,正常的话下面那哥们教的在web.config上配smtp同样会出错。你只能hardcode. 而线程阻塞不是魔鬼,只是要将前代码执行完成才进入下一行。socket强制被关闭则说明你的代码是没有问题的,你反而可以去看看SMTP server那一端的设置是否允许你使用远程机器发送邮件这一选项。很多SMTP服务器是对其它服务端的发送调用默认禁止的,不禁止就会容易产生垃圾邮件(被黑成垃圾邮件发送器)。
这个错误的原因我找到了,是因为如使用smtp.163.com不允许在程序外自己向自己发送邮件,换个不一样的就一切正常,可以给qq、sina、163、hotmail等发送。难道这所谓的协议冲突(protocol violation)就是自己给自己发?不合理啊,你觉得呢?还有啊,你说的对方禁止通过远程客户端(你的服务端)发送邮件,这个可以自己去设置吗?(我没找到,而且我自己测试大部分默认是不禁止的,和你说的有点不一样,能谈谈你的看法吗?)
对于 163邮件服务器而然你的Web服务器就是一个发送邮件的客户端,且你的服务端在DNS上被识别出为外网服务器不属于一个可信任的服务器,这个可信任的授权是由163的邮件服务器软件的管理策略所设定的你并不能修改,你只能用,不管你是发向哪个收件人都是一样的。否则,谁都通这过种方式来发邮件,那么163就可以变成垃圾邮件发送服务器了,这自然是不请允许的。所以我之前叫你换SMTP服务器。一般部署站内邮件服务器都会在与web服务器同一个域内,因为这样SMTP会默认授信于同一IP上的程序,且这样不会被接收方的邮件服务器认为是垃圾邮件,如果发送客户端与发送服务器不在同一IP上就极容易被误认为是垃圾邮件,即使发送成功也只能被退信或进入垃圾箱中。
你是用.net自己的MailMessage发的邮件呢,还是使用了其它如Jmail这种邮件组件呢?
如果是使用了组件,很有可能是服务器上没有装组件导致的。
还有就是你可以在发送邮件的程序这里加一个try catch,然后在catch里写一个日志文件,把错误信息记录下来,这样可以帮助你找到原因。
把SMTP的配置直接写到web.config。不要写代码了
<system.net>
<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="support@ifca.com.cn">
<network host="smtp.163.com" port="25" userName="username" password="password"/>
</smtp>
</mailSettings>
</system.net>
你代码中有两句:
client.UseDefaultCredentials = true;
.....
client.UseDefaultCredentials = false;
你需要将第二句删除掉。
client.UseDefaultCredentials = true;true是设置为需要身份验证的,而你的代码,下面却设置为false,应该就是这个原因报错的。
我也测试了好久 最终得到解决方案 就把他贴在这里了 希望遇到此问题的朋友们能得到解决方案。
“登陆邮箱后台关闭客户端授权密码”就好啦。
这跟代码无关..是运营商搞的鬼...
代码是一样的代码..但是针对不同的服务商.出现的问题也不一样.. 所以尽量不要用这种"第三方"的个人邮箱来发送邮件
但是我们常常又要实现这样的功能.比如"注册激活","密码找回"等操作.这样要如何解决呢?
我给你2个解决方案.(都得有域名)
1`自己假设邮件服务器网上有很多开源的(hmailserver我用了这个)很傻的操作 配置后添加账号并且在域名解析设置下 就可以了.
这个有一个问题 就是有的服务商设置了拦截 你可以找管理员进行IP白名单(把IP告诉他就行了)
2`使用企业邮箱.(阿里云我是用过).自己的域名下设置企业邮箱(免费),.然后同样的 而已是添加用户 .代码也是一样的.
上面2个办法都可以解决问题.并且都比较稳定..跟你现在不同的是 你用你自己的 而不是"第三方"的.