c# - 发送多封带有交易行为的电子邮件(如果一封失败,则不会发送任何电子邮件)

标签 c# asp.net-mvc mvcmailer

很抱歉,如果我未能找到解决我的问题的现有帖子。

我想做的事情如下:

我只是想向不同的人发送几封电子邮件 (2-3),更重要的是发送不同的内容。这些电子邮件是官方的、重要的并且也记录在系统中。长话短说,当由于某种原因其中一个无法阻止其他人的发送时,我需要。我要么需要全部发送,要么一个都不发送。

到目前为止我做了什么

这并不是我工作的系统第一次需要发送自动电子邮件。该应用程序是一个 ASP MVC 网站。所以前段时间,我安装了 MvcMailer( MvcMailer) 并按照解释的方式使用它。它运行得很好,所以我喜欢预览电子邮件的想法(因为您可以给它一个要发送的 View )。

因此,鉴于我的新问题,我仔细阅读了 MvcMailer 文档,但没有找到任何有关以类似事务的方式发送多封电子邮件的内容。想不出有什么办法可以强制他们这样做。在我的测试中,当我发送一封电子邮件时,即使是一封带有几个抄送的电子邮件,所有工作邮件都会发送,只有其中一封失败(电子邮件名称错误、端口关闭......等等)。

我希望有人能给我建议一种方法来实现这样的目标。我希望我的解释足够,如果不够,请告诉我,我将为您提供所需的所有详细信息。

如果 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("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="384c5d4b4c09785d55595154165b5755" rel="noreferrer noopener nofollow">[email protected]</a>");

        mailMessage.Attachments.Add(new Attachment(@"D:\ASD\TransmittalFolders\1\Archives\150812.1433.MMA.rar"));

        ViewData["model"] = model;
        this.PopulateBody(mailMessage, "TransmittalEmailView", resources);

        return mailMessage;
    }
}

最佳答案

这其实是一个比较难解决的问题。这是因为当您发送电子邮件时,只要可以找到 SMTP 服务器,它就可以工作(不会抛出异常)。

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

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

关于c# - 发送多封带有交易行为的电子邮件(如果一封失败,则不会发送任何电子邮件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32993574/

相关文章:

c# - 在 SQL Server 2008 中处理来自 c# 的多个数据库更新

c# - 如何比较两个图像?

c# - Elmah 自定义记录器不工作

asp.net-mvc - MVC最佳实践: Where to do mapping between models

c# - 发送异步电子邮件

c# - 在 asp.net MVC4 应用程序中使用 MVCMailer,在发送电子邮件时不断出现错误

c# - 使用 MvcMailer 发送电子邮件表单

C# 使用 HTTPWebRequest 拉取网页并从该站点执行 javascript

c# - 处理将相似实体分组在一起的设计模式

Javascript 更改 <ul> 标签中的类不起作用