使用.net技术库便捷发送邮件服务
补充知识点
1. POP3与SMTP的概念性解析
你是否曾好奇POP3和SMTP这两个术语到底是什么呢?简单来说,POP3是用于从邮件服务器接收电子邮件的协议,而SMTP是用于向邮件服务器发送电子邮件的协议。接下来我们深入了解一下它们的具体含义和功能。
(1)POP3的详细解读
POP3是邮局协议的第3个版本(Post Office Protocol 3)。它是一个重要的协议,规定了个体计算机如何连接到互联网上的邮件服务器以进行邮件的收发。这一协议允许用户从服务器上将邮件存储到本地计算机上,并可以根据客户端的操作选择删除或保留服务器上的邮件。遵循POP3协议的接收邮件服务器就是POP3服务器,专门用于接收电子邮件。POP3协议是TCP/IP协议家族的一员,由RFC 1939定义。
(2)SMTP的详细介绍
SMTP,全称为简单邮件传输协议(Simple Mail Transfer Protocol),是一组规范,用于从源地址到目的地址传输邮件。它控制邮件的中转方式,帮助每台计算机在发送或中转信件时找到下一个目的地。遵循SMTP协议的发送邮件服务器就是SMTP服务器。
2. ASP.NET中的邮件处理
在ASP.NET中发送电子邮件时,我们需要引用System.Net.Mail命名空间。这个命名空间包含了用于将电子邮件发送到SMTP服务器的类。
(1)主要的类及其功能
System.Net.Mail命名空间下有三个重要的类:MailMessage、Attachment和SmtpClient。MailMessage类用于创建邮件消息对象,包括邮件内容;Attachments类用于创建邮件附件对象;SmtpClient则负责将邮件传输到指定的SMTP服务器。
(2)MailMessage类的详细属性
MailMessage类包含了多种属性,如From表示发送邮件的地址,To表示接收邮件的地址,Subject为邮件的标题,Priority表示邮件的优先级等。还有附件相关的属性如Attachments,以及Bcc(密送地址)、Cc(抄送地址)、Body(邮件正文)等。
(3)ASP.NET发送邮件的方式
在ASP.NET中发送邮件的一种常见方式是通过邮件服务提供商的SMTP来发送。使用此方法时,你需要先注册一个免费邮箱。重要的信息包括SMTP服务器、用户名和密码。以下是一个简单的发送邮件的方法示例:
```csharp
public static bool SendEmail(string mailTo, string mailSubject, string mailContent)
//设置发送方的邮件信息
string smtpServer = "smtp."; //SMTP服务器地址
string mailFrom = ""; //发送者邮箱地址
string userPassword = "password"; //邮箱密码
//创建SmtpClient实例并设置相关属性
SmtpClient smtpClient = new SmtpClient();
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; //指定电子邮件发送方式
smtpClient.Host = smtpServer; //指定SMTP服务器地址
smtpClient.Credentials = new System.Net.NetworkCredential(mailFrom, userPassword); //设置凭据
//创建MailMessage实例并设置相关属性
MailMessage mailMessage = new MailMessage(mailFrom, mailTo); //设置发件人和收件人
mailMessage.Subject = mailSubject; //设置邮件主题
//后续可添加邮件正文和其他相关设置
//发送邮件操作(此处省略具体实现细节)
// ...
``````python
import System.Net.Mail
import System.IO
# 邮件发送配置
def SendEmail(server, username, password, to, subject, body):
# 创建SmtpClient对象
smtpClient = System.Net.Mail.SmtpClient(server)
# 设置登录信息
smtpClient.Credentials = System.Net.CredentialCache.DefaultCredentials
# 设置发送的邮件信息
mailMessage = System.Net.Mail.MailMessage()
mailMessage.To.Add(to)
mailMessage.Subject = subject
mailMessage.Body = body
# 发送邮件
try:
smtpClient.Send(mailMessage)
return True
except System.Net.Mail.SmtpException as ex:
return False
# 读取指定URL地址的HTML,用来以后发送网页用
def ScreenScrapeHtml(url):
request = System.Net.WebRequest.Create(url)
response = request.GetResponse()
reader = System.IO.StreamReader(response.GetResponseStream())
str = reader.ReadToEnd()
reader.Close()
return str
```csharp
public static void SendMail(string from, string to, string subject, string body, string server, string username, string password, bool IsHtml)
//设置SMTP验证
SmtpClient mailClient = new SmtpClient(SiteConfiguration.MailServer);
mailClient.UseDefaultCredentials = true;
mailClient.Credentials = new System.Net.NetworkCredential(username, password);
//指定如何发送电子邮件
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
//创建邮件对象
MailMessage mailMessage = new MailMessage(from, to, subject, body);
//定义邮件正文,主题的编码方式
mailMessage.BodyEncoding = System.Text.Encoding.GetEncoding("gb2312");
mailMessage.SubjectEncoding = System.Text.Encoding.GetEncoding("gb2312");
//获取或者设置一个值,该值表示电子邮件正文是否为HTML
mailMessage.IsBodyHtml = IsHtml;
//指定邮件的优先级
mailMessage.Priority = MailPriority.Normal;
//添加附件(可选)
if (strFileName != "" && strFileName != null)
{
Attachment data = new Attachment(strFileName);
mailMessage.Attachments.Add(data);
}
//发件人身份验证,否则163发不了
client.Credentials = new System.Net.NetworkCredential(strFrom, Password);
//发送
mailClient.Send(mailMessage);
```
```csharp
public static void SendText(string from, string to, string subject, string body, string server, string username, string password)
SendMail(from, to, server, username, password, false);
```
```csharp
public static void SendHtml(string from, string to, string subject, string body, string server, string username, string password)
SendMail(from, to, server, username, password, true);
```
```csharp
public static void SendWebUrl(string from, string to, string subject, string body, string server, string username, string password, string url)
//发送制定网页(具体实现根据url内容而定)
在多种需求用户注册的网站中,电子邮件发送功能尤为常见。通过电子邮件,网站能够验证用户的并确保其有效性。尽管我们可以通过正则表达式过滤不符合格式的电子邮件输入,但无法确保地址的真实性和所属权。为了确保电子邮件的真实性,通常采取以下方法:在用户通过初步格式验证后,系统不会立即允许其登录。相反,系统会向用户提供的电子邮件地址发送一封验证邮件,其中包含一个确认链接。只有点击该链接后,用户才能成功登录网站。如果用户提供的电子邮件地址无效或不属于他们本人,则不会收到此验证邮件,从而无法完成登录过程。这一步骤通常被称为电子邮件激活。
在.net类库中,发送电子邮件的方式随着版本的不同而有所变化。这里将介绍两种主要方法,分别适用于.net及更早版本和较新的.net版本。
对于.net及更早版本中的方法,主要利用CDOSYS消息组件来发送电子邮件。其关键代码如下:
使用System和System.Web.Mail命名空间。在此版本中,发送邮件的类主要位于System.Web.Mail命名空间下。
public class SendMail类中定义了一个Send方法,用于发送邮件。该方法接收多个参数,包括收件人邮件地址、发件人邮件地址、邮件主题、邮件内容、登录SMTP主机时的用户名和密码,以及用于发送邮件的SMTP主机。
在发送邮件的过程中,需要设置邮件的各种属性,如收件人地址、发件人地址、邮件主题、邮件格式(HTML格式)、邮件内容等。还需要设置身份验证信息,包括通过SMTP主机时的用户名和密码。通过SmtpMail类的Send方法发送邮件。如果在发送过程中遇到错误,将抛出异常。
需要注意的是,上述方法底层使用了CDOSYS组件,涉及的类主要是System.Web.Mail中的SmtpServer和MailMessage。这种方法已经被微软弃用。在较新的.net版本中,微软推荐使用新增的类和方法来进行电子邮件的发送。
以上内容首发于博客园,作者为周公,日期及详细博客地址请参见原文。