C#邮件发送CDO的COM组件
System.Net.Mail
一开始使用自带Mail组件能正常发送邮件,直到用阿里云的专有网络的时候就出现问题,邮件不能正常发送,提示无语的“邮件发送失败”,没有其他异常信息,无从可查,你可能会看到这种提示http://bbs.csdn.net/topics/320204856。
最后了解到原来阿里云坑爹的专有网络自动禁用了25端口(没提示的,要自己找帮助中心),然后会提示你可以尝试申请开通25端口,事实证明是一本正经的胡说八道,以后不用申请了,因为专有网络怎么都不会给你开通的,然后会推荐你几种方式
- 1、阿里云:邮件可开放80端口
- 2、可使用465端口或993+SSL加密(我的网易的)
再次证明阿里的忽悠能力
最后会跟你说可以用我们阿里的邮箱,可以用80端口和465端口
这是你才知道说了半天就是要你用阿里的邮箱(因为.net确实会有问题),然而企业邮箱的费用大家可以看看阿里的https://exmail.aliyun.com/企业邮箱介绍,最低600RMB,这是各位请特别注意!!!你有可能又掉入阿里的坑了,如果你真正要用阿里企业邮箱的没问题,如果你只是要用阿里的企业邮箱发邮件而已的,请忽略这连接
真正的连接在这里https://wanwang.aliyun.com/mail/freemail/,阿里有免费的企业邮箱,只是绑定了一个6元的推送包。
注:为啥说.net有问题,你得去查查了,网上资料说明情况在这块465端口加密发送不了的是因为.net framework本身的bug,这块我就没研究了
这里才是真正的开始,以上都是我的吐槽
终极解决方案
- 1、使用阿里邮箱
- 2、使用CDO的COM组件发送
第一点上面的废话已经说了,重点说第二种,直接上代码:
代码块
引用CDO,例如:
CDO.Message oMsg = new CDO.Message();
//CDO.IConfiguration iConfg;
//iConfg = oMsg.Configuration;
//ADODB.Fields oFields;
//oFields = iConfg.Fields;
Configuration conf = new ConfigurationClass();
conf.Fields[CdoConfiguration.cdoSendUsingMethod].Value = CdoSendUsing.cdoSendUsingPort;
conf.Fields[CdoConfiguration.cdoSMTPAuthenticate].Value = CdoProtocolsAuthentication.cdoBasic;
conf.Fields[CdoConfiguration.cdoSMTPUseSSL].Value = true;
conf.Fields[CdoConfiguration.cdoSMTPServer].Value = "邮箱服务地址";//必填,而且要真实可用
conf.Fields[CdoConfiguration.cdoSMTPServerPort].Value = 465;//邮箱端口
conf.Fields[CdoConfiguration.cdoSendEmailAddress].Value = "<xxx@xxx>";//发送者邮箱
conf.Fields[CdoConfiguration.cdoSendUserName].Value = "xxx@xxx";//邮箱发送者名称
conf.Fields[CdoConfiguration.cdoSendPassword].Value = "xxxxxx"; //邮箱发送者密码,必须真实
conf.Fields.Update();
oMsg.Configuration = conf;
oMsg.TextBody = "Hello, how are you doing?";//邮件正文
//TODO: To send HTML body, uncomment the following lines:
//String sHtml;
//sHtml = "<HTML>\n" +
// "<HEAD>\n" +
// "<TITLE>Sample GIF</TITLE>\n" +
// "</HEAD>\n" +
// "<BODY><P>\n" +
// "<h1><Font Color=Green>Inline graphics</Font></h1>\n" +
// "</BODY>\n" +
// "</HTML>";
//oMsg.HTMLBody = sHtml;
//TOTO: To send WEb page in an e-mail, uncomment the following lines and make changes in TODO section.
//TODO: Replace with your preferred Web page
//oMsg.CreateMHTMLBody("http://www.microsoft.com",
// CDO.CdoMHTMLFlags.cdoSuppressNone,
// "", "");
oMsg.Subject = "Test SMTP";//主题
//TODO: Change the To and From address to reflect your information.
oMsg.From = "xxx@xxx";//发送者
oMsg.To = "xxx@xxx";//接收者
//ADD attachment.
//TODO: Change the path to the file that you want to attach.
//oMsg.AddAttachment("C:\Hello.txt", "", "");
//oMsg.AddAttachment("C:\Test.doc", "", "");
oMsg.Send();//发送
注释的为其他设置,可以不用
注意:你可能会发现编码好了后生成不了,这时候你会遇到这个问题 “在引用COM组件的时候,出现了无法嵌入互操作类型“xxxxx””
解决方案很简单,选中项目中引入的dll,鼠标右键,选择属性,把“嵌入互操作类型”设置为False。
到此结束,OVER