您的位置:首页 > 编程语言 > C#

C#邮件发送CDO的COM组件发送方式

2017-03-17 16:00 323 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: