Ref*_*din 5 .net c# email windows-services image
我已经有一个C#windows服务,我们在内部使用它来监控网络上的目录,当它检测到更改时,使用我们的内部SMTP服务器向指定的人群发送电子邮件.
现在我需要在自动电子邮件中嵌入一个图像.我知道我需要创建一个AlternateView和一个Linked Resource,并在AlternateView中使用Linked Resource的cID,这是正确的.
我不明白的是我在哪里放图像?我应该将它添加到我的服务项目并设置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);
}
Run Code Online (Sandbox Code Playgroud)
实际上,您在这里误解了错误。据我所知,您的代码绝对没问题。为了仔细检查它,我将其复制到一个简单的应用程序中,更新了图像的本地路径并运行它 - 我立刻收到邮件..
另外,如果我给它一个错误的文件路径 - 它会立即抛出异常,指出找不到该文件:)
如果您没有在邮箱中收到图像,则可能是垃圾邮件过滤器正在过滤它。我在这里排除了 smtp 服务器设置,因为您说发送纯文本版本有效:)
UPD:根据个人经验,我建议将编码更改为 UTF8。这是我的邮件被垃圾邮件过滤器删除的标准之一。除此之外 - 你的代码看起来很好,我看不出有任何理由它不工作。毕竟它确实在我这边工作: )