采用SmtpClient方式发送邮件,如果服务器的名字中有中文,会报"在邮件标头中找到无效的字符”"错误

最近在项目中做找回密码时用到SmtpClient方式发送邮件给用户,程序调试都通过了,在运行中报"在邮件标头中找到无效的字符”"错误。在网上看到有人说如果服务器的名字中有中文就会报这个错误,于是把我的机器上中文命名的名字改成了英文,再运行程序就没有报错了。
 

System.Net.Mail.SmtpClient是.Net2.0自带的smtp邮件类,相信很多人在用SmtpClient的时候会遇到过“System.FormatException: 在邮件标头中找到无效的字符”这个异常。这个异常很多情况下都会发生,从提示信息看是邮件地址、标题等不符合规范造成的,但我碰到的情况却是SmtpClient的一个bug:如果计算机名中含有中文的话,使用SmtpClient发送邮件就会抛这个异常。

原因是SmtpClient使用了计算机名作为smtp协议中HELO命令的参数,而在发送命令时又会对字符进行检查,若是非法字符则会抛出异常,很不幸中文字符都包括在内。这算不算是歧视中国人民呢?囧

如果在确保邮件格式正确的情况下还抛“在邮件标头中找到无效的字符”异常,或者在一台电脑上正常另一台机子上却抛该异常的话,检查下计算机名是否是中文的。希望能帮遇到同样问题的人少绕些圈子。

Debug了一上午,老是报 在邮件标头中找到无效的字符 这个错误,无论用英文还是中文,都有错误。百度上也都说什么编码错误。感觉不对,还是Google强悍,找到了相关信息,原来这个是System.Net .Mail.Message 类的一个错误。找到了一篇文章,是安德鲁的,由于原为繁体中文,现改成简体中文,放到下面。微软的官方网站,也报出了解决方案,不过还是用System.Web.Mail 发邮件比较实在点。


参考地址:http://www.cnblogs.com/pig_wang/archive/2010/04/26/1720900.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值