解决SmtpClient在中文机器名下不能发邮件的方法

如果机器名使用中文,用SmtpClient发邮件就会失败,原因就是EHLO指令不能跟中文。

用Reflector看了下SmtpClient,发现有个字段“localHostName”用来保存机器名的,这就很简单了。

解决方法一、

扩展下SmtpClient,给它加个“LocalHostName”属性,用来取得、设置localHostName的值。

public class SuperSmtpClient : SmtpClient { private FieldInfo fiLocalHostName; public SuperSmtpClient() :base() { Initialize(); } public SuperSmtpClient(string host) : base(host) { Initialize(); } public SuperSmtpClient(string host, int port) : base(host, port) { Initialize(); } private void Initialize() { try { fiLocalHostName = this.GetType().GetField("localHostName", BindingFlags.NonPublic | BindingFlags.Instance); } catch { } } public string LocalHostName { get { string name = ""; if (fiLocalHostName != null) { try { object val = fiLocalHostName.GetValue(this); if (val != null) { name = val.ToString(); } } catch { } } return name; } set { if (fiLocalHostName != null) { try { fiLocalHostName.SetValue(this, value); } catch { } } } }//end LocalHostName }

 

方法二、

利用.NET字符串的一个特性,相同内容的字符串使用同一块内存区域。

定义一个字符串变量,把机器名赋值给改变量,利用这篇文章http://blog.csdn.net/coowoo/archive/2007/01/01/1472053.aspx

讲的方法把该字符串改为纯英文就可解决。

你可能感兴趣的:(解决SmtpClient在中文机器名下不能发邮件的方法)