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

news2024/9/25 0:36:12

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.coloradmin.cn/o/1440061.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【力扣】盛最多水的容器,双指针法

盛最多水的容器原题地址 方法一&#xff1a;双指针 如果使用暴力枚举&#xff0c;时间复杂度为 &#xff0c;效率太低&#xff0c;会超时。 考虑使用双指针&#xff0c;利用单调性求解。用 left 和 right 作为数组 height 的下标&#xff0c;分别初始化为 0 和 size-1 。考…

容器库(6)-std::set

std::set是以key为元素的关联容器&#xff0c;容器中的key是唯一的且按顺序排列的。搜索、移除和插入的时间复杂度是 。底层通常是以红黑树实现的。 template<class Key,class Compare std::less<Key>,class Allocator std::allocator<Key> > class set; …

华为配置内部人员接入WLAN网络示例(802.1X认证)

配置内部人员接入WLAN网络示例&#xff08;802.1X认证&#xff09; 组网图形 图1 配置802.1X认证组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 用户接入WLAN网络&#xff0c;使用802.1X客户端进行认证&#xff0c;输入正确的用户名和密…

背包问题(01背包、完全背包、多重背包)详解(超详细!!!),及题目代码和题意,包含6个例题。

第一题&#xff1a;01背包问题 01背包问题 时间限制&#xff1a;1秒 内存限制&#xff1a;128M 题目描述 一个旅行者有一个最多能装 M 公斤的背包&#xff0c;现在有 n 件物品&#xff0c;它们的重量分别是 W1&#xff0c;W2&#xff0c;...,Wn ,它们的价值分别为 C1…

Netty的常用组件及线程模型设计(一)

Netty常用组件 Bootstrap Bootstrap是Netty框架的启动类和主入口类&#xff0c;发呢为客户端类Bootstrap和服务器类ServerBootstrap两种 Channel Channel是JavaNIO的一个基本构造&#xff0c;它代表一个到实体(如一个硬件设备、一个文件、一个网络套接字或者一个能够执行一…

电缆线的阻抗50Ω,真正含义是什么?

当我们提到电缆线的阻抗时&#xff0c;它到底是什么意思&#xff1f;RG58电缆通常指的是50Ω的电缆线。它的真正含义是什么&#xff1f;假如取一段3英尺(0.9144米)长的RG58电缆线&#xff0c;并且在前端测量信号路径与返回路径之间的阻抗。那么测得的阻抗是多少&#xff1f;当然…

探索C语言中的联合体与枚举:数据多面手的完美组合!

​ ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C语言学习 贝蒂的主页&#xff1a;Betty‘s blog 1. 联合体的定义 联合体又叫共用体&#xff0c;它是一种特殊的数据类型&…

Flomesh 发布 Pipy 0.99.1

值此新春佳节来临之际 &#xff0c;我们很高兴地宣布 Pipy 0.99.1 版本 的发布&#xff0c;此次更新带来了多项重要特性和改进&#xff0c;进一步增强了 Pipy 的功能性和灵活性。 新特性与改进&#xff1a; 增加了对 BPF (Berkeley Packet Filter) 的支持&#xff0c;包括加载…

Webstorm安装了vue脚手架后终端输入vue报错解决方法

当我们初学Vue的时候&#xff0c;刚安装完Vue脚手架之后&#xff0c;输入vue报错&#xff0c;是因为webstorm终端受限制了。 vue: 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\vue.ps1&#xff0c;因为在此系统上禁止运行脚本。 解决方案如下&#xff1a; 通过…

51单片机之数码管显示表白数字篇

朝菌不知晦朔 蟪蛄不知春秋 眼界决定境界 CSDN 请求进入专栏 是否进入《51单片机专栏》? 确定 目录 数码管的简介 数码管引脚定义 数码管的原理图 74HC245 代码实现 静态数码管的显示 动态数码管的显示 数码管实现表白画面 数码管的简介 L…

【Unity】重力场中的路径预测方法

前言 笔者前些天参加完了一场72小时的GameJam游戏开发比赛。这次比赛的主题是“探索”&#xff0c;笔者做了一个名为《探索者号》的探索宇宙的游戏&#xff08;游戏名一开始叫做《星际拾荒者》&#xff0c;但这不重要&#xff09;。 在开发过程中&#xff0c;笔者遇到了一些问…

2 月 7 日算法练习- 数据结构-并查集

并查集 并查集是一种图形数据结构&#xff0c;用于存储图中结点的连通关系。 每个结点有一个父亲&#xff0c;可以理解为“一只伸出去的手”&#xff0c;会指向另外一个点&#xff0c;初始时指向自己。 一个点的根节点是该点的父亲的父亲的的父亲&#xff0c;直到某个点的父亲…

探索NLP中的N-grams:理解,应用与优化

简介 n-gram[1] 是文本文档中 n 个连续项目的集合&#xff0c;其中可能包括单词、数字、符号和标点符号。 N-gram 模型在许多与单词序列相关的文本分析应用中非常有用&#xff0c;例如情感分析、文本分类和文本生成。 N-gram 建模是用于将文本从非结构化格式转换为结构化格式的…

Elasticsearch(四)

是这样的前面的几篇笔记&#xff0c;感觉对我没有形成知识体系&#xff0c;感觉乱糟糟的&#xff0c;只是大概的了解了一些基础知识&#xff0c;仅此而已&#xff0c;而且对于这技术栈的学习也是为了在后面的java开发使用&#xff0c;但是这里的API学的感觉有点乱&#xff01;然…

[VulnHub靶机渗透] dpwwn: 1

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

接口测试--参数实现MD5加密签名规则

最近有个测试接口需求&#xff0c;接口有签名检查&#xff0c;签名规范为将所有请求参数按照key字典排序并连接起来进行md5加密&#xff0c;格式是&#xff1a;md5(bar2&baz3&foo1),得到签名&#xff0c;将签名追加到参数末尾。由于需要对参数进行动态加密并且做压力测…

有道ai写作,突破免费限制,无限制使用

预览效果 文末提供源码包及apk下载地址有道ai写作python版 import hashlib import time import json import ssl import base64 import uuidfrom urllib.parse import quote import requests from requests_toolbelt.multipart.encoder import MultipartEncoder from Crypto.C…

11 串口发送应用之使用状态机实现多字节数据发送

1. 使用串口发送5个字节数据到电脑 uart协议规定&#xff0c;发送的数据位只能是6&#xff0c;7&#xff0c;8位&#xff0c;如果数据位不符合&#xff0c;接收者接收不到数据。所以我们需要将40位数据data分为5个字节数据分别发送&#xff0c;那么接收者就能通过uart协议接收…

Mobile ALOHA 2: An Enhanced Low-Cost Hardware for Bimanual Teleoperation

文章目录 1. Mobile ALOHA 11.1 项目地址 2. Mobile ALOHA 22.1 相关链接2.2 Whats upgraded in II ? Reference Stanford 最新家务机器人 1. Mobile ALOHA 1 Mobile ALOHA: Learning Bimanual Mobile Manipulation with Low-Cost Whole-Body Teleoperation 1.1 项目地址 htt…

CoreSight学习笔记

文章目录 1 Components1.1 ROM Table 2 使用场景2.1 Debug Monitor中断2.1.1 参考资料 2.2 Programming the cross halt2.2.1 编程实现2.2.2 参考资料 2.3 CTI中断2.3.1 编程实现2.3.1.1 准备工作2.3.1.2 触发中断2.3.1.3 中断响应 2.3.2 参考资料 1 Components 1.1 ROM Table…