发送测试邮件时,提示“在邮件标头中找到无效的字符”

检查一下服务器的计算机名是否有中文字符。如果有的话,去掉中文字符,重启服务器后再试一下。

参考:http://hi.baidu.com/dostruggle/blog/item/df8cb4fbbf54331e6c22ebfe.html

看到有人在问有关SmtpClient的问题,突然想起以前发现的SmtpClient的一个bug,似乎在网上也没搜到过。

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://support.microsoft.com/kb/947323/zh-cn

 

posted @ 2010-04-26 08:15  pig_wang  阅读(3513)  评论(1编辑  收藏  举报