繁体   English   中英

发送内联MHTML

[英]sending inline MHTML

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

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

(jdecuyper -感谢您提供的插件,正如我写的aspNetEmail)。

您可以使用aspNetEmail执行此操作。 您可以用MHT替换电子邮件的全部内容。

您无法使用System.Net.Mail进行此操作,但是,如果您想采用商业途径,请给我发送一封电子邮件,地址为dave@advancedintellect.com,我将向您展示如何做到这一点。

如果您想采用开放源代码路线,则可以在codeproject上添加一些SMTP代码,您可以对其进行修改以实现此目的。 基本上,您会将内容注入到SMTP进程的DATA命令中。

需要注意的一件事:如果您的MHT文档具有嵌入式脚本,Flash,activeX对象或邮件客户端可能阻止的任何内容,则其呈现的外观可能与在浏览器中看到的有所不同。

这有点棘手,但是可以,您可以做到。 实际上,MailMessage类不过是系统CDO.Message类之上的包装程序而已,它可以完成此操作。 您也可以使用AlternateView功能,它更简单:

MailMessage mailMessage = new MailMessage("me@me.com"
    ,"me@me.com"
    ,"test"
    ,"");
string ContentId = "wecandoit.jpg";
mailMessage.Body = "<img src=\"cid:" + ContentId + "\"/>";
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);

您是否要在HTML电子邮件中添加一些图像?

为此,您需要将图像嵌入到电子邮件中。 我找到了可以通过几行代码来完成它的教程 您也可以购买aspnetemail程序集。 发送带有嵌入式图像的电子邮件一直对我有很大帮助,如果出现任何问题,他们还拥有出色的支持团队。

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

可以通过CDO.Message(必须将其添加到项目引用COM库“ Windows 2000库的Microsoft CDO”中):

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库“ Windows 2000库的Microsoft CDO”中):

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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM