C# 使用 MailKit 发送邮件(附demo)

C# 使用 MailKit 发送邮件(附demo)

  • 介绍
  • 安装包(依赖)
  • 案例
    • 简单代码
    • 属性介绍:MailboxAddress
    • 属性介绍:BodyBuilder
    • SMTP 服务器端口
      • SSL的案例:
      • 非SSL:
  • 介绍一下SMTP


介绍

MailKit 是一个开源的 C# 邮件处理库,用于在应用程序中发送和接收电子邮件。它提供了一个强大且易于使用的 API,支持多种邮件协议,包括 SMTP、POP3、和 IMAP。

特性与优势描述
多协议支持支持 SMTP、POP3、IMAP 等多种邮件协议。
异步操作使用异步编程模型,提高性能和响应性。
附件处理提供灵活的附件处理功能,支持添加、读取和保存邮件附件。
SSL/TLS 支持支持安全套接字层(SSL)和传输层安全性(TLS),确保邮件的安全传输。
容错处理提供容错处理机制,处理网络或协议错误,确保稳定的邮件通信。
丰富的 API提供丰富的 API,方便开发人员访问邮件的各个方面,包括主题、发件人、收件人等。
跨平台MailKit 是一个跨平台的邮件处理库,可在多个操作系统上运行,包括 Windows、Linux 和 macOS。

需要源码的留下邮箱,私信也会看,不过看的不勤,留言有通知。

安装包(依赖)

通过命令操作 NuGet 包管理器进行安装:

Install-Package MailKit -Version 2.15.0

通过管理 NuGet 程序包进行安装

在这里插入图片描述
在这里插入图片描述

案例

简单代码

以下是一个简单的示例,演示如何使用 MailKit 发送邮件:

