NET环境下几种不同的邮件发送解决方案

来源:互联网 发布:中印战争知乎 编辑:程序博客网 时间:2024/05/18 03:46
//转载自:http://www.5dmail.net/html/2005-7-2/20057214304.htm
一、NET环境下几种不同的邮件发送解决方案
 1、 WEB开发,在ASP.NET中引用System.Web.Mail类
邮件消息是通过内置在 Microsoft Windows 2000 中的 SMTP 邮件服务或任意的 SMTP 服务器来传送的。System.Web.Mail 命名空间中生成的SmtpMail类可用于在C#网络程序中发送SMTP邮件。此命名空间中的类可以在 ASP.NET 或任何托管应用程序。在System.Web.Mail中提供用于构造电子邮件附件的属性和方法的类MailAttachment和用于构造电子邮件的属性和方法的类MailMessage。
 SmtpMail类
        属性:
SmtpServer获取或设置要用于发送所有电子邮件的 SMTP 邮件服务器的名称。
方法:
Send()                          发送电子邮件。
 MailMessage类
        属性:
       Attachment              指定随消息一起传输的附件列表。
       Bcc                          获取或设置以分号分隔的电子邮件地址列表,这些地址接收电子邮件的匿名副本                                              (BCC)。
Body                       获取或设置电子邮件的正文。
BodyEncoding         获取或设置电子邮件正文的编码类型。
BodyFormat           获取或设置电子邮件正文的内容类型。
Cc                          获取或设置以分号分隔的电子邮件地址列表,这些地址接收电子邮件的抄送副本 (CC)。
From                      获取或设置发件人的电子邮件地址。
Headers                 指定随电子邮件一起传输的自定义标头。
Priority                  获取或设置电子邮件的优先级。
Subject                  获取或设置电子邮件的主题行。
To                         获取或设置收件人的电子邮件地址。
UrlContentBase    获取或设置 Content-Base HTTP 标头,即在 HTML 编码的电子邮件正文中使用的所有相对URL 的 URL 基。
UrlContentLocation获取或设置电子邮件的 Content-Location HTTP 标头。
 MailAttachment类
        构造函数:
       public MailAttachment( string filename);
filename附件文件的名称。
代码如下:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Web.Mail;
namespace WebMail
{
     public class WebForm1 : System.Web.UI.Page
     {
          protected System.Web.UI.WebControls.Button Button1;
          private System.Web.Mail.MailMessage m_Mail;
          private void Page_Load(object sender, System.EventArgs e)
         {
              m_Mail=new MailMessage();
         }
          #region Web Form Designer generated code
          override protected void OnInit(EventArgs e)
         {
              InitializeComponent();
              base.OnInit(e);
         }
          private void InitializeComponent()
         {   
              this.Button1.Click += new System.EventHandler(this.Button1_Click);
              this.Load += new System.EventHandler(this.Page_Load);
         }
          #endregion
          private void Button1_Click(object sender, System.EventArgs e)
         {
              '定义SMTP服务器的名称
        .SmtpServer = "smtp.163.com";m_Mail
            '定义邮件的发送地址
              m_Mail.From=" lihonggen@163.com ";;
              '定义邮件的接收地址
        .To = " lihonggen0@163.com";m_Mail
              '定义邮件的暗送地址
                '.Bcc "aa@sina.com"m_Mail
             '定义邮件的抄送地址
           '.Cc = "aaa@sina.com"m_Mail
              '定义邮件的主题
            .Subject = "主题";m_Mail
             '定义邮件的主体
                .Body = "邮件主体!";m_Mail
                '邮件以 HTML的格式发送
                .BodyFormat = MailFormat.Html;m_Mail
             '定义邮件的有限级,在此设定为高
                .Priority = MailPriority.High;m_Mail
            '给发送的邮件附加上一个附件
              m_Mail.Attachments.Add(New MailAttachment("c:/lihonggen.doc"));
              SmtpMail.Send(m_Mail);
         }
     }
}
2、 在开发Windows 应用程序中使用System.Net.Sockets
也是基于SMTP协议
一、SMTP协议简介
⑴  客户端通过服务器的25端口建立TCP/IP连接
服务器端: 220 server.com Simple Mail Transfer Service Ready
⑵  客户端使用“HELO”命令标识发件人
客户端:HELO server.com
服务器端:250 server.com
⑶  客户端发送MAIL命令,服务器端以OK作为响应表明准备接收
客户端: MAIL FROM: <A@B.com>
服务器端: 250 OK
⑷  客户端发送RCPT命令标识收件人,服务器端回应是否愿意为收件人接受邮件
客户端:RCPT TO: <d@e.com>
服务器端:250 OK
⑸  协商结束后用命令DATA发送发送邮件
客户端:DATA
服务器端:354 Start mail input: end with <CRLF>.<CRLF>
⑹  客户端以.表示结束输入内容一起发送出去
客户端:Subject:  <CRLF>
内容<CRLF>
.<CRLF>
⑺ 客户端用QUIT命令退出。
              客户端:QUIT
