C# MailKit+MimeKit+QQ邮箱 实现发送邮件的简单例子

博客随笔
547
C#
MailKit
MimeKit
QQ邮箱
发送邮件

C# MailKit+MimeKit+QQ邮箱 实现发送邮件的简单例子

这里是一个c#发送邮件的例子,原本是为了偷懒给自己写的一个手机端直接操作控制服务器发送模板邮件附带文件给别人的功能,但实际发送效果和qq邮箱直接发送文件延迟差距实在太大,不知道是不是因为是个人邮箱第三方发送会被qq邮箱限制或者是因为服务器配置太低(阿里云实在有点贵只用的起入门级别的) ,实际本地发送是没有啥问题的

这里把代码贴出来 发送邮件的核心代码如下:

  public class QQEmail
    {
        Multipart multipart = new Multipart("mixed");
        /// 
        /// 添加文件
        /// 
        /// 
        /// 
        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;
            }
        }

        /// 
        /// 发送
        /// 
        /// 主题
        /// 发送人
        /// 接收人
        /// 邮件内容支持html
        /// 
        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("123456789@qq.com", "sdonghsgsdfx");
                smtp.Timeout = 600000;
                string res = smtp.Send(mail);
                smtp.Disconnect(true);
                return res;
            }
        }
    }

调用例子

QQEmail email = new QQEmail();
email.AddFile(@"d://某某某.zip", "文件附件.zip");
string html = "

我是邮件文字/html内容

"
; email.Send("主题:测试发送邮件", "123456789@qq.com", "23456789@qq.com", html);
C#控制台程序右上角的关闭按钮怎么屏蔽
使用C#为MP3文件添加封面、专辑和歌手信息的实例教程
多线程使用Image.FromFile 加载图片时出现图片文件被锁定无法更新
C# 实现对windows防火墙的常规操作管理白名单、黑名单
C# 将数组分组进行平均拆分成多个数组 代码如何实现
vs编译时报错 不安全代码只会在使用 /unsafe 编译的情况下出现
.NET5框架下使用HttpListener类实现http接口监听替代OWIN自我寄宿
C# 二维码生成源码|使用ThoughtWorks.QRCode 实现根据文本内容生成二维码
 C# 实现 Rsa字符串非对称加密简单例子
VS错误提示无法嵌入互操作类型“IWshShell_ClassClass”,请改用适用的接口的解决方法
C# 操作DOS添加端口防火墙名单
C#实现查询某个端口是被哪个程序进程占用
暂无相关内容...
基于.NET4.0实现的目录文件新增监视并自动化上传至ftp完整流程工具源码
[人脸检测]基于C#OpenCvSharp+haarcascade人脸、人眼模型实现人脸检测源码
.NET5+C# WPF实现图片添加倾斜文字平铺水印工具源码
C#基于OpenCVSharp实现图片对比相似度百分比源码下载
C#结合虫洞软件(Wormhole)实现自动登录到手机版百度网盘的流程源码
免责声明 部分转载分享内容若侵犯您的权益,还请 邮件联系 侵删