using MailKit.Net.Smtp;
using MimeKit;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace SMTPEmailDemo
{internal class Program{static void Main(){// 发件人邮箱和密码string senderEmail = "csdndaolizhe@163.com";string senderPassword = "AOKRBYUISXPAITAI";// 收件人邮箱string recipientEmail = "邮箱地址";//csdndaolizhe@163.com// 创建邮件对象var message = new MimeMessage();message.From.Add(new MailboxAddress("daolizhe", senderEmail));message.To.Add(new MailboxAddress("名字", recipientEmail));message.Subject = "主题";// 邮件正文var bodyBuilder = new BodyBuilder();bodyBuilder.TextBody = "邮件内容。";message.Body = bodyBuilder.ToMessageBody();// 配置SMTP客户端using (var client = new SmtpClient()){// 连接到SMTP服务器client.Connect("smtp.163.com", 25, false);// 使用邮箱和密码进行身份验证client.Authenticate(senderEmail, senderPassword);// 发送邮件client.Send(message);// 断开连接client.Disconnect(true);}}}
}

属性介绍:MailboxAddress

属性描述示例
Name邮箱地址的名称部分,通常是名字或昵称。“daolizhe”
Address邮箱地址的实际地址部分。“csdndaolizhe@163.com”

在这里插入图片描述

属性介绍:BodyBuilder

成员属性描述示例
TextBody用于设置纯文本正文的属性。bodyBuilder.TextBody = "邮件内容。";
HtmlBody用于设置HTML正文的属性。bodyBuilder.HtmlBody = "<p>邮件内容。</p>";
Attachments用于添加附件的集合属性。bodyBuilder.Attachments.Add(文件路径);

SMTP 服务器端口

SMTP服务器服务器地址端口规则
Gmailsmtp.gmail.com587(TLS加密)或465(SSL加密)需要使用Gmail帐户进行身份验证,通常需要启用“低安全性应用程序访问权限”。
Outlook/Office 365smtp.office365.com587需要使用Outlook或Office 365帐户进行身份验证。
163smtp.office365.com465(SSL加密) / 25需要使用163帐户进行身份验证。
自己托管的SMTP服务器取决于设置通常是25(未加密)、587(TLS加密)、465(SSL加密)中的一个需要使用合适的身份验证(例如,用户名和密码)。

在代码中对应的位置就是

SSL的案例:

// 配置SMTP客户端
using (var client = new SmtpClient())
{// 连接到SMTP服务器client.Connect("smtp.163.com", 465, true);// 使用邮箱和密码进行身份验证client.Authenticate(senderEmail, senderPassword);// 发送邮件client.Send(message);// 断开连接client.Disconnect(true);
}

非SSL:

// 配置SMTP客户端
using (var client = new SmtpClient())
{// 连接到SMTP服务器client.Connect("smtp.163.com", 25, false);// 使用邮箱和密码进行身份验证client.Authenticate(senderEmail, senderPassword);// 发送邮件client.Send(message);// 断开连接client.Disconnect(true);
}

介绍一下SMTP

特点和概念描述
SMTP(Simple Mail Transfer Protocol)用于在网络中传输电子邮件的标准协议。
电子邮件传输SMTP负责将电子邮件从发件人的邮件客户端传输到接收者的邮件服务器,然后再传递到接收者的邮件客户端。
端口SMTP服务器通常监听在端口25上,也可以使用端口587(Submission)和端口465(SMTPS)进行加密的SMTP通信。
发件人和收件人在SMTP通信中指定邮件的发件人和收件人,以确保邮件被正确地路由到目标。
命令和响应SMTP通信是基于命令和响应的。客户端向服务器发送SMTP命令,服务器返回响应,以便客户端了解操作的状态。
身份验证SMTP服务器通常要求用户进行身份验证,以防止滥用。常见的身份验证方法包括使用用户名和密码。
安全性为了提高安全性,可以使用TLS(Transport Layer Security)或SSL(Secure Sockets Layer)加密SMTP通信。
与POP3和IMAP的关系SMTP通常与POP3或IMAP一起使用。POP3和IMAP用于从服务器检索邮件,而SMTP用于发送邮件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/454600.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue - 指令(一)

看文章可以得到什么&#xff1f; 1.可以快速的了解并会使用vue的指令 2.可以加深你对vue指令的理解&#xff0c;知道每个指令代表什么功能​​​​​​​ 目录 什么是vue的指令&#xff1f;​​​​​​​ vue常见指令的使用 v-html v-show v-if v-else 和v-else-…

N-143基于springboot博客系统

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 前端技术&#xff1a;AdminLTEHTML 服务端技术&#xff1a;springbootmybatis-plusthymeleaf 本项目分前台和后台&#xff0c;主要有普…

VC++ 头文件中又包含其他头文件的问题

一开始代码是如下&#xff0c;当前项目中没有UIlib.h这个头文件&#xff0c;项目需要这个头文件&#xff1b; 如果新建一个UIlib.h文件&#xff0c;并把它的源代码全部拷贝进此文件中&#xff0c;这样项目中就有UIlib.h头文件&#xff0c; #include "UIlib.h" 这句不…

用握力器玩谷歌小恐龙游戏(三)

往期回顾 用握力器玩谷歌小恐龙游戏&#xff08;一&#xff09; 用握力器玩谷歌小恐龙游戏&#xff08;二&#xff09; GS-GAME-PC 前言 这次更新主要是&#xff0c;将原来的使用Wifi Mesh串口接收上位机的方法&#xff0c;改成了蓝牙直连电脑的方式&#xff0c;这种方式的…

Codeforces Round 914 (Div. 2)(D1/D2)--ST表

Codeforces Round 914 (Div. 2)(D1/D2)–ST表 D1. Set To Max (Easy Version) 题意&#xff1a; 给出长度为n的数组a和b&#xff0c;可以对a进行任意次数操作&#xff0c;操作方式为选择任意区间将区间内值全部变成该区间的最大值&#xff0c; 是否有可能使得数组a等于数组b…

操作系统笔记之内存映射

操作系统笔记之内存映射 —— 杭州 2024-02-04 code review! 文章目录 操作系统笔记之内存映射一.内存映射概念1. 文件映射到内存 (Memory-Mapped Files)2. 虚拟内存管理 (Virtual Memory Management)3. 内存映射I/O (Memory-Mapped I/O)4. 图形处理 (Graphics Processing)5.…

网站为什么要用CND?

CDN对于网站来说至关重要&#xff0c;CDN对网站的重要性主要体现在可以提升用户体验、提高网站安全性、减轻服务器负担、提高SEO排名等&#xff0c;还可以为网站节省带宽成本。因此&#xff0c;选择一个性能好、速度快的CDN是很有必要的。 CDN对于现代网站来说是不可或缺的&am…

MySQL数据库练习【一】

MySQL数据库练习【一】 一、建库建表-数据准备二、习题2.1. 查询部门编号为30的部门的员工详细信息2.2.查询从事clerk工作的员工的编号、姓名以及其部门号2.3.查询奖金多于基本工资的员工的信息、查询奖金小于基本工资的员工的信息2.4.查询奖金多于基本工资60%的员工的信息2.5.…

libev-ev_timer定时器的理解

1.相关说明 本文主要自己对于libev的ev_timer定时器的代码流程梳理&#xff0c;主要有ev_timer结构体定义变量的初始化&#xff0c;定时器变量的参数设置&#xff0c;定时器变量的使用 2.相关代码流程 下面是图片 3.相关实现代码 main.c #include <stdio.h> #include…

红队打靶练习:HEALTHCARE: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb 目录探测 1、gobuster 2、dirsearch WEB web信息收集 gobuster cms sqlmap 爆库 爆表 爆列 爆字段 FTP 提权 信息收集 本地提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Inte…

【前端web入门第四天】02 CSS三大特性+背景图

文章目录: 1. CSS三大特性 1.1继承性 1.2 层叠性 1.3 优先级 1.3.1 优先级1.3.2 优先级-叠加计算规则 2. 背景图 2.1 背景属性2.2 背景图2.3 背景图的平铺方式2.4 背景图位置2.5 背景图缩放2.6 背景图固定2.7 背景复合属性 1. CSS三大特性 1.1继承性 什么是继承性? 子级默…

点大商城V2版 2.5.5全插件开源独立版 百度+支付宝+QQ+头条+小程序端+unipp开源端安装测试教程

点大商城V2是一款采用全新界面设计支持多端覆盖的小程序应用&#xff0c;支持H5、微信公众号、微信小程序、头条小程序、支付宝小程序、百度小程序&#xff0c;本程序是点大商城V2独立版&#xff0c;包含全部插件&#xff0c;代码全开源&#xff0c;并且有VUE全端代码。分销&am…