C# 发送邮件

1.安装 NuGet 包

2.代码如下

SendMailUtil

using MimeKit;
using Srm.CMER.Application.Contracts.CmerInfo;

namespace Srm.Mail
{
    public class SendMailUtil
    {
        public async static Task<string> SendEmail(SendEmialDto sendEmialDto,List<string> tolist, List<string> cclist, BodyBuilder builder, string title, CancellationToken cancellationToken)
        {

            // MimeMessage可以堪称MailKit里的一个邮件对象
            var sendMessage = new MimeMessage();    

            sendMessage.Subject = title;

            // 也可以添加多个发件人,二选其一
            //   sendMessage.From.Add(new MailboxAddress(data.Name, data.Address));
            // sendMessage.From.Add(new MailboxAddress("2799788752", "2799788752@qq.com"));
                sendMessage.From.Add(new MailboxAddress(sendEmialDto.UserName, sendEmialDto.Eamil));
            // 添加收件人信息


            string mailtos = string.Empty;
            foreach (var it in tolist)
            {
                if (!it.IsNullOrEmpty())
                {
                    if (mailtos.IsNullOrEmpty())
                    {
                        mailtos = it + ";";
                    }
                    else
                    {
                        mailtos += it + ";";
                    }
                    sendMessage.To.Add(new MailboxAddress(it, it));
                }
            }

            // 添加抄送(CC)人信息
            string mailccs = string.Empty;
            foreach (var it in cclist)
            {
                if (!it.IsNullOrEmpty())
                {
                    if (mailccs.IsNullOrEmpty())
                    {
                        mailccs = it + ";";
                    }
                    else
                    {
                        mailccs += it + ";";
                    }
                    if (it.Contains(";"))
                    {
                        string[] emial = it.Split(';');
                        foreach (string s in emial)
                        {
                            sendMessage.Cc.Add(new MailboxAddress(s, s));
                        }
                    }
                    else
                    {
                        sendMessage.Cc.Add(new MailboxAddress(it, it));
                    }

                }

            }
            //sendMessage.Cc.Add(new MailboxAddress("gyn", "gaoyanan@jshzxx.com"));

            // 邮件正文两种形式
            // 1. 不带附件
            // html
            sendMessage.Body= builder.ToMessageBody();
             
           //sendMessage.Body = new TextPart(TextFormat.Html) { Text = builder.HtmlBody };
            // 或者纯文本
        //    sendMessage.Body = new TextPart(TextFormat.Plain) { Text = context };

            // 2. 带附件
            /*var builder = new BodyBuilder();
            builder.TextBody = "邮件正文文字描述";
            // 添加附件,需带完整路径或者相对路径
            builder.Attachments.Add("test.xlsx");
            sendMessage.Body = builder.ToMessageBody();*/

            using (var smtp = new MailKit.Net.Smtp.SmtpClient())
            {
                try
                {
                    // 1. 注册邮件发送成功之后的事件,比如记录log
                    // MessageSent事件里可以通过args参数,获得服务器的响应信息,以便于记录Log。
                    smtp.MessageSent += (sender, args) => {
                        //  args.Response;

                    };
                    smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
                    // 2. 连接服务器
                    //if (sendEmialDto.AccountName == "forehopetcs@forehope-elec.com")
                    //{
                        await smtp.ConnectAsync("smtp.exmail.qq.com", 465, true, cancellationToken);
                    //}
                    //else
                    //{
                    //    await smtp.ConnectAsync("smtp.qq.com", 465, true, cancellationToken);
                    //}
                    // 3. 验证账号
                    //    await smtp.AuthenticateAsync(data.UserName, data.MailPassword, cancellationToken);

                    //  await smtp.AuthenticateAsync("2799788752", "qrjozanttznpdeei", cancellationToken);
                    await smtp.AuthenticateAsync(sendEmialDto.AccountName, sendEmialDto.AuthCode, cancellationToken);
                    // 4. 发送邮件
                    var success = await smtp.SendAsync(sendMessage, cancellationToken);
                    // 5. 释放链接
                    await smtp.DisconnectAsync(true, cancellationToken);

                    return success;
                }
                catch (Exception e)
                {
                    return e.Message;
                }
            }
        }
    }
}

SendEmialDto

namespace Srm.CMER.Application.Contracts.CmerInfo
{
    public class SendEmialDto
    {
        //账号名
        public string? AccountName { get; set; }
        //email
        public string? Eamil { get; set; }
        //授权码
        public string? AuthCode { get; set; }
        //用户名
        public string? UserName { get; set; }

    }
}

示例

SendEmailCommand

using System;
using System.Data;
using AutoMapper;
using MediatR;
using Microsoft.Extensions.Configuration;
using MimeKit;
using Srm.CMER.Application.Contracts.CmerInfo;
using Srm.COC.Application.Contracts.SpecApprove;
using Srm.Config;
using Srm.Core.Application.Commands;
using Srm.Core;
using Srm.Mail;
using Srm.Autofac;
using Srm.COC.Application.Contracts.Spec;

namespace Srm.Audit.Application.AuditFindings.Commands
{
    public class SendEmailCommand : IRequest<bool>
    {
        public string SupplierName { get; }

        public SendEmailCommand(string supplierName)
        {
            this.SupplierName = supplierName;
        }
    }
    public class SendEmailCommandHandler : CommandRequestHandler<SendEmailCommand, bool>
    {
        public SendEmailCommandHandler(IMediator mediator, IMapper mapper, IDbContext dbContext) : base(mediator, mapper, dbContext)
        {
        }

        public override async Task<bool> HandleAsync(SendEmailCommand request, IDbConnection dbConnection, CancellationToken cancellationToken)
        {
            string module = "供应商稽核";
            //收件人
            var tolist = new List<string>();

            SendEmialDto sendEmailDto = new SendEmialDto();
            sendEmailDto.AuthCode = "Foref7!00HopeTCS";
            sendEmailDto.AccountName = "forehopetcs@forehope-elec.com";
            sendEmailDto.Eamil = "forehopetcs@forehope-elec.com";
            sendEmailDto.UserName = "供应商管理系统(甬矽电子)";

            IConfiguration confing = SrmConfig.GetConfig();
            IConfigurationSection HttpUrlSection = confing.GetSection("GradeURL");
            string httpUrl = HttpUrlSection["HTTPURL"];

            var builder = new BodyBuilder();

            builder.TextBody += request.SupplierName+ "  ,请登录供应商系统("+httpUrl+")完成FINDINGS的填写,系统邮件无需回复,谢谢。";

            var SpecApproveQueryService = ServiceLocator.GetService<ISpecApproveQueryService>();
            var SpecQueryService = ServiceLocator.GetService<ISpecQueryService>();
            List<string> sqeemail = await SpecQueryService.GetSqeEmailsByModule(request.SupplierName,module, cancellationToken);
         
            List<string> SupplierEmails = await SpecApproveQueryService.GetSupEmailbyModule(request.SupplierName, module, cancellationToken);
            List<string> supccemail=await SpecApproveQueryService.GetSupccemail(request.SupplierName,module, cancellationToken);
            // 邮箱
            tolist.AddRange(SupplierEmails);
        
            var cclist=new List<string>();
            if (supccemail.Count > 0)
            {
                cclist.AddRange(supccemail);
            }
            if (sqeemail.Count < 1)
            {
                List<string> sqeemailTotal = await SpecQueryService.GetSqeEmails(cancellationToken);
                sqeemail.AddRange(sqeemailTotal);
            }
            cclist.AddRange(sqeemail);
            await SendMailUtil.SendEmail(sendEmailDto, tolist,cclist, builder, "FINDINGS提醒", cancellationToken);
            return true;
        }

    }
}

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

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

相关文章

java APP自动化测试AppIum

