我想知道是否可以通过.NET 2.0 MailMessage object发送动态创建的内联MHTML文件。
内联我的意思是:一旦打开电子邮件,就应该以用户可以看到它的方式发送,而无需打开/下载附件。
答案 0 :(得分:3)
(jdecuyper - 感谢插件,因为我写了aspNetEmail)。
您可以使用aspNetEmail执行此操作。您可以使用MHT替换电子邮件的全部内容。
你无法使用System.Net.Mail执行此操作,但如果你想去商业路线,请发送电子邮件至dave@advancedintellect.com,我会告诉你如何做到这一点。
如果您想要开源路由,可能会在codeproject上有一些SMTP代码,您可以修改它们来执行此操作。基本上,您可以将内容注入SMTP进程的DATA命令。
有一点需要注意:如果您的MHT文档包含嵌入的脚本,flash,activeX对象或可能被邮件客户端阻止的任何内容,则它可能与您在浏览器中看到的内容不同。
答案 1 :(得分: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);
答案 2 :(得分:1)
您是否尝试将某些图片添加到html电子邮件中?
要实现此目的,您需要将图像嵌入电子邮件中。我找到了tutorial来完成几行代码。您也可以购买aspnetemail组件。它总是帮助我发送带有嵌入式图像的电子邮件,如果出现任何问题,他们也有一个优秀的支持团队。
请记住,嵌入图片会使您的电子邮件更重,但更好:)
答案 3 :(得分: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
}
}
答案 4 :(得分: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
}
}