利用CDO实现邮件回执功能

来源:互联网 发布:手机分辨率修改软件 编辑:程序博客网 时间:2024/04/30 04:18

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

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

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

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

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

using ...class Email{    /* to - 接收者邮件地址;  from - 发送者邮件地址;  subject - 邮件主题;         content - 邮件内容(文本内容);  attachments - 附件名称 */    public static void Send(string to, string from, string subject,                   string content,  string[] attachments)   {         try        {               CDO.Message          imsg = new CDO.MessageClass();              CDO.Configuration   iconf  = imsg.Configuration;              ADODB.Fields           flds = iconf.Fields;               flds[@"http://schemas.microsoft.com/cdo/configuration/sendusing"].Value = CDO.CdoSendUsing.cdoSendUsingPort;  // 2             flds[@"http://schemas.microsoft.com/cdo/configuration/smtpserverport"].Value = 25; // 默认是25端口            flds[@"http://schemas.microsoft.com/cdo/configuration/smtpserver"].Value = "<SMTP SERVER>";  // 邮件服务器地址            flds.Update();             imsg.Configuration = iconf;           imsg.To        = to;           imsg.From   = from;           imsg.Subject = subject;           imsg.TextBody = content;          imsg.Fields[@"urn:schemas:mailheader:disposition-notification-to"].Value = from;  // 设置“已读”回执           imsg.Fields[@"urn:schemas:mailheader:return-receipt-to"].Value = from; // 设置“已送达”回执           imsg.DSNOptions = CDO.CdoDSNOptions.cdoDSNSuccessFailOrDelay;               for (int i = 0; i < attachments.Length; i++)                 {                   if (File.Exists(attachments[i])                             imsg.AddAttachments(attachments[i], "", "");                  }                  imsg.Fields.Update();                 imsg.Send();        }        catch (System.Exception e)        {              // todo....        }   }          }


 

原创粉丝点击