发送内联MHTML

我想知道是否可以通过.NET 2.0 MailMessage对象发送动态创建的内联MHTML文件。

内联我的意思是:它应该以用户可以看到它的方式发送,一旦他打开电子邮件,而不必打开/下载附件。

这有点棘手,但是,你可以做到。 事实上,MailMessage类只不过是系统CDO.Message类上面的一个包装器,可以解决这个问题。 您还可以使用AlternateViewfunction,它更简单:

MailMessage mailMessage = new MailMessage("me@me.com" ,"me@me.com" ,"test" ,""); string ContentId = "wecandoit.jpg"; mailMessage.Body = ""; AlternateView av = AlternateView.CreateAlternateViewFromString(mailMessage.Body ,null ,MediaTypeNames.Text.Html); LinkedResource lr = new LinkedResource(@"d:\Personal\My Pictures\wecandoit.jpg"); lr.ContentId = ContentId; lr.ContentType.Name = ContentId; lr.ContentType.MediaType = "image/jpeg"; av.LinkedResources.Add(lr); mailMessage.AlternateViews.Add(av); SmtpClient cl = new SmtpClient(); cl.PickupDirectoryLocation = @"c:\test"; cl.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory; cl.Send(mailMessage); 

(jdecuyper – 感谢插件,因为我写了aspNetEmail)。

你可以用aspNetEmail做到这一点。 您可以使用MHT替换电子邮件的全部内容。

你无法使用System.Net.Mail执行此操作,但如果你想去商业路线,请发送电子邮件至dave@advancedintellect.com,我将告诉你如何做到这一点。

如果您想要一个开源路由,可能会在codeproject上有一些SMTP代码,您可以修改它们来执行此操作。 基本上,您将内容注入SMTP进程的DATA命令。

需要注意的一点是:如果您的MHT文档具有嵌入的脚本,flash,activeX对象或可能被邮件客户端阻止的任何内容,则它可能与您在浏览器中看到的内容不同。

您是否尝试将某些图像添加到HTML电子邮件中?

要完成此操作,您需要将图像嵌入电子邮件中。 我找到了一个教程,可以通过几行代码完成它。 您也可以购买aspnetemail程序集。 它总是帮助我发送带有嵌入式图像的电子邮件,如果出现任何问题,它们还有一个优秀的支持团队。

请记住,嵌入图片会使您的电子邮件更重,但更好:)

可以通过CDO.Message(有必要添加到项目引用COM库“Microsoft CDO for Windows 2000 Library”):

 protected bool SendEmail(string emailFrom, string emailTo, string subject, string MHTmessage) { string smtpAddress = "smtp.email.com"; try { CDO.Message oMessage = new CDO.Message(); // set message ADODB.Stream oStream = new ADODB.Stream(); oStream.Charset = "ascii"; oStream.Open(); oStream.WriteText(MHTmessage); oMessage.DataSource.OpenObject(oStream, "_Stream"); // set configuration ADODB.Fields oFields = oMessage.Configuration.Fields; oFields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = CDO.CdoSendUsing.cdoSendUsingPort; oFields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = smtpAddress; oFields.Update(); // set other values oMessage.MimeFormatted = true; oMessage.Subject = subject; oMessage.Sender = emailFrom; oMessage.To = emailTo; oMessage.Send(); } catch (Exception ex) { // something wrong } } 

可以通过CDO.Message(有必要添加到项目引用COM库“Microsoft CDO for Windows 2000 Library”):

 protected bool SendEmail(string emailFrom, string emailTo, string subject, string MHTmessage) { string smtpAddress = "smtp.email.com"; try { CDO.Message oMessage = new CDO.Message(); // set message ADODB.Stream oStream = new ADODB.Stream(); oStream.Charset = "ascii"; oStream.Open(); oStream.WriteText(MHTmessage); oMessage.DataSource.OpenObject(oStream, "_Stream"); // set configuration ADODB.Fields oFields = oMessage.Configuration.Fields; oFields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = CDO.CdoSendUsing.cdoSendUsingPort; oFields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = smtpAddress; oFields.Update(); // set other values oMessage.MimeFormatted = true; oMessage.Subject = subject; oMessage.Sender = emailFrom; oMessage.To = emailTo; oMessage.Send(); } catch (Exception ex) { // something wrong } }