【问题标题】:C# different mail body on conditionC#不同的邮件正文条件
【发布时间】:2014-09-17 11:48:02
【问题描述】:

我有一个带有两个单选按钮的表单,根据选中的表单,将运行不同的进程。我想在任一过程完成时发送电子邮件通知,但主题和正文表明哪个过程已完成。

class SendMail
{
    public void sendMail()
    {
        MailMessage dailyMail = new MailMessage("you@yourcompany.com", "user@hotmail.com");
        SmtpClient client = new SmtpClient();
        client.Port = 25;
        client.DeliveryMethod = SmtpDeliveryMethod.Network;
        client.UseDefaultCredentials = false;
        client.Host = "smtp.google.com";
        dailyMail.Subject = "Daily load done";
        dailyMail.Body = "The daily load process has completed.";
        client.Send(dailyMail);
    }
}

仅使用这个通用的 sendMail 方法,我是否应该保留 dailyMail 对象(用于一个进程)并创建一个monthlyMail 对象(用于另一个进程)并选择相应的对象触发器并选择正确的单选按钮?

有没有更好(阅读:更简单)的方法来实现这一点?谢谢。

【问题讨论】:

    标签: c# forms email radio-button


    【解决方案1】:

    您可以将 dailyMail 对象传递给该方法

    class SendMail
    {
        public void sendMail(MailMessage dailyMail)
        {
            SmtpClient client = new SmtpClient();
            client.Port = 25;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            client.Host = "smtp.google.com";
            client.Send(dailyMail);
        }
    }
    

    然后您可以创建 dailyMail 对象并在调用方法之前设置主题和正文,例如

    var dailyMail = new MailMessage("you@yourcompany.com", "user@hotmail.com");
    if(radioButton1.Checked)
    {
        dailyMail.Subject = "Daily load done";
        dailyMail.Body = "The daily load process has completed.";
    }
    else
    {
        dailyMail.Subject = "Some other subject";
        dailyMail.Body = "Some other method";
    }
    var sendMail = new SendMail();
    sendMail.sendMail(dailyMail);
    

    【讨论】:

    • 看来我应该能够根据选中的单选框更改 .Body 和 .Subject 的字符串内容。
    • 是的,您可以在主题和正文的设置周围放置一个 if 语句,我将编辑我的答案以显示这一点
    • 是的,这正是我今天想不出的简单逻辑!我会把责任归咎于星期五。谢谢。
    • 没问题,很高兴你有解决方案:-)
    【解决方案2】:

    如果没有看到更多代码,确定方法有点困难,但最好创建一个子类继承的基本邮件类。这些子类设置了主题/正文/其他需要它的东西。

    public abstract class MailBase
    {
        private SmtpClient _client;
    
        public string To { get; set; }
        public string From { get; set; }
        public string Subject { get; set; }
        public string Body { get; set; }
    
        public MailBase()
        {
             _client = new SmtpClient();
             _client.Port = 25;
             _client.DeliveryMethod = SmtpDeliveryMethod.Network;
             _client.UseDefaultCredentials = false;
             _client.Host = "smtp.google.com";
        }
    
        protected void SendInternal()
        {
            //Send code
        }
    }
    
    public class DailyMail : MailBase
    {
        public DailyMail(string to)
        {
             To = to;
             From = "someemail@email.com";
             Subject = "My Subject";
             Body = "My body";
        }
    
        public void Send()
        {
             SendInternal();
        }
    }
    

    然后您可以实例化该类型并调用Send

    //Somewhere in code
    var dailyMail = new DailyMail("user@email.com");
    dailyMail.Send();
    

    【讨论】:

      【解决方案3】:

      此解决方案与其他解决方案类似,但利用将邮件发送置于静态方法中,因此调用更简洁,资源也得到妥善处理。此外,如果需要添加更多单选按钮(或者如果您想在其他类或项目中重用代码),UI/表示代码可以分开一点,以便将来更容易发送其他邮件消息。

      public class Mailer
      {
          public static void Send(MailMessage mailMessage)
          {
              using (SmtpClient client = new SmtpClient())
              {
                  client.Port = 25;
                  client.DeliveryMethod = SmtpDeliveryMethod.Network;
                  client.UseDefaultCredentials = false;
                  client.Host = "smtp.google.com";
                  client.Send(mailMessage);
              }
          }
      }
      

      在 UI 或表示层代码中:

      private void HandleRadioSelection()
      {
          if (radioButton1.Checked)
          {
              this.SendMailMessage("Daily load done.", "The daily load process has completed.");
          }
          else
          {
              this.SendMailMessage("Some other subject", "Some other body");
          }
      }
      
      private void SendMailMessage(string subject, string body)
      {
          using (MailMessage mailMessage = new MailMessage("you@yourcompany.com", "user@hotmail.com", subject, body))
          {
              Mailer.Send(mailMessage);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2019-11-11
        • 1970-01-01
        • 1970-01-01
        • 2013-01-13
        • 2012-08-06
        • 2016-03-07
        • 2018-03-26
        • 2018-05-06
        • 1970-01-01
        相关资源
        最近更新 更多