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用于发送邮件。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年【高压电工】考试内容及高压电工模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 高压电工考试内容参考答案及高压电工考试试题解析是安全生产模拟考试一点通题库老师及高压电工操作证已考过的学员汇总&#xff0c;相对有效帮助高压电工模拟试题学员顺利通过考试。 1、【单选题】 FN5-10的型号含意是…

「Kafka」消费者篇

「Kafka」消费者篇 Kafka 消费方式 Kafka 消费者工作流程 消费者总体工作流程 新版本&#xff08;0.9之后&#xff09;的 offset 保存在 kafka 的 Topic 里&#xff0c;持久化到磁盘&#xff0c;可靠性有保障。 老版本&#xff08;0.9之前&#xff09;的 offset 保存在 Zook…

2.0 Hadoop 运行环境

由于 Hadoop 是为集群设计的软件&#xff0c;所以我们在学习它的使用时难免会遇到在多台计算机上配置 Hadoop 的情况&#xff0c;这对于学习者来说会制造诸多障碍&#xff0c;主要有两个&#xff1a; 昂贵的计算机集群。多计算机构成的集群环境需要昂贵的硬件.难以部署和维护。…

LeetCode_19_中等_删除链表的倒数第N个结点

文章目录 1. 题目2. 思路及代码实现&#xff08;Python&#xff09;2.1 计算链表长度2.2 栈 1. 题目 给你一个链表&#xff0c;删除链表的倒数第 n n n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a; h e a d [ 1 , 2 , 3 , 4 , 5 ] , n…

爬虫(二)

1.同步获取短视频 1.只要播放地址对Json数据解析&#xff0c;先把列表找出&#xff1a; 2.只想要所有的播放地址&#xff0c;通过列表表达式循环遍历这个列表拿到每个对象&#xff0c;再从一个个对象里面找到Video,再从Video里面找到播放地址(play_addr),再从播放地址找到播放…

大模型增量预训练新技巧:解决灾难性遗忘

大家好&#xff0c;目前不少开源模型在通用领域具有不错的效果&#xff0c;但由于缺乏领域数据&#xff0c;往往在一些垂直领域中表现不理想&#xff0c;这时就需要增量预训练和微调等方法来提高模型的领域能力。 但在领域数据增量预训练或微调时&#xff0c;很容易出现灾难性…

Github 2024-02-04 开源项目日报 Top9

根据Github Trendings的统计&#xff0c;今日(2024-02-04统计)共有9个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目6Ruby项目1HTML项目1C项目1Go项目1TypeScript项目1 Windows 终端、控制台和命令行存储库 创建周期…

2024年新版全国行政区划代码

嗨喽&#xff0c;大家好&#xff0c;我是小码哥&#xff0c;今天免费将2024年全国行政区划代码分享给大家&#xff0c;已经整理成sql和excel文件&#xff0c;方便大家直接使用&#xff0c;文章末尾直接获取。 01-数据来源 根据国家统计局官网统计查询&#xff0c;目前全国最新…

mermaid使用指南+notion使用实例-持续更新中

最近一个月了吧&#xff0c;发现Notion插入图片的功能坏了&#xff0c;直接paste会404&#xff0c;本地上传也不行。电脑本地版和手机端都插不了图片&#xff0c;很头疼。解决方法也简单&#xff0c;用图床&#xff0c;放链接。 付费版我用的七牛&#xff0c;结合PicGo&#x…

C#,雅各布斯塔尔—卢卡斯(Jacobsthal Lucas Number)的算法与源代码

1 雅各布斯塔尔序列 雅各布斯塔尔序列是一个与斐波那契序列类似的加法序列&#xff0c;由递归关系JnJn-12Jn-2定义&#xff0c;初始项J00&#xff0c;J11。序列中的一个数字称为雅可布沙尔数。它们是卢卡斯序列Un&#xff08;P&#xff0c;Q&#xff09;的一种特殊类型&#x…

SmartX 在保险(2023):服务 40+ 客户,聚焦信创转型与高性能数据库场景

更新内容&#xff1a; 更新 SmartX 超融合在保险行业的覆盖范围与部署规模。更新保险客户超融合应用情况。新增 Nutanix 国产化替代、高性能数据库构建与验证、企业云原生转型等场景实践。更多超融合金融核心生产业务场景实践&#xff0c;欢迎阅读文末电子书。 近两年来&…

[Python] 什么是逻辑回归模型?使用scikit-learn中的LogisticRegression来解决乳腺癌数据集上的二分类问题

什么是线性回归和逻辑回归&#xff1f; 线性回归是一种用于解决回归问题的统计模型。它通过建立自变量&#xff08;或特征&#xff09;与因变量之间的线性关系来预测连续数值的输出。线性回归的目标是找到一条直线&#xff08;或超平面&#xff09;&#xff0c;使得预测值与观…

华为数通方向HCIP-DataCom H12-821题库(单选题:421-440)

第421题 以下关于IS-IS中路由器分类的描述,错误的是哪一项? A、Level-1路由器无法与Level-2路由器建立邻接关系 B、华为路由器上配置IS-IS时,缺省时,路由器全局Level为Level-1-2 C、Level-2的LSDB只包含Level-2路由器所在区域的路由信息 D、Level-1路由器可以和Level-1-2路…

vite打包原理

vite 工程化开发&#xff1a;打包工具 启动速度很快 核心原理还是webpack 把webpack封装了&#xff0c;把webpack对象封装了 和vue2整体结构几乎一致 webpack两种模式&#xff1a;开发&生产 代码打包编译&#xff0c;本地起一个web服务器实时预览编译后的结果 build 命令模…

Go协程揭秘:轻量、并发与性能的完美结合

目录 1. Go协程简介什么是Go协程&#xff1f;Go协程与线程的比较Go协程的核心优势 2. Go协程的基本使用创建并启动Go协程使用匿名函数创建Go协程Go协程与主函数 3. Go协程的同步机制1. 通道 (Channels)2. sync.WaitGroup3. 互斥锁 (sync.Mutex) 4. Go协程的高级用法1. 选择器 (…

jss/css/html 相关的技术栈有哪些?

js 的技术组件有哪些&#xff1f;比如 jQuery vue 等 常见的JavaScript技术组件&#xff1a; jQuery&#xff1a; jQuery是一个快速、小巧且功能丰富的JavaScript库&#xff0c;用于简化DOM操作、事件处理、动画效果等任务。 React&#xff1a; React是由Facebook开发的用于构…

【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(上)

系列文章目录 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(上) 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(中) 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate…

海量数据处理商用短链接生成器平台 - 2

第二章 短链平台项目创建git代码管理开发分层规范 第1集 短链平台实战-Maven聚合工程创建微服务项目 **简介&#xff1a;Maven聚合工程创建微服务项目实战 ** Maven聚合工程拆分 dcloud-common 公共依赖包 dcloud-app FlinkKafka实时计算 dcloud-account 账号流量包微服务 dc…

程序报错无法打开源文件stdafx.h

在运行代码时&#xff0c;代码中头文件突然报错程序无法打开源文件stdafx.h include “stdafx.h”,编译器就说无法打开源文件&#xff0c;直接上干货解决方法是&#xff1a; 1.打开项目 ->项目属性&#xff08;最后一个&#xff09;-> C/C ->常规&#xff0c; 2在附…

【MySQL】——数据定义

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…