利用CDO实现邮件阅读或发送回执功能 For .Net

在C#中,原本我一直使用MailMessage和SmtpMail来发送邮件。

由于业务部门提了新的需求,要求在发送邮件的同时希望能够收到“回执”。为此我google了好几天。

发现MailMessage只能实现“已读”回执功能,而无法实现“已发送”回执功能。郁闷….

在友人的帮助下改用CDO来实现,MailMessage的底层应该也是这玩意。现把实现的部分代码张贴如下:

/* 说明:在使用CDO之前需要手工导入cdosys.dll组件。*/

[csharp]
view plain
copy
  1. using …  
  2. class Email  
  3. {  
  4.     /* to – 接收者邮件地址;  from – 发送者邮件地址;  subject – 邮件主题;  
  5.         content – 邮件内容(文本内容);  attachments – 附件名称 */  
  6.     public static void Send(string to, string from, string subject,  
  7.                    string content,  string[] attachments)  
  8.    {  
  9.          try  
  10.         {  
  11.                CDO.Message          imsg = new CDO.MessageClass();  
  12.               CDO.Configuration   iconf  = imsg.Configuration;  
  13.               ADODB.Fields           flds = iconf.Fields;  
  14.    
  15.               flds[@“http://schemas.microsoft.com/cdo/configuration/sendusing”].Value = CDO.CdoSendUsing.cdoSendUsingPort;  // 2  
  16.              flds[@“http://schemas.microsoft.com/cdo/configuration/smtpserverport”].Value = 25; // 默认是25端口  
  17.             flds[@“http://schemas.microsoft.com/cdo/configuration/smtpserver”].Value = “<SMTP SERVER>”;  // 邮件服务器地址  
  18.             flds.Update();  
  19.    
  20.             imsg.Configuration = iconf;  
  21.            imsg.To        = to;  
  22.            imsg.From   = from;  
  23.            imsg.Subject = subject;  
  24.            imsg.TextBody = content;  
  25.           imsg.Fields[@“urn:schemas:mailheader:disposition-notification-to”].Value = from;  // 设置“已读”回执  
  26.            imsg.Fields[@“urn:schemas:mailheader:return-receipt-to”].Value = from; // 设置“已送达”回执  
  27.            imsg.DSNOptions = CDO.CdoDSNOptions.cdoDSNSuccessFailOrDelay;  
  28.                for (int i = 0; i < attachments.Length; i++)  
  29.                  {  
  30.                    if (File.Exists(attachments[i])  
  31.                              imsg.AddAttachments(attachments[i], “”“”);  
  32.                   }  
  33.                   imsg.Fields.Update();  
  34.                  imsg.Send();  
  35.         }  
  36.         catch (System.Exception e)  
  37.         {  
  38.               // todo….  
  39.         }  
  40.    }  
  41.             
  42. }  

 

标签