CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

求SMTP发信的完整例子!

楼主tony0115(下辈子不做技术!)2005-12-30 18:06:31 在 .NET技术 / C# 提问

要求   C#   编写,注视清楚!  
   
  包括服务器验证!  
  包括附件!  
  问题点数:100、回复次数:18Top

1 楼xiaxilin(彩色电脑)回复于 2005-12-30 19:21:25 得分 0

邮箱给我  
  Top

2 楼xiaxilin(彩色电脑)回复于 2005-12-30 19:23:37 得分 40

using   System;  
  using   System.Text;  
  using   System.IO;  
  using   System.Net;  
  using   System.Net.Sockets;  
  using   System.Collections;  
   
  namespace   Sinx.Common.Web.Mail  
  {  
  #region   AspNetPager   Server   Control   or   Windows   Server   Control  
   
  ///   <summary>  
  ///   邮件可以通过   Microsoft   Windows   2000   中内置的   SMTP   邮件服务或任意   SMTP   服务器来传送  
  ///   </summary>  
  public   class   SmtpMail  
  {  
   
  private   string   enter="\r\n";  
   
  ///   <summary>  
  ///   设定语言代码,默认设定为GB2312,如不需要可设置为""  
  ///   </summary>  
  private   string   _charset="GB2312";  
   
  ///   <summary>  
  ///   发件人地址  
  ///   </summary>  
  private   string   _from="";  
   
  ///   <summary>  
  ///   发件人姓名  
  ///   </summary>  
  private   string   _fromName="";  
   
  ///   <summary>  
  ///   回复邮件地址  
  ///   </summary>  
  ///public   string   ReplyTo="";  
   
  ///   <summary>  
  ///   收件人姓名  
  ///   </summary>  
  private   string   _recipientName="";  
   
  ///   <summary>  
  ///   收件人列表  
  ///   </summary>  
  private   Hashtable   Recipient=new   Hashtable();  
   
  ///   <summary>  
  ///   邮件服务器域名  
  ///   </summary>  
  private   string   mailserver="";  
   
  ///   <summary>  
  ///   邮件服务器端口号  
  ///   </summary>  
  private   int   mailserverport=25;  
   
  ///   <summary>  
  ///   SMTP认证时使用的用户名  
  ///   </summary>  
  private   string   username="";  
   
  ///   <summary>  
  ///   SMTP认证时使用的密码  
  ///   </summary>  
  private   string   password="";  
   
  ///   <summary>  
  ///   是否需要SMTP验证  
  ///   </summary>  
  private   bool   ESmtp=false;  
   
  ///   <summary>  
  ///   是否Html邮件  
  ///   </summary>  
  private   bool   _html=false;  
   
   
  ///   <summary>  
  ///   邮件附件列表  
  ///   </summary>  
  private   IList   Attachments;  
   
  ///   <summary>  
  ///   邮件发送优先级,可设置为"High","Normal","Low"或"1","3","5"  
  ///   </summary>  
  private   string   priority="Normal";  
   
  ///   <summary>  
  ///   邮件主题  
  ///   </summary>  
  private   string   _subject;  
   
  ///   <summary>  
  ///   邮件正文  
  ///   </summary>  
  private   string   _body;  
                   
  ///   <summary>  
  ///   密送收件人列表  
  ///   </summary>  
  ///private   Hashtable   RecipientBCC=new   Hashtable();  
   
  ///   <summary>  
  ///   收件人数量  
  ///   </summary>  
  private   int   RecipientNum=0;  
   
  ///   <summary>  
  ///   最多收件人数量  
  ///   </summary>  
  private   int   recipientmaxnum=5;  
   
  ///   <summary>  
  ///   密件收件人数量  
  ///   </summary>  
  ///private   int   RecipientBCCNum=0;  
   
  ///   <summary>  
  ///   错误消息反馈  
  ///   </summary>  
  private   string   errmsg;  
   
  ///   <summary>  
  ///   TcpClient对象,用于连接服务器  
  ///   </summary>  
  private   TcpClient   tc;  
   
  ///   <summary>  
  ///   NetworkStream对象  
  ///   </summary>  
  private   NetworkStream   ns;  
   
  ///   <summary>  
  ///   服务器交互记录  
  ///   </summary>  
  private   string   logs="";  
   
  ///   <summary>  
  ///   SMTP错误代码哈希表  
  ///   </summary>  
  private   Hashtable   ErrCodeHT   =   new   Hashtable();  
   
  ///   <summary>  
  ///   SMTP正确代码哈希表  
  ///   </summary>  
  private   Hashtable   RightCodeHT   =   new   Hashtable();  
   
   
  ///   <summary>  
  ///   初始化   <see   cref="Lion.Web.Mail.SmtpMail"/>   类的新实例  
  ///   </summary>  
  public   SmtpMail()  
  {  
  Attachments   =   new   System.Collections.ArrayList();  
  }Top

3 楼xiaxilin(彩色电脑)回复于 2005-12-30 19:24:00 得分 0

#region   Properties  
   
   
  ///   <summary>  
  ///   邮件主题  
  ///   </summary>  
  public   string   Subject  
  {  
  get  
  {  
  return   this._subject;  
  }  
  set  
  {  
  this._subject   =   value;  
  }  
  }  
   
  ///   <summary>  
  ///   邮件正文  
  ///   </summary>  
  public   string   Body  
  {  
  get  
  {  
  return   this._body;  
  }  
  set  
  {  
  this._body   =   value;  
  }  
  }  
   
   
  ///   <summary>  
  ///   发件人地址  
  ///   </summary>  
  public   string   From  
  {  
  get  
  {  
  return   _from;  
  }  
  set  
  {  
  this._from   =   value;  
  }  
  }  
   
  ///   <summary>  
  ///   设定语言代码,默认设定为GB2312,如不需要可设置为""  
  ///   </summary>  
  public   string   Charset  
  {  
  get  
  {  
  return   this._charset;  
  }  
  set  
  {  
  this._charset   =   value;  
  }  
  }  
   
  ///   <summary>  
  ///   发件人姓名  
  ///   </summary>  
  public   string   FromName  
  {  
  get  
  {  
  return   this._fromName;  
  }  
  set  
  {  
  this._fromName   =   value;  
  }  
  }  
   
  ///   <summary>  
  ///   收件人姓名  
  ///   </summary>  
  public   string   RecipientName  
  {  
  get  
  {  
  return   this._recipientName;  
  }  
  set  
  {  
  this._recipientName   =   value;  
  }  
  }  
   
  ///   <summary>  
  ///   邮件服务器域名和验证信息  
  ///   形如:"user:pass@www.server.com:25",也可省略次要信息。如"user:pass@www.server.com"或"www.server.com"  
  ///   </summary>  
  public   string   MailDomain  
  {  
  set  
  {  
  string   maidomain=value.Trim();  
  int   tempint;  
   
  if(maidomain!="")  
  {  
  tempint=maidomain.IndexOf("@");  
  if(tempint!=-1)  
  {  
  string   str=maidomain.Substring(0,tempint);  
  MailServerUserName=str.Substring(0,str.IndexOf(":"));  
  MailServerPassWord=str.Substring(str.IndexOf(":")+1,str.Length-str.IndexOf(":")-1);  
  maidomain=maidomain.Substring(tempint+1,maidomain.Length-tempint-1);  
  }  
   
  tempint=maidomain.IndexOf(":");  
  if(tempint!=-1)  
  {  
  mailserver=maidomain.Substring(0,tempint);  
  mailserverport=System.Convert.ToInt32(maidomain.Substring(tempint+1,maidomain.Length-tempint-1));  
  }  
  else  
  {  
  mailserver=maidomain;  
   
  }  
  }  
  }  
  }  
   
  ///   <summary>  
  ///   邮件服务器端口号  
  ///   </summary>  
  public   int   MailDomainPort  
  {  
  set  
  {  
  mailserverport=value;  
  }  
  }  
   
  ///   <summary>  
  ///   SMTP认证时使用的用户名  
  ///   </summary>  
  public   string   MailServerUserName  
  {  
  set  
  {  
  if(value.Trim()!="")  
  {  
  username=value.Trim();  
  ESmtp=true;  
  }  
  else  
  {  
  username="";  
  ESmtp=false;  
  }  
  }  
  }  
   
  ///   <summary>  
  ///   SMTP认证时使用的密码  
  ///   </summary>  
  public   string   MailServerPassWord  
  {  
  set  
  {  
  password=value;  
  }  
  }  
   
  ///   <summary>  
  ///   邮件发送优先级,可设置为"High","Normal","Low"或"1","3","5"  
  ///   </summary>  
  public   string   Priority  
  {  
  set  
  {  
  switch(value.ToLower())  
  {  
  case   "high":  
  priority="High";  
  break;  
   
  case   "1":  
  priority="High";  
  break;  
   
  case   "normal":  
  priority="Normal";  
  break;  
   
  case   "3":  
  priority="Normal";  
  break;  
   
  case   "low":  
  priority="Low";  
  break;  
   
  case   "5":  
  priority="Low";  
  break;  
   
  default:  
  priority="Normal";  
  break;  
  }  
  }  
  }  
   
  ///   <summary>  
  ///     是否Html邮件  
  ///   </summary>  
  public   bool   Html  
  {  
  get  
  {  
  return   this._html;  
  }  
  set  
  {  
  this._html   =   value;  
  }  
  }  
   
  ///   <summary>  
  ///   错误消息反馈  
  ///   </summary>  
  public   string   ErrorMessage  
  {  
  get  
  {  
  return   errmsg;  
  }  
  }  
   
  ///   <summary>  
  ///   服务器交互记录,如发现本组件不能使用的SMTP服务器,请将出错时的Logs发给我(lion-a@sohu.com),我将尽快查明原因。  
  ///   </summary>  
  public   string   Logs  
  {  
  get  
  {  
  return   logs;  
  }  
  }  
   
  ///   <summary>  
  ///   最多收件人数量  
  ///   </summary>  
  public   int   RecipientMaxNum  
  {  
  set  
  {  
  recipientmaxnum   =   value;  
  }  
  }  
   
   
  #endregion  
  #region   Methods  
   
   
  ///   <summary>  
  ///   添加邮件附件  
  ///   </summary>  
  ///   <param   name="FilePath">附件绝对路径</param>  
  public   void   AddAttachment(params   string[]   FilePath)  
  {  
  if(FilePath==null)  
  {  
  throw(new   ArgumentNullException("FilePath"));  
  }  
  for(int   i=0;i<FilePath.Length;i++)  
  {  
  Attachments.Add(FilePath[i]);  
  }  
  }  
   
  ///   <summary>  
  ///   添加一组收件人(不超过recipientmaxnum个),参数为字符串数组  
  ///   </summary>  
  ///   <param   name="Recipients">保存有收件人地址的字符串数组(不超过recipientmaxnum个)</param>  
  public   bool   AddRecipient(params   string[]   Recipients)  
  {  
  if(Recipient==null)  
  {  
  Dispose();  
  throw(new   ArgumentNullException("Recipients"));  
  }  
  for(int   i=0;i<Recipients.Length;i++)  
  {  
  string   recipient   =   Recipients[i].Trim();  
  if(recipient==String.Empty)  
  {  
  Dispose();  
  throw(new   ArgumentNullException("Recipients["+   i   +"]"));  
  }  
  if(recipient.IndexOf("@")==-1)  
  {  
  Dispose();  
  throw(new   ArgumentException("Recipients.IndexOf(\"@\")==-1","Recipients"));  
  }  
  if(!AddRecipient(recipient))  
  {  
  return   false;  
  }  
  }  
  return   true;  
  }  
   
  ///   <summary>  
  ///   发送邮件方法,所有参数均通过属性设置。  
  ///   </summary>  
  public   bool   Send()  
  {  
  if(mailserver.Trim()=="")  
  {  
  throw(new   ArgumentNullException("Recipient","必须指定SMTP服务器"));  
  }  
   
  return   SendEmail();  
   
  }Top

4 楼epaib(放下)回复于 2005-12-30 20:13:25 得分 0

public   void   SendMail()  
      {  
        try  
        {  
          MailMessage   MM=new   MailMessage();  
          MM.From=this.EmailFrom.Text;   //发送方地址  
          MM.To=this.EmailTo.Text;   //接收方地址  
          MM.Subject=this.EmailSubject.Text;   //主题  
          MM.Body=this.EmailBody.Text;   //内容  
   
         
          //设置为需要用户验证    
          MM.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",   "1");        
          //设置验证用户名(把emailaddress改为你的验证用户名)    
          MM.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername",   "emailaddress");      
          //设置验证密码(把password改为你的验证密码)    
          MM.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword",   "password");    
     
          //MM.Fields.Add("http://  
     
          SmtpMail.SmtpServer   =   "smtp.163.com";     //邮件服务器地址    
          SmtpMail.Send(MM);  
   
        }  
        catch(Exception   ex)  
        {  
          throw   (ex);  
        }  
   
  Top

5 楼CMIC(大象)回复于 2005-12-30 20:18:01 得分 0

http://blog.joycode.com/joy/archive/2004/01/14/11405.aspxTop

6 楼zhzuo(秋枫)回复于 2005-12-30 20:29:20 得分 0

http://www.systemwebmail.com/default.aspx  
  Top

7 楼huing(缥缈孤风)回复于 2005-12-31 09:17:40 得分 0

看到这么多的高人指点   mark一下哈Top

8 楼zjlijunmin(hiahia)回复于 2005-12-31 09:40:40 得分 0

学习Top

9 楼xiaxilin(彩色电脑)回复于 2005-12-31 10:18:30 得分 20

http://blog.csdn.net/xiaxilin/archive/2005/12/30/566541.aspx  
   
  这个是我原来引用的别人的Top

10 楼z_hp()回复于 2005-12-31 10:21:20 得分 0

upTop

11 楼qzj(SoldierQ)回复于 2005-12-31 10:38:15 得分 0

http://www.codeproject.com/vb/net/QMailClient.asp  
   
  基于Socket实现的SMTP和POP3协议Top

12 楼koenemy(小妮她爹--给孩子起个名太费劲)回复于 2005-12-31 10:51:08 得分 0

糊一个我写的  
   
  public   void   SmtpSend(out   bool   _Succeed)  
  {  
  _Succeed   =   false;  
  //   创建TcpClient对象,   并建立连接  
  TcpClient   tcp   =   null;  
  try{tcp   =   new   TcpClient(_EmailParameters.server,EmailParameters.port);}  
  catch{return;}  
   
  if(ReadString   (tcp.GetStream()).Substring(0,3)!="220")//获取连接信息  
  return;  
  if   (!Command   (tcp.GetStream(),   "EHLO   Localhost",   "250"))//   开始进行服务器认证  
  return;  
  if   (!Command   (tcp.GetStream(),   "AUTH   LOGIN",   "334"))//   需要身份验证  
  return;  
  if   (!Command   (tcp.GetStream(),   ToBase64   (_EmailParameters.username),   "334"))//   此处将username转换为Base64码  
  return;  
  if   (!Command   (tcp.GetStream(),   ToBase64   (_EmailParameters.password),   "235"))//   此处将password转换为Base64码  
  return;  
  //   准备发送  
  WriteString   (tcp.GetStream(),   "mail   From:   "   +   _EmailParameters.from);  
  WriteString   (tcp.GetStream(),   "rcpt   to:   "   +   _EmailParameters.to);  
  WriteString   (tcp.GetStream(),   "data");  
  //   发送邮件头  
  WriteString   (tcp.GetStream(),   "Date:   "   +   DateTime.Now);   //   时间  
  WriteString   (tcp.GetStream(),   "From:   "   +   _EmailParameters.fromname   +   "<"   +   _EmailParameters.from   +   ">");   //   发件人  
  WriteString   (tcp.GetStream(),   "Subject:   "   +   _EmailParameters.subject);   //   主题  
  WriteString   (tcp.GetStream(),   "To:"   +   _EmailParameters.toname   +   "<"   +   _EmailParameters.to   +   ">");   //   收件人  
  //邮件格式    
  WriteString   (tcp.GetStream(),   "Reply-To:"   +   _EmailParameters.from);   //   回复地址  
  WriteString   (tcp.GetStream(),   "X-Priority:"   +   EmailParameters.priority);   //   优先级  
  WriteString   (tcp.GetStream(),   "MIME-Version:1.0");   //   MIME版本  
  //   数据ID,随意  
  WriteString   (tcp.GetStream(),   "Content-Type:   text/html;charset="   +   EmailParameters.languageencoding);    
  WriteString   (tcp.GetStream(),   "Content-Transfer-Encoding:"   +   EmailParameters.encoding);    
  WriteString   (tcp.GetStream(),   "");  
  WriteString   (tcp.GetStream(),   "");    
  WriteString   (tcp.GetStream(),   _EmailParameters.content);    
   
  WriteString   (tcp.GetStream(),   ".");   //   最后写完了,输入"."  
  //   关闭连接  
  tcp.Close   ();  
  _Succeed   =   true;  
  }  
   
  Top

13 楼koenemy(小妮她爹--给孩子起个名太费劲)回复于 2005-12-31 10:51:24 得分 0

protected   void   WriteString   (NetworkStream   netStream,   string   str)  
  {  
  str   =   str   +   "\r\n";   //   加入换行符  
  byte[]   bWrite   =   Encoding.Default.GetBytes(str);  
  try{netStream.Write(bWrite,0,bWrite.Length);}  
  catch{}  
  }  
   
  ///   <summary>  
  ///   从流中读取字符  
  protected   string   ReadString   (NetworkStream   netStream)  
  {  
  string   sp   =   null;  
  byte[]   by   =   new   byte[1024];  
  int   size   =   netStream.Read(by,0,by.Length);//   读取数据流  
  if   (size   >   0)  
  sp   =   Encoding.Default.GetString(by);//   转化为String  
  return   sp;  
  }  
   
  ///   <summary>  
  ///   发出命令并判断返回信息是否正确  
  protected   bool   Command   (NetworkStream   netStream,   string   command,   string   state)  
  {  
  string   sp=null;  
  bool   success=false;  
  try  
  {  
  WriteString   (netStream,   command);//   写入命令  
  sp   =   ReadString   (netStream);//   接受返回信息  
  if   (sp.IndexOf(state)   !=   -1)//   判断状态码是否正确  
  success=true;  
  }  
  catch{}  
  return   success;  
  }  
  ///   <summary>  
  ///   字符串编码为Base64  
  protected   string   ToBase64   (string   str)  
  {  
  try  
  {  
  byte[]   by   =   Encoding.Default.GetBytes   (str);  
  str   =   Convert.ToBase64String   (by);  
  }  
  catch{}  
  return   str;  
  }Top

14 楼koenemy(小妮她爹--给孩子起个名太费劲)回复于 2005-12-31 10:52:29 得分 40

public   struct   EmailParameters  
  {  
  public   static   int   priority   =   3;//邮件优先级  
  public   static   string   encoding   =   "8bit";  
  public   static   string   languageencoding   =   "GB2312";  
  public   static   int   port   =   25;  
  public   string   username;  
  public   string   password;  
  public   string   from;//发件人地址    
  public   string   subject;//主题    
  public   string   content;//文本内容    
  public   string   to;//收件人  
  public   string   fromname;//发送者称呼  
  public   string   toname;//发送者称呼  
  public   string   server;//邮件服务器MX地址  
  public   int   MemberId;//Member表ID  
  public   int   EventId;//_Status_EmailSend表状态ID  
  public   SqlConnection   conn;//是否成功写数据库连接  
  }Top

15 楼califord(远方)回复于 2005-12-31 23:26:44 得分 0

同时也发到我的信箱里吧?可以吗?  
  qqmmxx@163.com  
  谢了,要是楼主看到了,也帮发到我的信箱里好吗?  
  感谢Top

16 楼timiil(小华)回复于 2005-12-31 23:33:51 得分 0

markTop

17 楼tony0115(下辈子不做技术!)回复于 2006-01-04 14:43:11 得分 0

xiaxilin   贴的例子我也知道到过,但我试验了石油问题的,会丢失内容  
   
  其他各位的我正在试验,请等等Top

18 楼wlwsoft(科技是第一生产力)回复于 2006-01-04 15:05:04 得分 0

msdn2003   上自带一个例子,你可以去看一下Top

相关问题

  • smtp发信程序问题!!!
  • 求spring+hibernate 完整例子
  • 我的SMTP服务器无法发信的问题(有原码)请高手帮忙!最好能告诉我完整的配置方法!
  • 如何用SMTP发信,(急用)?
  • 谁有CBitmapButton 比较完整的例子
  • 新人学习急需完整例子
  • 请给出一个完整的DLL例子-----是要完整的例子!!!
  • 如何 利用java实现 Mail的发信? 如果有例子,讲解以下。
  • 如何 利用java实现 Mail的发信? 如果有例子,讲解以下。
  • SMTP 发信验证怎么解决?谢谢!

关键词

  • .net
  • 邮件
  • 验证
  • 服务器
  • 邮件服务器
  • 收件人
  • emailparameters
  • maidomain
  • writestring
  • getstream

得分解答快速导航

  • 帖主:tony0115
  • xiaxilin
  • xiaxilin
  • koenemy

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo