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

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.lryc.cn/news/216911.html

相关文章:

  • Zeal下载文档慢的问题
  • HR模块开发(1):简单的开发流程和注意事项
  • 创建Vue实例
  • 2024上海国际人工智能展(CSITF)以“技术,让生活更精彩”为核心理念,以“创新驱动发展,保护知识产权,促进技术贸易”为主题
  • Vue3使用Monaco-editor
  • java 根据ip获取到城市 GeoLite2-City.mmdb
  • kaggle使用说明
  • BUUCTF FLAG 1
  • 万物皆可“云” 从杭州云栖大会看数智生活的未来
  • LeetCode1518 换水问题
  • 强大日志查看器,助力数据联动分析
  • HIBS一些简介
  • OpenCV实现人脸关键点检测
  • 300万美元!澳大利亚昆士兰州投资当地首家量子公司AQC
  • Android Studio打包AAR
  • 【Python基础知识四】控制语句
  • Jmeter压测 —— 1秒发送1次请求
  • 目标检测YOLO实战应用案例100讲-基于改进YOLOv4算法的自动驾驶场景 目标检测
  • Spring Cloud智慧工地源码,利用计算机技术、互联网、物联网、云计算、大数据等新一代信息技术开发,微服务架构
  • AI视频 | Runway的史诗级更新真的那么震撼吗?来看我的试用体验!
  • 【动作模式识别】实现复合动作模式识别(离线控制模块)
  • Python基础学习009——类的封装
  • 前端开发和后端开发,你更倾向于哪一种?
  • Selenium 基本功能
  • 智能井盖传感器有哪些?万宾科技智能井盖效果
  • 视频增强和修复工具 Topaz Video AI mac中文版功能
  • 0基础学习PyFlink——使用datagen生成流式数据
  • vue使用Web Speech API实现语音播报
  • MVC5_Day1(Razor视图引擎)
  • 超全整理,Jmeter性能测试-脚本error报错排查/分布式压测(详全)