『QQ:1353814576』

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


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

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

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

  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("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 = "<p>我是邮件文字/html内容</p>";
email.Send("主题:测试发送邮件", "123456789@qq.com", "23456789@qq.com", html);