首页 > 编程语言 >C# 发送邮件(带有附件)

C# 发送邮件(带有附件)

时间:2022-12-06 10:11:07浏览次数:40  
标签:string C# smtp System html mail 附件 new 邮件

当前所用框架(.NET 5.0)

引用Nuget包:MailKit(3.2.0)、MimeKit(3.2.0)

using MailKit.Security;
using MimeKit;
using System;
using System.Net.Mime;

namespace Mailbox
{
    internal class Program
    {
        static void Main(string[] args)
        {
            QQEmail email = new QQEmail();
            email.AddFile(@"F:\Kyson\其他文件\Mailbox\Mailbox\images\1.jpg", "1.jpg");
            string html = "<p>我是邮件文字/html内容</p>";
            email.Send("主题:测试发送邮件", "[email protected]", "[email protected]", html);
        }
    }

    public class QQEmail
    {
        Multipart multipart = new Multipart("mixed");
        /// <summary>
        /// 添加文件
        /// </summary>
        /// <param name="file"></param>
        /// <param name="name"></param>
        public bool AddFile(string file, string name)
        {
            if (!System.IO.File.Exists(file))
            {
                return false;
            }
            try
            {
                System.IO.FileStream fs = new System.IO.FileStream(file, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite);

                //附件
                var attimg = new MimePart(MediaTypeNames.Application.Octet)
                {
                    Content = new MimeContent(fs, ContentEncoding.Default),
                    ContentDisposition = new MimeKit.ContentDisposition(MimeKit.ContentDisposition.Attachment),
                    ContentTransferEncoding = ContentEncoding.Default,
                    FileName = name,
                    IsAttachment = true,
                };
                multipart.Add(attimg);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        /// <summary>
        /// 发送
        /// </summary>
        /// <param name="subject">主题</param>
        /// <param name="from">发送人</param>
        /// <param name="to">接收人</param>
        /// <param name="html">邮件内容支持html</param>
        /// <returns></returns>
        public string Send(string subject, string from, string to, string html)
        {
            using (var smtp = new MailKit.Net.Smtp.SmtpClient())
            {
                MimeMessage mail = new MimeMessage();
                mail.From.Add(new MailboxAddress("Yuan天空", from));
                mail.To.Add(new MailboxAddress(to, to));
                mail.Subject = subject;
                if (string.IsNullOrEmpty(html))
                {
                    return "发送内容不能为空";
                }

                var Html = new TextPart(MimeKit.Text.TextFormat.Html)
                {
                    Text = html
                };
                multipart.Add(Html);
                mail.Body = multipart;

                smtp.ServerCertificateValidationCallback = (s, c, h, e) => true;
                //连接邮箱服务器 
                //!!!需要注意的是阿里云服务器默认是禁止25端口的,安全组添加也不行需要提交阿里云审核才能开通 ,  这里使用587端口是可以发送的(服务器实测发送延迟很高 ,本地调试发送挺快, 不知道是不是服务器配置比较低的原因)
                smtp.Connect("smtp.qq.com", 587, SecureSocketOptions.None);
                //登录认证 qq邮箱账号和授权密钥
                smtp.Authenticate("[email protected]", "xxxx");
                smtp.Timeout = 600000;
                string res = smtp.Send(mail);
                smtp.Disconnect(true);
                return res;
            }
        }
    }
}

 

标签:string,C#,smtp,System,html,mail,附件,new,邮件
From: https://www.cnblogs.com/duhaoran/p/16954414.html

相关文章

  • MPAndroidChart开源图表库(一)之饼状图
    MPAndroidChart是一款基于Android的开源图表库,MPAndroidChart不仅可以在Android设备上绘制各种统计图表,而且可以对图表进行拖动和缩放操作,应用起来非常灵活。MPAndroidChart......
  • C++入门(一)----Visual C++ 6.0和Visual Studio 2019 的安装与使用
    VisualC++6.0的安装与使用VisualStudio2019的安装与使用下载链接:​​​https://visualstudio.microsoft.com/zh-hans/free-developer-offers/​​​VisualStudio201......
  • [C++11与并发编程]读写锁的简单实现
    读写锁的简单实现layout:posttitle:读写锁categories:cpp_concurrencydescription:C++并发编程简介keywords:c++,并发编程,读写锁​​boost共享锁实现​​​读写......
  • React Native基础与入门(一)--搭建开发环境
    什么是ReactNative?ReactNative是Facebook开源的一套用于开发移动端跨平台App的技术框架,其代码托管在GitHub上,目前已有一千多名参与者向它贡献代码。有兴趣的可以去查看源......
  • 【Docker】部署Canal
    阿里系一般都对开发者非常友好,它们都隐蔽了大量无需开发者关心的配置(当然了需要精细化配置的时候还是可以覆盖配置的),而Canal也延续了阿里系的传统只需简单配置就可以使用。......
  • HelloCharts开源图表库(一)之折线图
    前面我们介绍了开源图表库MPAndroidChart,请参考:我们今天介绍的将是一个更为优秀的图表库,比MPAndroidChart性能更好,功能更完善,UI风格更美观,坐标轴更精细。支持缩放、滑动以及......
  • 查找linux下进程占用CPU过高的原因,以php-fpm为例
    很多时候,线上服务器的进程在某时间段内长时间占用CPU过高,为了优化,我们需要找出原因。1、找出占用CPU最高的10个进程psaux|sort-k3nr|head-n10或查看占用内存最高的1......
  • bug处理记录:com.fasterxml.jackson.core.JsonParseException: Illegal unquoted chara
    1.报错:com.fasterxml.jackson.core.JsonParseException:Illegalunquotedcharacter((CTRL-CHAR,code9)):hastobeescapedusingbackslashtobeincludedinst......
  • Jmeter的CSV参数化策略
    https://www.cnblogs.com/wuzm/p/10928287.html ======================================= csv参数化也是jmeter最常用参数化方式#准备一个csv文件,数字1-20即可#线......
  • Docker镜像与容器的工作原理
    提纲1、bootfs和rootfs2、镜像层和镜像3、容器层和容器4、联合文件系统​1、bootfs和rootfs一般而言,Linux的操作系统由两类文件系统组成:bootfs(bootfilesystem)和r......