一、前言 二、Appium环境搭建 2.1 JDK安装 2.2 Android SDK安装配置 2.3 模拟器安装及配置 2.4 Appium Desktop安装及使用 2.5 Appium配置连接模拟器 三、实战基本脚本编写 3.1 创建Maven项目并配置 3.2 简单Demo 四、写在最后 一、前言 随着移动互联网的发展&#xff0c;AP…

mac录屏快捷键指南,轻松录制屏幕内容!

“大家知道mac电脑有录屏快捷键吗&#xff0c;现在录屏不太方便&#xff0c;每次都花很多时间&#xff0c;要是有录屏快捷键&#xff0c;应该会快速很多&#xff0c;可是哪里都找不到&#xff0c;有人知道吗&#xff1f;帮帮我&#xff01;” 苹果的mac电脑以其精美的设计和卓…

Java使用pdfbox进行pdf和图片之间的转换

简介 pdfbox是Apache开源的一个项目,支持pdf文档操作功能。 官网地址: Apache PDFBox | A Java PDF Library 支持的功能如下图.引入依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox-app</artifactId><version>…

AIGC|把Azure Open AI和Jira集成起来,实现智能化项目管理

目录 一、Jira与Azure OpenAI介绍 二、Jira和Azure OpenAI的REST API对接 三、利用Chats插件实现对话的过程 四、总结 一、Jira与Azure OpenAI介绍 Jira是一款由澳大利亚公司Atlassian开发的项目管理工具&#xff0c;主要用于追踪问题、管理需求、构建报告和管理故障等事项…

ruby语言怎么写个通用爬虫程序?

Ruby语言爬虫是指使用Ruby编写的网络爬虫程序&#xff0c;用于自动化地从互联网上获取数据。其中&#xff0c;CRawler是一个基于文本的小型地牢爬虫&#xff0c;它被设计为可扩展&#xff0c;所有游戏数据均通过JSON文件提供&#xff0c;程序仅处理游戏引擎。除此之外&#xff…

EasyExcel复杂表头数据导入

