C# 使用 QQ 邮箱发送邮件

栏目: ASP.NET · 发布时间: 5年前

内容简介:软件提醒功能最常用的就是邮箱了,如果使用QQ邮箱的话再搭配 QQ邮箱公众号又可以以最简单的方式实现微信提醒功能。不过在使用QQ邮箱的过程中遇到过一个大坑,按照官方说明使用的 465 端口发邮件经常出错,查了很久发现 465端口已被弃用,要替换成 587 端口~~后文整理了一个 C# 语言发邮件的类,QQ邮箱亲测正常,其他邮箱未知。在“设置”→ “账户”中开启 SMTP 服务:

一、概述

软件提醒功能最常用的就是邮箱了,如果使用QQ邮箱的话再搭配 QQ邮箱公众号又可以以最简单的方式实现微信提醒功能。不过在使用QQ邮箱的过程中遇到过一个大坑,按照官方说明使用的 465 端口发邮件经常出错,查了很久发现 465端口已被弃用,要替换成 587 端口~~

后文整理了一个 C# 语言发邮件的类,QQ邮箱亲测正常,其他邮箱未知。

二、程序实例

发邮件类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Text;
using System.Threading.Tasks;

namespace SystemMonitor
{
    public static class SendEmail
    {
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="fromEmail">发邮件地址</param>
        /// <param name="fromEmailSmtp">发邮件SMTP服务器地址</param>
        /// <param name="fromEmailSmtpPassword">发邮件SMTP服务器密码</param>
        /// <param name="receiveEmails">收件人</param>
        /// <param name="ccEmails">抄送人,没有抄送人员使用 null</param>
        /// <param name="subject">标题</param>
        /// <param name="body">内容</param>
        /// <param name="message">方法返回信息</param>
        /// <returns></returns>
        public static bool SendMail(string fromEmail,string fromEmailSmtp, string fromEmailSmtpPassword, List<string> receiveEmails, List<string> ccEmails, string subject, string body, out string message)
        {
            bool result = false;

            #region 检查配置文件是否设置

            if (String.IsNullOrEmpty(fromEmail))
            {
                message = "发件箱不能为空!设置信息:" + fromEmail;
                return result;
            }

            if (String.IsNullOrEmpty(fromEmailSmtp))
            {
                message = "发件箱SMTP服务器地址不能为空!设置信息:" + fromEmailSmtp;
                return result;
            }

            if (String.IsNullOrEmpty(fromEmailSmtpPassword))
            {
                message = "发件箱SMTP服务器密码或授权码不能为空!设置信息:" + fromEmailSmtpPassword;
                return result;
            }

            if (receiveEmails.Count <= 0)
            {
                message = "收件箱不能为空!";
                return result;
            }

            #endregion

            try
            {
                //实例化一个发送邮件类。
                MailMessage mailMessage = new MailMessage();
                //发件人邮箱地址,方法重载不同,可以根据需求自行选择。
                mailMessage.From = new MailAddress(fromEmail);
                //收件人邮箱地址。
                foreach (var email in receiveEmails)
                {
                    mailMessage.To.Add(new MailAddress(email));
                }

                if (ccEmails != null)//没有抄送人员
                {
                    //抄送人邮箱地址
                    foreach (var email in ccEmails)
                    {
                        mailMessage.CC.Add(new MailAddress(email));
                    }
                }

                //邮件标题。
                mailMessage.Subject = subject;
                mailMessage.SubjectEncoding = Encoding.UTF8;
                //邮件内容。
                mailMessage.Body = body;
                mailMessage.BodyEncoding = Encoding.UTF8;
                //是否是html格式
                mailMessage.IsBodyHtml = true;
                

                //实例化一个SmtpClient类。
                using (SmtpClient client = new SmtpClient())
                {
                    //在这里我使用的是qq邮箱,所以是smtp.qq.com,如果你使用的是126邮箱,那么就是smtp.126.com。
                    client.Host = fromEmailSmtp;
                    //使用安全加密连接。
                    client.EnableSsl = true;
                    client.Port = 587;//456 端口已经被弃用了,参考:https://stackoverflow.com/questions/20228644/smtpexception-unable-to-read-data-from-the-transport-connection-net-io-connect
                    //不和请求一块发送。
                    client.UseDefaultCredentials = false;
                    //验证发件人身份(发件人的邮箱,邮箱里的生成授权码);
                    client.Credentials = new NetworkCredential(fromEmail, fromEmailSmtpPassword);
                    //发送
                    client.Send(mailMessage);
                }
            }
            catch (Exception ex)
            {
                message = "发送邮件出现异常!\n输入参数:" + String.Join(",", receiveEmails) + " | " + subject + "\n详细异常信息:" + ex.ToString();
                return result;
            }

            result = true;
            message = DateTime.Now.ToString() + " 发送邮件成功!";
            return result;
        }
    }
}

调用方式:

SendEmail.SendMail("xxxxx@qq.com", "smtp.qq.com", "授权码",new List<string>() {"fdfsfsf@qq.com", "sfsfsfs@foxmail.com"}, null,"异常说明!" , "", out message);

三、获取QQ邮箱授权码

在“设置”→ “账户”中开启 SMTP 服务:

C# 使用 QQ 邮箱发送邮件

C# 使用 QQ 邮箱发送邮件

发送短信获取授权码:

C# 使用 QQ 邮箱发送邮件

C# 使用 QQ 邮箱发送邮件


以上所述就是小编给大家介绍的《C# 使用 QQ 邮箱发送邮件》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

设计方法卡牌

设计方法卡牌

罗莎 等 / 电子工业出版社 / 2017-7 / 79.00

本套设计素材提供了54种设计方法,以卡牌的形式展示给读者,每张卡牌包括该设计方法的基本描述、目的、时间成本、工具渠道、使用阶段、操作步骤及其归类属性等信息。在做设计时,可以根据自己的需求进行卡牌的选择和组合,让设计工作更有灵活性和趣味性。同时,依据设计产品属性的不同,卡牌提供了选择设计方法的推荐模板、方法组合模板、产品阶段划分模板,给初学者在做设计时提供一定的理论依据,帮助读者启发设计灵感,剖析设......一起来看看 《设计方法卡牌》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

MD5 加密
MD5 加密

MD5 加密工具