1. 程式人生 > >C#郵件傳送CDO的COM元件傳送方式

C#郵件傳送CDO的COM元件傳送方式

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 = "<[email protected]>";//傳送者郵箱 conf.Fields[CdoConfiguration.cdoSendUserName].Value = "[email protected]";//郵箱傳送者名稱 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 = "[email protected]";//傳送者 oMsg.To = "[email protected]";//接收者 //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