服务器端:250 server.com closing transmission channel
优点:可以在此基础上开发出自己的组件,利用Sockets我们可以进行网络编程开发
缺点:程序量相对较多,
因代码过长所以在此不显示了
3、 IIS SMTP自带的基本的发信组件CDONTS
你不必专门下载,微软已经提供了这个组件,只要安装了2000,NT的SMTP就会有的。
优点:组件由操作系统自带
缺点:功能比较差,可扩展性不强
        Mymail = CreateObject("CDONTS.NewMail")
        Mymail.From = *** '信件发送者信箱
        Mymail.To = *** ‘信件接收者信箱
        Mymail.CC = *** '抄送
        Mymail.BCC = *** ’密件发送
        Mymail.Subject = *** ‘信件主题
        Mymail.Body = *** ’信件正文
        '设置优先级,0-不重要,1-一般,2-重要。
        Mymail.Importance = 2
        Mymail.Send()
        Mymail = Nothing
4、使用JMail组件
Jmail具有以下特点:
(1)可以发送附件;
(2)详细日志能力,便于你查看问题所在;
(3)设置邮件发送的优先级;
(4)支持多种格式的邮件发送,比如说以HTML或者TXT的方式发送邮件。这是个免费的组件。
(5)密件发送/(CC)抄送/紧急信件发送能力;
(6)最关键的就是--免费的组件,不必发钱,所以非常值得使用。
JMail组件的常用属性:
Body   邮件正文
Logging   调用Log记录,供Debug用
Priority   邮件的优先程度,从1到5
Sender   发件人
ServerAddress   SMTP服务器的IP地址或名称
Subject   邮件标题
 
JMail组件的常用方法:
AddAttachment   指定附件文件
AddRecipient   加入一个收件人
AddRecipientBCC   隐藏的副本抄送,只有发件人和BCC收件人知道。
AddRecipientCC   副本抄送
Execute   送出邮件
 
了解必要的属性及方法后,余下的部分接收使用者输入的Email,当成参数传给AddRecipient方法,然后根据需要填上其余属性,最后以Execute方法寄出。例如:
        JMail = Server.CreateObject("JMail.SMTPMail")
        JMail.Logging = True
        JMail.ServerAddress = "202.96.144.48"
        JMail.Sender = "lihonggen0@163.com"
        JMail.Subject = "subject."
        JMail.Body = "body."
        JMail.AddRecipient("bbbb@163.com")
        JMail.AddAttachment("c:/go.gif")
        JMail.Priority = 3
        JMail.Execute()
        JMail = Nothing
 
二、NET环境下邮件接收解决方案
      
POP3协议是一个客户读取或接收存储在远程邮件服务器上的邮件最常用的基本协议,一旦客户机与服务器建立一个连接,就发送简单文本命令,并且服务器以恰当的信息来响应。必须知道使用的命令是什么,以什么样的顺序发出,才能正确地从服务器上收取信件。
注意点:在登陆服务器时端口号应该是110
POP3的执行命令
首先手工输入
telnet pop.163.com
1.权限检查命令

