C#实战 - C#实现发送邮件的三种方法

news/2024/10/11 3:25:21/

作者:逍遥Sean
简介:一个主修Java的Web网站\游戏服务器后端开发者
主页:https://blog.csdn.net/Ureliable
觉得博主文章不错的话,可以三连支持一下~ 如有疑问和建议,请私信或评论留言!

前言
当使用 C# 编程语言发送邮件时,可以利用不同的方法来实现。本文将介绍三种常用的方法:使用SMTP客户端库、使用.NET Framework内置类和使用第三方库。我们将详细讨论每种方法的优缺点以及如何实现。

C# 实现发送邮件的三种方法

      • 方法一:使用SMTP客户端库
        • 步骤:
        • 优点和缺点:
      • 方法二:使用.NET Framework内置类
        • 步骤:
        • 优点和缺点:
      • 方法三:使用第三方库
        • 步骤:
        • 优点和缺点:
      • 结论

方法一:使用SMTP客户端库

SMTP(简单邮件传输协议)是发送电子邮件的标准协议,可以使用 C# 中的 SMTP 客户端库来发送邮件。

步骤:
  1. 安装SMTP客户端库

    通常使用 System.Net.Mail 命名空间中的 SmtpClient 类来发送邮件。确保你的项目引用了正确的命名空间。

  2. 编写发送邮件的代码

    using System;
    using System.Net;
    using System.Net.Mail;class Program
    {static void Main(string[] args){// 发件人的邮箱地址和密码string from = "your_email@gmail.com";string password = "your_password";// 创建一个电子邮件消息MailMessage message = new MailMessage();message.From = new MailAddress(from);message.To.Add("recipient@example.com"); // 收件人邮箱地址message.Subject = "邮件主题";message.Body = "这是一封测试邮件。";// 设置SMTP服务器地址和端口SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);smtp.EnableSsl = true; // 启用SSL加密smtp.Credentials = new NetworkCredential(from, password);try{smtp.Send(message);Console.WriteLine("邮件发送成功!");}catch (Exception ex){Console.WriteLine("邮件发送失败:" + ex.Message);}}
    }
    

    注意:使用 Gmail 作为 SMTP 服务器时,需要启用“低安全性应用程序访问权限”。

优点和缺点:
  • 优点

    • 简单直接,使用 .NET 标准库自带的功能。
    • 可以定制邮件的各种属性,如附件、优先级等。
  • 缺点

    • 不支持高级特性,如HTML邮件、模板邮件等。

方法二:使用.NET Framework内置类

.NET Framework 提供了 System.Net.Mail 命名空间,内置了发送邮件所需的类和方法。

步骤:
  1. 使用 MailMessageSmtpClient

    using System;
    using System.Net;
    using System.Net.Mail;class Program
    {static void Main(string[] args){// 发件人的邮箱地址和密码string from = "your_email@gmail.com";string password = "your_password";// 创建一个电子邮件消息MailMessage message = new MailMessage();message.From = new MailAddress(from);message.To.Add("recipient@example.com"); // 收件人邮箱地址message.Subject = "邮件主题";message.Body = "这是一封测试邮件。";// 设置SMTP服务器地址和端口SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);smtp.EnableSsl = true; // 启用SSL加密smtp.Credentials = new NetworkCredential(from, password);try{smtp.Send(message);Console.WriteLine("邮件发送成功!");}catch (Exception ex){Console.WriteLine("邮件发送失败:" + ex.Message);}}
    }
    

    这段代码与使用SMTP客户端库的方法非常相似,主要区别在于使用了.NET Framework 内置的类。

优点和缺点:
  • 优点

    • 使用.NET Framework 自带的类,稳定可靠。
    • 集成度高,适合简单的邮件发送需求。
  • 缺点

    • 功能较为基础,不支持复杂的邮件处理和高级特性。

方法三:使用第三方库

除了.NET Framework自带的功能外,还可以使用第三方库来发送邮件,如MailKitMimeKit等。这些库通常提供更多的功能和更灵活的选项。

步骤:
  1. 安装第三方库

    通过NuGet安装MailKit库:

    Install-Package MailKit
    
  2. 编写发送邮件的代码

    using System;
    using MimeKit;
    using MailKit.Net.Smtp;class Program
    {static void Main(string[] args){// 创建一个MimeMessage对象MimeMessage message = new MimeMessage();message.From.Add(new MailboxAddress("发件人", "your_email@gmail.com"));message.To.Add(new MailboxAddress("收件人", "recipient@example.com"));message.Subject = "邮件主题";// 构建邮件正文BodyBuilder bodyBuilder = new BodyBuilder();bodyBuilder.TextBody = "这是一封测试邮件。";message.Body = bodyBuilder.ToMessageBody();// 设置SMTP客户端using (SmtpClient client = new SmtpClient()){client.Connect("smtp.gmail.com", 587, false); // 连接到SMTP服务器client.Authenticate("your_email@gmail.com", "your_password"); // 使用发件人邮箱地址和密码认证client.Send(message); // 发送邮件client.Disconnect(true); // 断开连接}Console.WriteLine("邮件发送成功!");}
    }
    
优点和缺点:
  • 优点

    • 支持更多高级特性,如HTML邮件、附件、多收件人、邮件模板等。
    • 提供更好的错误处理和调试功能。
  • 缺点

    • 需要额外安装和学习第三方库的使用方法。
    • 对于简单的邮件发送,可能显得过于复杂。

结论

以上是使用 C# 实现发送邮件的三种常见方法:使用SMTP客户端库、使用.NET Framework内置类和使用第三方库。选择合适的方法取决于项目的需求和复杂性。对于简单的邮件发送,建议使用.NET Framework 自带的类;对于需要更多高级特性和灵活性的项目,可以考虑使用第三方库。希望本文能够帮助你选择和实现适合的邮件发送方法!


http://www.ppmy.cn/news/1503274.html

相关文章

60个常见的 Linux 指令

常见60个Linux指令 1.ssh 登录到计算机主机2.ls 列出目录内容3.pwd 当前终端会话所在的完整路径4.cd 切换当前工作目录5.touch 创建空文件或更新文件的时间戳6.echo 终端输出文本或变量值7.nano 在终端中编辑文件8.vim 文本编辑器9.cat 查看、连接和创建文件10.shred 安全删除敏…

ant-design-vue 中 table行 点击事件

在使用 AntDesign 过程中&#xff0c;需求单击表格选中。设置table的customRow属性 设置之后&#xff0c;虽说官方文档也有详细介绍如何实现该功能。但是没看太懂&#xff0c;百度后解决 <a-table:columnscolumns:data-sourcetableDatachangehandleTableChange:customRowrow…

前端工程化11-webpack常见插件

1、webpack的插件Plugin 刚才我们也讲解了下&#xff0c;我们对webpack路径的一个处理&#xff0c;处理的话包括别名的配置&#xff0c;模块是如何找到并加载的&#xff0c;总的来说到现在webpack这个配置到现在来说还是相当的麻烦的&#xff0c;但是目前来说我们讲的这些东西…

Windows 端口占用 Port 端口占用 如何发现端口占用并且强杀?

应用场景 场景 有时候本地测试&#xff0c;经常发现端口占用。 如何找到端口占用&#xff0c;并且 kill 掉呢&#xff1f; 端口占用情况 lsof -i:XXX查看 sudo netstat -apn | grep XXX查看 ps -aux | grep XXX详细信息 ps -ef | grep XXX根据分类条件查询信息 发现并…

hdfs文件系统

简述什么是HDFS&#xff0c;以及HDFS作用 &#xff1f; HDFS在Hadoop中的作用是为海量的数据提供了存储&#xff0c;能提供高吞吐量的数据访问&#xff0c;HDFS有高容错性的 特点&#xff0c;并且设计用来部署在低廉的硬件上&#xff1b;而且它提供高吞吐量来访问应用程序的数…

《程序猿入职必会(5) · CURD 页面细节规范 》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

echarts多stack的legend点选

echarts支持点击legend&#xff0c;实现显示和隐藏legend对应的数据&#xff0c;具体就是option里series里,name为legend值的数据。 如果配置了多个stack&#xff0c;那么可能你可能设置了多组legend&#xff0c;你点选的是多个legend组中的某组中的一个&#xff0c;那么如果不…

超声波清洗机买哪款?家庭型超声波清洗机

戴眼镜的朋友应该都知道&#xff0c;眼镜即使是认真清洗过&#xff0c;但是只要自己走动&#xff0c;它就没有不脏的时候。很多不在意的朋友会直接忽视&#xff01;但是眼镜上面的油脂和细菌经过长期的累积&#xff0c;近距离的接触眼部的位置&#xff0c;容易对眼部健康造成威…