C# 发送电子邮件(随手笔记)

首先要知道SMTP、POP和IMAP协议

1.SMTP和POP协议
在这里插入图片描述

2.SMTP和IMAP协议
在这里插入图片描述
SMTP、POP和IMAP各种的作用

SMTP
SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。

POP3
POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。

IMAP
IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,是一个应用层协议(端口是143)。用来从本地邮件客户端(Outlook Express、Foxmail、Mozilla Thunderbird等)访问远程服务器上的邮件。它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。

总结:
SMTP管‘发’,POP3/IMAP管‘收’。

用网易邮箱做示例

1.注册好邮箱并登录,然后开启POP3、IMAP协议,如下图:
在这里插入图片描述
2.设置授权码
在这里插入图片描述

c#代码块

using FK.Masterkong.Mail.Common;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace FK.Masterkong.Mail.EmailHelper
{
    public class EmailHelper_
    {
        private string userEmail; 
        private string userPswd; 
        private string toEmail; 
        private string mailServer; 
        private string subject;   
        private string mailBody;  
        private string[] attachFiles;

        /// <summary>
        /// 构造方法
        /// </summary>
        /// <param name="userEmail">发件人邮箱</param>
        /// <param name="userPswd">邮箱帐号密码</param>
        /// <param name="toEmail">收件人邮箱</param>
        /// <param name="mailServer">邮件服务器</param>
        /// <param name="subject">邮件主题</param>
        /// <param name="mailBody">邮件内容</param>
        /// <param name="attachFiles">邮件附件</param>
        public EmailHelper_(string userEmail, string userPswd, string toEmail, string mailServer, string subject, string mailBody, string[] attachFiles)
        {
            this.userEmail = userEmail;
            this.userPswd = userPswd;
            this.toEmail = toEmail;
            this.mailServer = mailServer;
            this.subject = subject;
            this.mailBody = mailBody;
            this.attachFiles = attachFiles;
        }

        /// <summary>
        /// 开始推送邮件
        /// </summary>
        public bool SendEmail_()
        {
            bool sendState = false;
            //邮箱帐号的登录名
            //string username = userEmail.Substring(0, userEmail.IndexOf('@'));
            //邮件发送者
            MailAddress from = new MailAddress(userEmail,"");
            //邮件内容
            MailMessage mail = new MailMessage();
            //设置邮件的发件人,如果不想显示自己的邮箱地址,这里可以填符合mail格式的任意名称,真正发mail的用户不在这里设定,这个仅仅只做显示用
            mail.From = from;
            //设置邮件的主题
            mail.Subject = subject;
            //设置邮件的内容
            mail.Body = mailBody;
            //邮件是html格式
            mail.IsBodyHtml = true;
            //设置邮件的格式
            mail.BodyEncoding = System.Text.Encoding.UTF8;
            //设置邮件优先级
            mail.Priority = MailPriority.High;
            //设置邮件附件
            foreach (string attach in attachFiles)
            {
                mail.Attachments.Add(new Attachment(attach));
            }
            //设置邮件的收件人:可以是多人
            string[] mailNames = (toEmail).Split(';');
            foreach (string address in mailNames)
            {
                //mail.To.Clear(); //清空收件人集合 
                mail.To.Add(new MailAddress(address,""));
            }
            //不使用默认凭据访问服务器
            SmtpClient smtp = new SmtpClient(mailServer);
            //或者用:
            //SmtpClient smtp = new SmtpClient();
            //smtp.Host = mailServer;

            //不使用默认凭据访问服务器
            smtp.UseDefaultCredentials = false;
            smtp.Credentials = new NetworkCredential(userEmail, userPswd);
            //使用network发送到smtp服务器
            smtp.DeliveryMethod = SmtpDeliveryMethod.Network;

            try
            {
                //开始发送邮件
                smtp.Send(mail);
                //随机设置休眠时间  
                Random random = new Random();
                int time = random.Next(120, 180) * 10;
                Thread.Sleep(time);
                sendState = true;
                Log.CreateLogManager().Error("----------------------------------------------------------------------------------");
                Log.CreateLogManager().Error("发送成功");
            }
            catch (Exception ex)
            {
                Log.CreateLogManager().Error("----------------------------------------------------------------------------------");
                Log.CreateLogManager().Error("发送邮件异常:" + ex);
                sendState = false;
            }
            finally
            {
                foreach (Attachment item in mail.Attachments)
                {
                    item.Dispose();   //一定要释放该对象,否则无法删除附件
                }
            }
            return sendState;
        }
    }
}
发布了25 篇原创文章 · 获赞 5 · 访问量 909

猜你喜欢

转载自blog.csdn.net/qq_41863998/article/details/103478184