发送包含交易行为的多封电子邮件(如果一封邮件失败,则不会发送电子邮件)

时间:2015-10-07 13:31:24

标签: c# asp.net-mvc mvcmailer

很抱歉,如果我找不到包含我的问题的现有帖子。

我想做的是如下:

我只想向不同的人发送几封电子邮件(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;
    }
}

2 个答案:

答案 0 :(得分:4)

这实际上是一个很难解决的问题。这是因为当您发送电子邮件时,只要找到SMTP服务器就可以使用它(不会抛出任何异常)。

因此,您基本上必须等待一段任意时间,并检查您发送的电子邮件的收件箱是否有交付失败。如果发送失败,则停止发送。

长话短说,你不应该这样做。您应该简单地发送所有三个并通过其他方式(可能是另一封电子邮件)通知自己发生了故障以及哪个电子邮件失败。

答案 1 :(得分:1)

您可以检查是否抛出异常,然后取消发送后续电子邮件,直到问题得到解决。但是,这仅针对发送每封电子邮件个人电子邮件的问题。如果前两封邮件成功发送,而最后一封邮件抛出异常,则您无法发送第一封电子邮件。

可能的解决方法(实际上很丑陋)是最初将电子邮件发送到您控制的电子邮件地址。如果在此步骤中抛出异常,请记录错误,并且在处理错误之前不要再发送任何电子邮件。如果没有引发异常,请发送电子邮件。但是,这不会也不能处理收件人方面可能出现的问题。

无法保证传递失败通知,具体取决于SMTP和收件人SMTP的配置,可能不会发送传递失败通知。即使启用了传递失败通知,也可能几天都不会发送通知(在我之前的某个作业中,电子邮件传递失败通知直到14天才发送)。

理想情况下,在您向任何人发送任何文件之前,应在电子邮件地址的初始输入处理此问题。您只需将验证电子邮件发送到相关电子邮件地址,然后让用户点击验证链接返回您控制的网络服务。在此之前,您不会向目标收件人发送任何电子邮件。