发送电子邮件
首先要知道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;
}
}
}