很抱歉,如果我找不到包含我的问题的现有帖子。
我想做的是如下:
我只想向不同的人发送几封电子邮件(2-3),更重要的是发送不同的内容。电子邮件是官方的,重要的,并且还记录在系统中。长话短说,我需要在某种原因中,其中一个未能阻止其他人的发送。我要么全部发送,要么都不发送。
到目前为止我做了什么
这不是我工作的系统第一次发送自动电子邮件。该应用程序是一个ASP MVC网站。所以前段时间,我安装了MvcMailer(MvcMailer)并按照它解释的方式使用它。它工作得很好,所以我喜欢预览电子邮件的想法(因为你可以给它一个发送的视图)。
因此,鉴于我的新问题,我仔细阅读了MvcMailer文档,但没有找到任何关于以类似事务的方式发送多封电子邮件的信息。无法想出一种强迫他们以这种方式行事的方法。在我发送电子邮件的测试中,即使是一封带有少量CC的电子邮件,所有工作邮件都会发送,其中只有一封失败(错误的电子邮件名称,关闭的端口......等等)。
我希望有人可以建议我实现这样的目标。我希望我的解释是充分的,如果没有,请告诉我,我将为您提供所需的所有详细信息。
如果MvcMailer无法做到这一点,那么可以使用其他工具吗?
到目前为止我的实施(请记住我还处于测试阶段)
public class MailerController : Controller
{
private MailerRepository mailerRep;
public MailerController()
{
this.mailerRep = new MailerRepository();
}
public void TestTransmittalEmail()
{
var model = this.mailerRep.GetTransmittalModel(1234); //I've stucked a specific clientId
var mailer = new TransmittalsMailer();
mailer.TransmittalEmail(model).Send();
}
}
public class TransmittalsMailer : MailerBase
{
public TransmittalsMailer()
{
}
public MvcMailMessage TransmittalEmail(TransmittalManifestModel model)
{
var mailMessage = new MvcMailMessage() { Subject = "Transmittals - TESTING EMAIL" };
//embedding a few images in the email
var resources = new Dictionary<string, string>();
resources["logo"] = PDFResourcePaths.VripackLogo;
resources["companyInfo"] = PDFResourcePaths.CompanyInfoBlock;
mailMessage.To.Add("test1@email.com");
mailMessage.Attachments.Add(new Attachment(@"D:\ASD\TransmittalFolders\1\Archives\150812.1433.MMA.rar"));
ViewData["model"] = model;
this.PopulateBody(mailMessage, "TransmittalEmailView", resources);
return mailMessage;
}
}
答案 0 :(得分:4)
这实际上是一个很难解决的问题。这是因为当您发送电子邮件时,只要找到SMTP服务器就可以使用它(不会抛出任何异常)。
因此,您基本上必须等待一段任意时间,并检查您发送的电子邮件的收件箱是否有交付失败。如果发送失败,则停止发送。
长话短说,你不应该这样做。您应该简单地发送所有三个并通过其他方式(可能是另一封电子邮件)通知自己发生了故障以及哪个电子邮件失败。
答案 1 :(得分:1)
您可以检查是否抛出异常,然后取消发送后续电子邮件,直到问题得到解决。但是,这仅针对发送每封电子邮件个人电子邮件的问题。如果前两封邮件成功发送,而最后一封邮件抛出异常,则您无法发送第一封电子邮件。
可能的解决方法(实际上很丑陋)是最初将电子邮件发送到您控制的电子邮件地址。如果在此步骤中抛出异常,请记录错误,并且在处理错误之前不要再发送任何电子邮件。如果没有引发异常,请发送电子邮件。但是,这不会也不能处理收件人方面可能出现的问题。
无法保证传递失败通知,具体取决于SMTP和收件人SMTP的配置,可能不会发送传递失败通知。即使启用了传递失败通知,也可能几天都不会发送通知(在我之前的某个作业中,电子邮件传递失败通知直到14天才发送)。
理想情况下,在您向任何人发送任何文件之前,应在电子邮件地址的初始输入处理此问题。您只需将验证电子邮件发送到相关电子邮件地址,然后让用户点击验证链接返回您控制的网络服务。在此之前,您不会向目标收件人发送任何电子邮件。