我想知道是否可以通过 .NET 2.0 MailMessage 对象发送动态创建的内联 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 库“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
}
}