![](/img/trans.png)
[英]Creating Windows service to send automated email through outlook com interop
[英]Send Automated Email through Windows Service that has an embedded image using C#
我已经有一个C#windows服务,我们在内部使用它来监控网络上的目录,当它检测到更改时,使用我们的内部SMTP服务器向指定的人群发送电子邮件。
现在我需要在自动电子邮件中嵌入一个图像。 我知道我需要创建一个AlternateView和一个Linked Resource,并在AlternateView中使用Linked Resource的cID ,这是正确的。
我不明白的是我在哪里放图像? 我应该将它添加到我的服务项目并将Copy to Output Directory = Copy Always
设置Copy to Output Directory = Copy Always
? 如果是这样,那么在创建LinkedResource时我将如何访问? 另外,我在哪里将图像放在托管服务的服务器上?
这是我到目前为止所做的,但似乎没有用。 我没有收到任何错误,但我也没有收到任何电子邮件。 我猜它正在寻找图像,但我没有在正确的位置。
// This event is called when an object(file,folder) is created in the srcPath
void WatcherCreated(object source , FileSystemEventArgs e)
{
var folderName = e.Name;
var folderPath = e.FullPath;
MailMessage mail = new MailMessage();
mail.From = new MailAddress("FolderMonitor@myWork.org");
mail.To.Add("PSchaller@myWork.org");
mail.Subject = "New Enrollment for " + folderName;
AlternateView plainView = AlternateView.CreateAlternateViewFromString("This is the plain text view", null,
"text/html");
AlternateView htmlView =
AlternateView.CreateAlternateViewFromString("Here is an embedded image. <img src=cid:enrollProcessID>",
null, "text/html");
LinkedResource imageResourceLink = new LinkedResource("C:\\FolderMonitorService\\EnrollmentProcess.jpg")
{ContentId = "enrollProcessID"};
htmlView.LinkedResources.Add(imageResourceLink);
mail.AlternateViews.Add(plainView);
mail.AlternateViews.Add(htmlView);
var smtp = new SmtpClient("internalSMTP");
smtp.Send(mail);
}
实际上,你错误地解释了这里的错误..你的代码绝对没问题,只要我仔细检查一下,我把它复制到一个简单的应用程序中,更新了本地路径到图像并运行它 - 我立即收到电子邮件..
另外,如果我给它一个错误的文件路径 - 它会立即抛出异常,说明找不到该文件:)
如果您没有收到邮箱中的图像,可能是垃圾邮件过滤器正在过滤它..我在这里排除了smtp服务器设置,因为你说只发送纯文本版本有效:)
UPD:我从个人经验中推荐的是将编码改为UTF8。 这是我的邮件被垃圾邮件过滤器删除的标准之一..除此之外 - 你的代码看起来很好,我认为没有任何理由不能工作..毕竟它确实在我身边起作用: )
查看以下文章:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.