当前位置: 首页 > article >正文

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.kler.cn/a/228783.html

相关文章:

  • Golang Gin系列-1:Gin 框架总体概述
  • 智能创造的幕后推手:AIGC浪潮下看AI训练师如何塑造智能未来
  • Android SystemUI——CarSystemBar添加到窗口(十)
  • C++/QT环境下图像在窗口下等比例渲染绘制
  • QQ邮箱登录逆向
  • Java 接口安全指南
  • html2canvas 截图功能使用 VUE
  • 一步一步写线程之六数据通信并发模型Actor和CSP
  • 代码随想录算法训练营DAY13 | 栈与队列 (3)
  • Matlab:利用1D-CNN(一维卷积神经网络),分析高光谱曲线数据或时序数据
  • 从编程中理解:大脑的成瘾行为
  • 神经网络激活函数到底是什么?
  • Log360,引入全新安全与风险管理功能,助力企业积极抵御网络威胁
  • 前端的事件代理
  • 【C++】I/O多路转接详解(二)
  • ReactNative实现弧形拖动条
  • 十年炒股心得
  • UI自动化中元素无法定位问题解决方法
  • @ResponseBody
  • idea中找到所有的TODO
  • 【计算机网络】物理层概述|通信基础|奈氏准则|香农定理|信道复用技术
  • 使用PHPStudy搭建本地web网站并实现任意浏览器公网访问
  • 第八届:世界3D渲染挑战赛《无尽阶梯》正式开启
  • QT 的 blockSignals(true) 的作用范围
  • error: failed to push some refs to....
  • 基于Vue2用keydown、setTimeout事件实现连续按键(连击)任意键(或组合键)3秒触发自定义事件(以F1键为例)