看到有人在问有关SmtpClient的问题,突然想起以前发现的SmtpClient的一个bug,似乎在网上也没搜到过。
System.Net.Mail.SmtpClient是.Net2.0自带的smtp邮件类,相信很多人在用SmtpClient的时候会遇到过“System.FormatException: 在邮件标头中找到无效的字符”这个异常。这个异常很多情况下都会发生,从提示信息看是邮件地址、标题等不符合规范造成的,但我碰到的情况却是SmtpClient的一个bug:如果计算机名中含有中文的话,使用SmtpClient发送邮件就会抛这个异常。
原因是SmtpClient使用了计算机名作为smtp协议中HELO命令的参数,而在发送命令时又会对字符进行检查,若是非法字符则会抛出异常,很不幸中文字符都包括在内。这算不算是歧视中国人民呢?囧
如果在确保邮件格式正确的情况下还抛“在邮件标头中找到无效的字符”异常,或者在一台电脑上正常另一台机子上却抛该异常的话,检查下计算机名是否是中文的。希望能帮遇到同样问题的人少绕些圈子。
PS:另外还有人发现了SmtpClient出现类似现象的另一个bug:http://columns.chicken-house.net/post/e58e9fe4be86-SystemNetMail-e4b99fe69c83e69c89-Bug-.aspx,开发SmtpClient的家伙也真有点二的