2

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

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

4

5 回答 5

3

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

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

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

如果您想走开源路线,您可以修改 codeproject 上的一些 SMTP 代码来执行此操作。基本上,您会将您的内容注入到 SMTP 进程的 DATA 命令中。

需要注意的一点:如果您的 MHT 文档包含嵌入的脚本、flash、activeX 对象或任何可能被邮件客户端阻止的东西,它可能不会呈现与您在浏览器中看到的相同的内容。

于 2009-05-28T13:46:57.717 回答
3

这有点棘手,但是是的,你可以做到。事实上,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);
于 2009-06-02T06:31:44.180 回答
1

您是否尝试将一些图像添加到 html 电子邮件?

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

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

于 2009-05-27T16:00:36.713 回答
0

可以通过 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
    }
}
于 2010-11-16T16:52:46.107 回答
0

可以通过 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
    }
}
于 2010-11-16T16:43:36.563 回答