首頁  >  文章  >  後端開發  >  C#傳送郵箱實作代碼

C#傳送郵箱實作代碼

高洛峰
高洛峰原創
2017-01-16 09:59:242257瀏覽

之前自己從來沒有做過發送郵箱的功能,前段時間專案需要,在找了很多帖子之後,終於實現了。

之後有整理了一下,寫了一個類別。直接傳遞訊息給類別,就可以發送了。

這裡還需要說明的是,發送郵箱需要開通POP3/SMTP服務,否則QQ郵箱,網易郵箱等會報錯。接收的信箱就不用開通啦,開通方法百度一下就知道啦。

public static class EmailHelper
  {
    /// <summary>
    /// 发送邮件
    /// </summary>
    /// <param name="subject">邮件主题</param>
    /// <param name="msg">邮件内容</param>
    /// <param name="filePath">附件地址,如果不添加附件传null或""</param>
    /// <param name="senderEmail">发送人邮箱地址</param>
    /// <param name="senderPwd">发送人邮箱密码</param>
    /// <param name="recipientEmail">接收人邮箱</param>
    public static void SendMail(string subject, string msg, string filePath, string senderEmail, string senderPwd, params string[] recipientEmail)
    {
      if (!CheckIsNotEmptyOrNull(subject, msg, senderEmail, senderPwd) || recipientEmail == null || recipientEmail.Length == 0)
      {
        throw new Exception("输入信息无效");
      }
      try
      {
        string[] sendFromUser = senderEmail.Split(&#39;@&#39;);
 
        //构造一个Email的Message对象
        MailMessage message = new MailMessage();
 
        //确定smtp服务器地址。实例化一个Smtp客户端
        System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("smtp." + sendFromUser[1]);
 
        //构造发件人地址对象
        message.From = new MailAddress(senderEmail, sendFromUser[0], Encoding.UTF8);
 
        //构造收件人地址对象
        foreach (string userName in recipientEmail)
        {
          message.To.Add(new MailAddress(userName, userName.Split(&#39;@&#39;)[0], Encoding.UTF8));
        }
 
        if (!string.IsNullOrEmpty(filePath))
        {
          Attachment attach = new Attachment(filePath);
          //得到文件的信息
          ContentDisposition disposition = attach.ContentDisposition;
          disposition.CreationDate = System.IO.File.GetCreationTime(filePath);
          disposition.ModificationDate = System.IO.File.GetLastWriteTime(filePath);
          disposition.ReadDate = System.IO.File.GetLastAccessTime(filePath);
          //向邮件添加附件
          message.Attachments.Add(attach);
        }
 
        //添加邮件主题和内容
        message.Subject = subject;
        message.SubjectEncoding = Encoding.UTF8;
        message.Body = msg;
        message.BodyEncoding = Encoding.UTF8;
 
        //设置邮件的信息
        client.DeliveryMethod = SmtpDeliveryMethod.Network;
        message.BodyEncoding = System.Text.Encoding.UTF8;
        message.IsBodyHtml = false;
 
        //如果服务器支持安全连接,则将安全连接设为true。
        //gmail,qq支持,163不支持
        switch (sendFromUser[1])
        {
          case "gmail.com":
          case "qq.com":
            client.EnableSsl = true;
            break;
          default:
            client.EnableSsl = false;
            break;
        }
 
        //设置用户名和密码。
        client.UseDefaultCredentials = false;
        //用户登陆信息
        NetworkCredential myCredentials = new NetworkCredential(senderEmail, senderPwd);
        client.Credentials = myCredentials;
        //发送邮件
        client.Send(message);
      }
      catch (Exception ex)
      {
        throw (ex);
      }
    }
 
    /// <summary>
    /// 验证所有传入字符串不能为空或null
    /// </summary>
    /// <param name="ps">参数列表</param>
    /// <returns>都不为空或null返回true,否则返回false</returns>
    public static bool CheckIsNotEmptyOrNull(params string[] ps)
    {
      if (ps != null)
      {
        foreach (string item in ps)
        {
          if (string.IsNullOrEmpty(item)) return false;
        }
        return true;
      }
      return false;
    }
  }

直接呼叫方法,傳遞需要傳送的訊息,就可以傳送郵箱了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持PHP中文網。

更多C#發送郵箱實現代碼相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn