C#发送邮箱实现代码

 更新时间:2017年01月03日 14:50:48   作者:独钓寒江雪丶  
这篇文章主要为大家详细介绍了C#发送邮箱实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

之前自己从来没有做过发送邮箱的功能,前段时间项目需要,在找了很多帖子之后,终于实现了。

之后有整理了一下,写了一个类。直接给类传递信息,就可以发送了。

这里还需要说明的是,发送邮箱需要开通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('@');

        //构造一个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('@')[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;
    }
  }

直接调用方法,传递需要发送的信息,就可以发送邮箱了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C# wpf使用ffmpeg命令行实现录屏的示例代码

    C# wpf使用ffmpeg命令行实现录屏的示例代码

    本文主要介绍了C# wpf使用ffmpeg命令行实现录屏的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • C#设计模式之建造者模式生成器模式示例详解

    C#设计模式之建造者模式生成器模式示例详解

    这篇文章主要为大家介绍了C#设计模式之建造者模式生成器模式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • WINFORM 窗体间的传值实现解析

    WINFORM 窗体间的传值实现解析

    这篇文章主要介绍了WINFORM 窗体间的传值实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • WPF开发技巧之花式控件功能扩展详解

    WPF开发技巧之花式控件功能扩展详解

    这篇文章主要给大家介绍了关于WPF日常开发之花式控件功能扩展的相关资料,通过文中这个例子,我们可以对WPF的掌握会更深刻,需要的朋友可以参考下
    2021-07-07
  • C# 7.2中结构体性能问题的解决方案

    C# 7.2中结构体性能问题的解决方案

    这篇文章主要给大家介绍了关于C# 7.2中结构体性能问题的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • Asp.Net中MVC缓存详解

    Asp.Net中MVC缓存详解

    这篇文章主要介绍了Asp.Net中MVC缓存的种类区别等内容,一下来学习下。
    2017-12-12
  • C# 获取程序集版本、文件版本

    C# 获取程序集版本、文件版本

    C# 获取程序集版本、文件版本的实现代码。
    2009-09-09
  • Parallel.For循环与普通for循环的性能比较

    Parallel.For循环与普通for循环的性能比较

    这篇文章介绍了Parallel.For循环与普通for循环的性能比较,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • WPF实现播放RTSP视频流

    WPF实现播放RTSP视频流

    这篇文章主要为大家详细介绍了WPF实现播放RTSP视频流的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-01-01
  • 自动输出类的字段值实用代码分享

    自动输出类的字段值实用代码分享

    有点时候在测试的时候希望打印输出返回对象的各字段的值,采用下面的代码可以很方便的列出对象的各字段值
    2013-12-12

最新评论