执行命令
描述
USER
用户名
PASS
密码

 
2.获取信息命令

执行命令
描述
STAT
响应包含邮件的数量和全部邮件大小
LIST
收到一份个人邮件列表,列出每封邮件的大小

 
3.检索邮件

执行命令
描述
TOP
它能取得邮件的报头并且从信件中挑出文本行的数目
RETR
返回邮件的全部字节数目和整个邮件的文本
QUIT
终止会话,关闭邮箱

 
由于把每个功能都写下来收件代码就会过长,因此只写了USER、PASS、STAT执行命令http://www.cnblogs.com/surprise/archive/2004/09/24/46243.aspx#FeedBack,其它执行命令的代码请参考有关文档。

 

在C#中如何在客户端接收信件
在C#中如何在客户端接收信件
一、创建界面
 

类型
对象名
Text属性
Label
Label1
 
Label
Label2
用户名:
Label
Label3
密码
TextBox
TextBox1
 
TextBox
TextBox2
 
Button
Button1
接收
Button
Button2
退出

 
当发送的验证通过Label1的text属性就会显示成功的消息
当发送的验证没有通过Label1的text属性就会显示失败的消息
 
二、显示代码
 
1.在代码前端添加代码
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.IO;
2.添加字段代码
private TcpClient mailclient;
         private NetworkStream ns;
private StreamReader sr;
private StreamWriter sw;
3.双击“接收”按钮
private void Button1_Click(object sender, System.EventArgs e)
         {
              login();
         }
         private int login()
         {
              string m_response; //从服务器返回的信息变量
              int totmessages;  //指明在你的邮箱中有几封
              try
              {
                   //连接服务器,其中第一参数代表服务器地址,第二参数代表pop3的端口数
                   mailclient=new TcpClient("pop.163.com",110);
              }
              catch(Exception e)
              {
                   Label1.Text="error";//服务器连接失败
                   return 2;
              }
              ns=mailclient.GetStream();//返回服务器字节流
              sr=new StreamReader(ns);
              sw=new StreamWriter(ns);
              m_response=sr.ReadLine();//读取服务器字节流字符
              //发送用户名给服务器
              sw.WriteLine("User "+TextBox1.Text);
              sw.Flush();
              //验证用户名是否正确
              m_response=sr.ReadLine();
              if(m_response.Substring(0,3)=="-ER")
              {
                   Label1.Text="User error";//用户连接失败
                   return 2;
              }
              //发送密码给服务器
              sw.WriteLine("Pass "+TextBox2.Text);
              sw.Flush();
              try
              {
                   //验证密码是否正确
                   m_response=sr.ReadLine();
              }
              catch(Exception e)
              {
                   Label1.Text="Password error";//密码连接失败
                   return 2;
              }
              if(m_response.Substring(0,4)=="-ERR")
              {
                   Label1.Text="Password error";//密码错误
                   return 2;
              }
              sw.WriteLine("Stat");//执行pop3权限检查命令
              sw.Flush();
              m_response=sr.ReadLine();
              string[] nummess=m_response.Split(' ');
              totmessages=Convert.ToInt16(nummess[1]);//获取服务器中有几封信件
              if(totmessages>0)
              {
                   Label1.Text="you have "+totmessages+" messages";
              }
              else
              {
                   Label1.Text="you have no messages";
              }
              return 1;
         }
4.双击“退出”按钮
private void Button2_Click(object sender, System.EventArgs e)
         {
              if(ns!=null)
              {
                   sw.Close();
                   sr.Close();
                   ns.Close();
                   mailclient.Close();
              }
     }
注意点:
Stat代表权限检查命令,如果要得到标题和发件人信息要用top执行命令,要得到文本信息要用retr执行命令,这些内容还需我总结一下,我在下个礼拜会详细介绍。
 
在星期四我写了一篇关于“在C#中如何发送信件”的文章写的不怎么样,因此今天我另外写了篇“在C#中如何接收信件”,在下个礼拜我会总结在C#中整个发送Email和接收Email的基本内容请大家光顾咯谢谢

 

原创粉丝点击