目录 表头示例导入代码数据导出 表头示例 导入代码 Overridepublic void importExcel(InputStream inputStream) {ItemExcelListener itemExcelListener new ItemExcelListener();EasyExcel.read(inputStream, ImportItem.class, itemExcelListener).headRowNumber(2).sheet()…

OSPF 高级特性3

一、OSPF安全特性 1、OSPF报文验证&#xff1a; 区域验证模式&#xff1a;在区域下配置一致的密码才能加入同一个区域。 [r3-ospf-1-area-0.0.0.0]authentication-mode md5 1 cipher 123456 接口验证模式&#xff1a;链路两端的接口必须配置一致的密码才能建立邻居关系 [r5-Gig…

回归预测 | Matlab实现SO-CNN-SVM蛇群算法优化卷积神经网络-支持向量机的多输入单输出回归预测

Matlab实现SO-CNN-SVM蛇群算法优化卷积神经网络-支持向量机的多输入单输出回归预测 目录 Matlab实现SO-CNN-SVM蛇群算法优化卷积神经网络-支持向量机的多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.SO-CNN-SVM蛇群算法优化卷积神经网络-支持向量…

oracel处理XML时,报ORA-31011、ORA-19202。

原字段为clob&#xff0c; 查询 SELECT XMLTYPE(字段) FROM TABLE_A报错如下&#xff1a; ORA-31011: XML 语法分析失败 ORA-19202: XML 处理 LPX-00217: invalid character 12 (U000C) Error at line 1559时出错 ORA-06512: 在 "SYS.XMLTYPE", line 272 ORA-0651…

大洋钻探系列之一引子

大洋科学钻探计划自1968年启动开始&#xff0c;迄今已有50余年&#xff0c;先后经历了&#xff14;个阶段。深海钻探计划(Deep Sea Drilling Program&#xff0c;DSDP&#xff0c;1968-1983年&#xff09;、国际大洋钻探计划&#xff08;Ocean Drilling Program&#xff0c;ODP…

目标检测 图像处理 计算机视觉 工业视觉

目标检测 图像处理 计算机视觉 工业视觉 工业表盘自动识别&#xff08;指针型和数值型&#xff09;智能水尺识别电梯中电动车识别&#xff0c;人数统计缺陷检测&#xff08;半导体&#xff0c;电子元器件等&#xff09;没带头盔检测基于dlib的人脸识别抽烟检测和睡岗检测/驾驶疲…

【使用Python编写游戏辅助工具】第三篇:鼠标连击器的实现

前言 这里是【使用Python编写游戏辅助工具】的第三篇&#xff1a;鼠标连击器的实现。本文主要介绍使用Python来实现鼠标连击功能。 鼠标连击是指在很短的时间内多次点击鼠标按钮&#xff0c;通常是鼠标左键。当触发鼠标连击时&#xff0c;鼠标按钮会迅速按下和释放多次&#xf…

双十一快递“当天达”?宏电助力物流分拣系统高效运行

​众所周知&#xff0c;每年双11都是快递业务的高峰期&#xff0c;是对各大物流企业运输能力的一次大考。为了持续提升快递配送的速度&#xff0c;自动化物流仓储建设的速度也在不断的加快&#xff0c;而在一个完整的自动化物流仓储系统中&#xff0c;输送分拣设备是物流自动化…

MySql优化经验分享

一条sql的具体执行过程 连接 我们怎么查看MySQL当前有多少个连接&#xff1f; 可以用show status命令&#xff0c;模糊匹配Thread&#xff0c; Show global status like "Thread%" show global variables like wait timeout;—非交互式超时时间&#xff0c;如JDBC…

分布式ID系统设计(3)

分布式ID系统设计第三集 id-service-SnowFlake方案 第二集说了id-service-Segment-DB可以生成趋势递增的ID,但是ID号是可以计算的。不太适用于一些订单ID生成的场景。因为存在数据暴露的风险 比如我可以对比两天的订单ID号来大致计算出公司一天的订单量。这个有点危险。 所以…

c++ | 字符串与指针的恩断情仇

我想&#xff0c;c/c中难的不是指针&#xff0c;而是其中的变化&#xff0c;尤其是思维的转变。很多东西 就是容易掉进陷阱。好在&#xff0c;你我都是善于思考的码农&#xff01; 大致情况是这样的&#xff0c;底层<–>c语言<–>c<–>应用 而数据的传输的最…

【Git】 如何删除本地分支

注意&#xff1a; 删除本地分支之前&#xff0c;请确保使用以下git checkout命令切换到您不想删除的另一个分支 切换分支&#xff1a; git checkout branch_name删除本地分支&#xff1a; git branch -D local_branch_name

【MongoDB】Windows 安装MongoDB 6.0

一、下载安装包 安装包下载地址https://www.mongodb.com/try/download/community这里我选择的是 二、解压并安装 1、解压 这里我将压缩包解压到了D盘&#xff0c;并重命名成了mongodb&#xff0c;解压后的目录如下&#xff1a; 2、创建配置文件 在D:\mongodb下新建conf目录…

网络工程师应知应会:基础知识(4)

一、虚拟路由冗余协议 (Virtual Router Redundancy Protocol&#xff0c;VRRP) 解决局域网中配置静态网关出现单点失效现象的路由协议&#xff0c;可以配置一个交换机群集。VRRP 允许两台或多台交换机使用同一个虚拟的 MAC 地址和 IP 地址&#xff0c;看起来多台交换机就像是一…

【触想智能】4U触摸工控机具有哪些优势?

工控机也叫工控主机&#xff0c;和我们常见的普通电脑主机是一样的&#xff0c;都是由CPU、主板、内存、硬盘、电源以及机箱组成的。 工控机有很多分类&#xff0c;有无风扇工控机、嵌入式工控机、上架式工控机、4U触摸工控机等。上架式工控机在市场上是比较受欢迎的&#xff0…