利用CDO实现邮件阅读或发送回执功能 For .Net
在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….
- }
- }
- }