项目中遇到一个邮件发送功能,使用常用的的SmtpClient进行发送,在本地进行了126的邮箱进行测试通过,客户发来对应的邮箱信息后告知是使用的是465加密端口,SSL加密协议,再把相关信息进行配置替换后发现邮件发送一直报超时,一直也找不到原因。网上进行相关资料查询最终查阅到:“”465端口是Implicit SSL,由于.net FrameWork 的Bug,不能使用SmtpClint发送Implicit SSL邮件:(未去真实核对),最终在网上找到相关资料使用CDO的COM组件。

方法如下:
1、添加引用 -> COM -> Microsoft CDO for Windows2000 Library
2、在代码中引入命名空间: using CDO;

3、详细代码:

 

1. ​​/// <summary>​​
2. ​​/// 针对465加密端口 加密协议SSL(Implicit SSL)进行的邮件发送​​
3. ​​/// </summary>​​
4. ​​public void SendMailForSSL()​​
5. ​​{​​
6. ​​try​​
7. ​​{​​
8. ​​CDO.Message oMsg = new CDO.Message();​​
9. ​​Configuration conf = new ConfigurationClass();​​
10. ​​conf.Fields[CdoConfiguration.cdoSendUsingMethod].Value = CdoSendUsing.cdoSendUsingPort;​​
11. ​​conf.Fields[CdoConfiguration.cdoSMTPAuthenticate].Value = CdoProtocolsAuthentication.cdoBasic;​​
12. ​​conf.Fields[CdoConfiguration.cdoSMTPUseSSL].Value = true;​​
13. ​​conf.Fields[CdoConfiguration.cdoSMTPServer].Value = this.Host;//必填,而且要真实可用 ​​
14. ​​conf.Fields[CdoConfiguration.cdoSMTPServerPort].Value = this.Port;//465特有​​
15. ​​conf.Fields[CdoConfiguration.cdoSendEmailAddress].Value = "<" + this.From + ">";​​
16. ​​conf.Fields[CdoConfiguration.cdoSendUserName].Value = this.From;//真实的邮件地址 ​​
17. ​​conf.Fields[CdoConfiguration.cdoSendPassword].Value = this.Password; //为邮箱密码,必须真实 ​​
18.
19.
20. ​​conf.Fields.Update();​​
21.
22. ​​oMsg.Configuration = conf;​​
23. ​​oMsg.HTMLBody = this.Body;​​
24.
25. ​​oMsg.Subject = this.Subject;​​
26.
27. ​​oMsg.From = this.From;​​
28. ​​oMsg.To = this.To;​​
29. ​​//ADD attachment.​​
30. ​​//TODO: Change the path to the file that you want to attach.​​
31. ​​//oMsg.AddAttachment("C:\Hello.txt", "", "");​​
32. ​​//oMsg.AddAttachment("C:\Test.doc", "", "");​​
33. ​​oMsg.Send();​​
34. ​​}​​
35. ​​catch (System.Net.Mail.SmtpException ex)​​
36. ​​{​​
37. ​​throw ex;​​
38. ​​}​​
39. ​​} ​​

另:

1、提示:在VS2010,在引用COM组件的时候,出现了无法嵌入互操作类型“……”,请改用适用的接口的错误提示。

2、解决方案:

选中项目中引入的dll,鼠标右键,选择属性,把“嵌入互操作类型”设置为False。

涉及到的DLL有CDO,ADODB都需要做处理