- 浏览: 812041 次
-
文章分类
最新评论
-
coosummer:
推荐使用http://buttoncssgenerator.c ...
几个漂亮的Button的CSS -
leonardleonard:
现在网站 放到 windows 2008 貌似 攻击少了
网站常被攻击 -
leonardleonard:
复制的
在C#里实现DATAGRID的打印预览和打印 -
spp_1987:
看着 头疼 本来就是头难受
在C#里实现DATAGRID的打印预览和打印 -
spp_1987:
大哥 代码太乱啊 ???
在C#里实现DATAGRID的打印预览和打印
这个是对于
EMAIL发送系统(C#+基于SMTP认证) 1.0
的改版这个第一版是2002年11月写的,过了一年半了,才有人提意见,就修正了一下,因为后来做的项目一直用不上,也就没有注意到
前段时间有网友反馈了一些问题,这次主要做了一些修正
1,text模式下发往163的邮件内容不见了
2,如果用outlook接收而不是在网上看邮件的话,会发现正文内容,但其后跟着一些乱码.
3,一些新开通的邮箱收到的是乱码,如*@126.com
4,修正了带附件的邮件,打开附件时内容混乱的问题
感谢 Lion互动网络论坛 的smhy8187和邮箱是grassdragon_china@yahoo.com.cn的朋友提供意见
欢迎大家提出修改建议,[注:]最好能把修改稿Mail给我一份,我们共同学习
我的Email:lion-a@sohu.com lion.net@163.com
------------------------------------------
源码下载:点击下载
以下是程序源码:
using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Collections;
namespace Lion.Web.Mail
{
/*
Create By lion
2004-04-23 19:00
Copyright (C) 2001,2002 www.LionSky.Net. All rights reserved.
Web: http://www.Lionsky.net ;;
Email: lion-a@sohu.com
Support .Net Framework Beta 2
*/
#region AspNetPager 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();
}
#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();
}
/// <summary>
/// 发送邮件方法
/// </summary>
/// <param name="smtpserver">smtp服务器信息,如"username:password@www.smtpserver.com:25",也可去掉部分次要信
息,如"www.smtpserver.com"</param>
public bool Send(string smtpserver)
{
MailDomain=smtpserver;
return Send();
}
/// <summary>
/// 发送邮件方法
/// </summary>
/// <param name="smtpserver">smtp服务器信息,如"username:password@www.smtpserver.com:25",也可去掉部分次要信
息,如"www.smtpserver.com"</param>
/// <param name="from">发件人mail地址</param>
/// <param name="fromname">发件人姓名</param>
/// <param name="to">收件人地址</param>
/// <param name="toname">收件人姓名</param>
/// <param name="html">是否HTML邮件</param>
/// <param name="subject">邮件主题</param>
/// <param name="body">邮件正文</param>
public bool Send(string smtpserver,string from,string fromname,string to,string toname,bool html,string
subject,string body)
{
MailDomain=smtpserver;
From=from;
FromName=fromname;
AddRecipient(to);
RecipientName=toname;
Html=html;
Subject=subject;
Body=body;
return Send();
}
#endregion
#region Private Helper Functions
/// <summary>
/// 添加一个收件人
/// </summary>
/// <param name="Recipients">收件人地址</param>
private bool AddRecipient(string Recipients)
{
if(RecipientNum<recipientmaxnum)
{
Recipient.Add(RecipientNum,Recipients);
RecipientNum++;
return true;
}
else
{
Dispose();
throw(new ArgumentOutOfRangeException("Recipients","收件人过多不可多于 "+ recipientmaxnum +"
个"));
}
}
void Dispose()
{
if(ns!=null)ns.Close();
if(tc!=null)tc.Close();
}
/// <summary>
/// SMTP回应代码哈希表
/// </summary>
private void SMTPCodeAdd()
{
ErrCodeHT.Add("500","邮箱地址错误");
ErrCodeHT.Add("501","参数格式错误");
ErrCodeHT.Add("502","命令不可实现");
ErrCodeHT.Add("503","服务器需要SMTP验证");
ErrCodeHT.Add("504","命令参数不可实现");
ErrCodeHT.Add("421","服务未就绪,关闭传输信道");
ErrCodeHT.Add("450","要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)");
ErrCodeHT.Add("550","要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)");
ErrCodeHT.Add("451","放弃要求的操作;处理过程中出错");
ErrCodeHT.Add("551","用户非本地,请尝试<forward-path>");
ErrCodeHT.Add("452","系统存储不足,要求的操作未执行");
ErrCodeHT.Add("552","过量的存储分配,要求的操作未执行");
ErrCodeHT.Add("553","邮箱名不可用,要求的操作未执行(例如邮箱格式错误)");
ErrCodeHT.Add("432","需要一个密码转换");
ErrCodeHT.Add("534","认证机制过于简单");
ErrCodeHT.Add("538","当前请求的认证机制需要加密");
ErrCodeHT.Add("454","临时认证失败");
ErrCodeHT.Add("530","需要认证");
RightCodeHT.Add("220","服务就绪");
RightCodeHT.Add("250","要求的邮件操作完成");
RightCodeHT.Add("251","用户非本地,将转发向<forward-path>");
RightCodeHT.Add("354","开始邮件输入,以<enter>.<enter>结束");
RightCodeHT.Add("221","服务关闭传输信道");
RightCodeHT.Add("334","服务器响应验证Base64字符串");
RightCodeHT.Add("235","验证成功");
}
/// <summary>
/// 将字符串编码为Base64字符串
/// </summary>
/// <param name="str">要编码的字符串</param>
private string Base64Encode(string str)
{
byte[] barray;
barray=Encoding.Default.GetBytes(str);
return Convert.ToBase64String(barray);
}
/// <summary>
/// 将Base64字符串解码为普通字符串
/// </summary>
/// <param name="str">要解码的字符串</param>
private string Base64Decode(string str)
{
byte[] barray;
barray=Convert.FromBase64String(str);
return Encoding.Default.GetString(barray);
}
/// <summary>
/// 得到上传附件的文件流
/// </summary>
/// <param name="FilePath">附件的绝对路径</param>
private string GetStream(string FilePath)
{
//建立文件流对象
System.IO.FileStream FileStr=new System.IO.FileStream(FilePath,System.IO.FileMode.Open);
byte[] by=new byte[System.Convert.ToInt32(FileStr.Length)];
FileStr.Read(by,0,by.Length);
FileStr.Close();
return(System.Convert.ToBase64String(by));
}
/// <summary>
/// 发送SMTP命令
/// </summary>
private bool SendCommand(string str)
{
byte[] WriteBuffer;
if(str==null||str.Trim()==String.Empty)
{
return true;
}
logs+=str;
WriteBuffer = Encoding.Default.GetBytes(str);
try
{
ns.Write(WriteBuffer,0,WriteBuffer.Length);
}
catch
{
errmsg="网络连接错误";
return false;
}
return true;
}
/// <summary>
/// 接收SMTP服务器回应
/// </summary>
private string RecvResponse()
{
int StreamSize;
string ReturnValue = String.Empty;
byte[] ReadBuffer = new byte[1024] ;
try
{
StreamSize=ns.Read(ReadBuffer,0,ReadBuffer.Length);
}
catch
{
errmsg="网络连接错误";
return "false";
}
if (StreamSize==0)
{
return ReturnValue ;
}
else
{
ReturnValue = Encoding.Default.GetString(ReadBuffer).Substring(0,StreamSize);
logs+=ReturnValue+this.enter;
return ReturnValue;
}
}
/// <summary>
/// 与服务器交互,发送一条命令并接收回应。
/// </summary>
/// <param name="str">一个要发送的命令</param>
/// <param name="errstr">如果错误,要反馈的信息</param>
private bool Dialog(string str,string errstr)
{
if(str==null||str.Trim()=="")
{
return true;
}
if(SendCommand(str))
{
string RR=RecvResponse();
if(RR=="false")
{
return false;
}
string RRCode=RR.Substring(0,3);
if(RightCodeHT[RRCode]!=null)
{
return true;
}
else
{
if(ErrCodeHT[RRCode]!=null)
{
errmsg+=(RRCode+ErrCodeHT[RRCode].ToString());
errmsg+=enter;
}
else
{
errmsg+=RR;
}
errmsg+=errstr;
return false;
}
}
else
{
return false;
}
}
/// <summary>
/// 与服务器交互,发送一组命令并接收回应。
/// </summary>
private bool Dialog(string[] str,string errstr)
{
for(int i=0;i<str.Length;i++)
{
if(!Dialog(str[i],""))
{
errmsg+=enter;
errmsg+=errstr;
return false;
}
}
return true;
}
/// <summary>
/// SendEmail
/// </summary>
/// <returns></returns>
private bool SendEmail()
{
//连接网络
try
{
tc=new TcpClient(mailserver,mailserverport);
}
catch(Exception e)
{
errmsg=e.ToString();
return false;
}
ns = tc.GetStream();
SMTPCodeAdd();
//验证网络连接是否正确
if(RightCodeHT[RecvResponse().Substring(0,3)]==null)
{
errmsg="网络连接失败";
return false;
}
string[] SendBuffer;
string SendBufferstr;
//进行SMTP验证
if(ESmtp)
{
SendBuffer=new String[4];
SendBuffer[0]="EHLO " + mailserver + enter;
SendBuffer[1]="AUTH LOGIN" + enter;
SendBuffer[2]=Base64Encode(username) + enter;
SendBuffer[3]=Base64Encode(password) + enter;
if(!Dialog(SendBuffer,"SMTP服务器验证失败,请核对用户名和密码。"))
return false;
}
else
{
SendBufferstr="HELO " + mailserver + enter;
if(!Dialog(SendBufferstr,""))
return false;
}
//
SendBufferstr="MAIL FROM:<" + From + ">" + enter;
if(!Dialog(SendBufferstr,"发件人地址错误,或不能为空"))
return false;
//
SendBuffer=new string[recipientmaxnum];
for(int i=0;i<Recipient.Count;i++)
{
SendBuffer[i]="RCPT TO:<" + Recipient[i].ToString() +">" + enter;
}
if(!Dialog(SendBuffer,"收件人地址有误"))
return false;
/*
SendBuffer=new string[10];
for(int i=0;i<RecipientBCC.Count;i++)
{
SendBuffer[i]="RCPT TO:<" + RecipientBCC[i].ToString() +">" + enter;
}
if(!Dialog(SendBuffer,"密件收件人地址有误"))
return false;
*/
SendBufferstr="DATA" + enter;
if(!Dialog(SendBufferstr,""))
return false;
SendBufferstr="From:" + FromName + "<" + From +">" +enter;
//if(ReplyTo.Trim()!="")
//{
// SendBufferstr+="Reply-To: " + ReplyTo + enter;
//}
//SendBufferstr+="To:" + RecipientName + "<" + Recipient[0] +">" +enter;
SendBufferstr += "To:=?"+Charset.ToUpper()+"?B?"+Base64Encode(RecipientName)+"?="+"<"+Recipient[0]
+">"+enter;
SendBufferstr+="CC:";
for(int i=0;i<Recipient.Count;i++)
{
SendBufferstr+=Recipient[i].ToString() + "<" + Recipient[i].ToString() +">,";
}
SendBufferstr+=enter;
SendBufferstr+=((Subject==String.Empty || Subject==null)?"Subject:":((Charset=="")?("Subject:" +
Subject):("Subject:" + "=?" + Charset.ToUpper() + "?B?" + Base64Encode(Subject) +"?="))) + enter;
SendBufferstr+="X-Priority:" + priority + enter;
SendBufferstr+="X-MSMail-Priority:" + priority + enter;
SendBufferstr+="Importance:" + priority + enter;
SendBufferstr+="X-Mailer: Lion.Web.Mail.SmtpMail Pubclass [cn]" + enter;
SendBufferstr+="MIME-Version: 1.0" + enter;
if(Attachments.Count!=0)
{
SendBufferstr+="Content-Type: multipart/mixed;" + enter;
SendBufferstr += " boundary=\"====="+
(Html?"001_Dragon520636771063_":"001_Dragon303406132050_")+"=====\""+enter+enter;
}
if(Html)
{
if(Attachments.Count==0)
{
SendBufferstr += "Content-Type: multipart/alternative;"+enter;//内容格式和分隔符
SendBufferstr += " boundary=\"=====003_Dragon520636771063_=====\""+enter+enter;
SendBufferstr += "This is a multi-part message in MIME format."+enter+enter;
}
else
{
SendBufferstr +="This is a multi-part message in MIME format."+enter+enter;
SendBufferstr += "--=====001_Dragon520636771063_====="+enter;
SendBufferstr += "Content-Type: multipart/alternative;"+enter;//内容格式和分隔符
SendBufferstr += " boundary=\"=====003_Dragon520636771063_=====\""+enter+enter;
}
SendBufferstr += "--=====003_Dragon520636771063_====="+enter;
SendBufferstr += "Content-Type: text/plain;"+ enter;
SendBufferstr += ((Charset=="")?(" charset=\"iso-8859-1\""):(" charset=\"" +
Charset.ToLower() + "\"")) + enter;
SendBufferstr+="Content-Transfer-Encoding: base64" + enter + enter;
SendBufferstr+= Base64Encode("邮件内容为HTML格式,请选择HTML方式查看") + enter + enter;
SendBufferstr += "--=====003_Dragon520636771063_====="+enter;
SendBufferstr+="Content-Type: text/html;" + enter;
SendBufferstr+=((Charset=="")?(" charset=\"iso-8859-1\""):(" charset=\"" +
Charset.ToLower() + "\"")) + enter;
SendBufferstr+="Content-Transfer-Encoding: base64" + enter + enter;
SendBufferstr+= Base64Encode(Body) + enter + enter;
SendBufferstr += "--=====003_Dragon520636771063_=====--"+enter;
}
else
{
if(Attachments.Count!=0)
{
SendBufferstr += "--=====001_Dragon303406132050_====="+enter;
}
SendBufferstr+="Content-Type: text/plain;" + enter;
SendBufferstr+=((Charset=="")?(" charset=\"iso-8859-1\""):(" charset=\"" +
Charset.ToLower() + "\"")) + enter;
SendBufferstr+="Content-Transfer-Encoding: base64" + enter + enter;
SendBufferstr+= Base64Encode(Body) + enter;
}
//SendBufferstr += "Content-Transfer-Encoding: base64"+enter;
if(Attachments.Count!=0)
{
for(int i=0;i<Attachments.Count;i++)
{
string filepath = (string)Attachments[i];
SendBufferstr += "--====="+
(Html?"001_Dragon520636771063_":"001_Dragon303406132050_") +"====="+enter;
//SendBufferstr += "Content-Type: application/octet-stream"+enter;
SendBufferstr += "Content-Type: text/plain;"+enter;
SendBufferstr += " name=\"=?"+Charset.ToUpper()+"?B?"+Base64Encode
(filepath.Substring(filepath.LastIndexOf("\\")+1))+"?=\""+enter;
SendBufferstr += "Content-Transfer-Encoding: base64"+enter;
SendBufferstr += "Content-Disposition: attachment;"+enter;
SendBufferstr += " filename=\"=?"+Charset.ToUpper()+"?B?"+Base64Encode
(filepath.Substring(filepath.LastIndexOf("\\")+1))+"?=\""+enter+enter;
SendBufferstr += GetStream(filepath)+enter+enter;
}
SendBufferstr += "--====="+ (Html?"001_Dragon520636771063_":"001_Dragon303406132050_")
+"=====--"+enter+enter;
}
SendBufferstr += enter + "." + enter;
if(!Dialog(SendBufferstr,"错误信件信息"))
return false;
SendBufferstr="QUIT" + enter;
if(!Dialog(SendBufferstr,"断开连接时错误"))
return false;
ns.Close();
tc.Close();
return true;
}
#endregion
#region
/*
/// <summary>
/// 添加一个密件收件人
/// </summary>
/// <param name="str">收件人地址</param>
public bool AddRecipientBCC(string str)
{
if(str==null||str.Trim()=="")
return true;
if(RecipientBCCNum<10)
{
RecipientBCC.Add(RecipientBCCNum,str);
RecipientBCCNum++;
return true;
}
else
{
errmsg+="收件人过多";
return false;
}
}
/// <summary>
/// 添加一组密件收件人(不超过10个),参数为字符串数组
/// </summary>
/// <param name="str">保存有收件人地址的字符串数组(不超过10个)</param>
public bool AddRecipientBCC(string[] str)
{
for(int i=0;i<str.Length;i++)
{
if(!AddRecipientBCC(str[i]))
{
return false;
}
}
return true;
}
*/
#endregion
}
#endregion
}
EMAIL发送系统(C#+基于SMTP认证) 1.0
的改版这个第一版是2002年11月写的,过了一年半了,才有人提意见,就修正了一下,因为后来做的项目一直用不上,也就没有注意到
前段时间有网友反馈了一些问题,这次主要做了一些修正
1,text模式下发往163的邮件内容不见了
2,如果用outlook接收而不是在网上看邮件的话,会发现正文内容,但其后跟着一些乱码.
3,一些新开通的邮箱收到的是乱码,如*@126.com
4,修正了带附件的邮件,打开附件时内容混乱的问题
感谢 Lion互动网络论坛 的smhy8187和邮箱是grassdragon_china@yahoo.com.cn的朋友提供意见
欢迎大家提出修改建议,[注:]最好能把修改稿Mail给我一份,我们共同学习
我的Email:lion-a@sohu.com lion.net@163.com
------------------------------------------
源码下载:点击下载
以下是程序源码:
using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Collections;
namespace Lion.Web.Mail
{
/*
Create By lion
2004-04-23 19:00
Copyright (C) 2001,2002 www.LionSky.Net. All rights reserved.
Web: http://www.Lionsky.net ;;
Email: lion-a@sohu.com
Support .Net Framework Beta 2
*/
#region AspNetPager 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();
}
#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();
}
/// <summary>
/// 发送邮件方法
/// </summary>
/// <param name="smtpserver">smtp服务器信息,如"username:password@www.smtpserver.com:25",也可去掉部分次要信
息,如"www.smtpserver.com"</param>
public bool Send(string smtpserver)
{
MailDomain=smtpserver;
return Send();
}
/// <summary>
/// 发送邮件方法
/// </summary>
/// <param name="smtpserver">smtp服务器信息,如"username:password@www.smtpserver.com:25",也可去掉部分次要信
息,如"www.smtpserver.com"</param>
/// <param name="from">发件人mail地址</param>
/// <param name="fromname">发件人姓名</param>
/// <param name="to">收件人地址</param>
/// <param name="toname">收件人姓名</param>
/// <param name="html">是否HTML邮件</param>
/// <param name="subject">邮件主题</param>
/// <param name="body">邮件正文</param>
public bool Send(string smtpserver,string from,string fromname,string to,string toname,bool html,string
subject,string body)
{
MailDomain=smtpserver;
From=from;
FromName=fromname;
AddRecipient(to);
RecipientName=toname;
Html=html;
Subject=subject;
Body=body;
return Send();
}
#endregion
#region Private Helper Functions
/// <summary>
/// 添加一个收件人
/// </summary>
/// <param name="Recipients">收件人地址</param>
private bool AddRecipient(string Recipients)
{
if(RecipientNum<recipientmaxnum)
{
Recipient.Add(RecipientNum,Recipients);
RecipientNum++;
return true;
}
else
{
Dispose();
throw(new ArgumentOutOfRangeException("Recipients","收件人过多不可多于 "+ recipientmaxnum +"
个"));
}
}
void Dispose()
{
if(ns!=null)ns.Close();
if(tc!=null)tc.Close();
}
/// <summary>
/// SMTP回应代码哈希表
/// </summary>
private void SMTPCodeAdd()
{
ErrCodeHT.Add("500","邮箱地址错误");
ErrCodeHT.Add("501","参数格式错误");
ErrCodeHT.Add("502","命令不可实现");
ErrCodeHT.Add("503","服务器需要SMTP验证");
ErrCodeHT.Add("504","命令参数不可实现");
ErrCodeHT.Add("421","服务未就绪,关闭传输信道");
ErrCodeHT.Add("450","要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)");
ErrCodeHT.Add("550","要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)");
ErrCodeHT.Add("451","放弃要求的操作;处理过程中出错");
ErrCodeHT.Add("551","用户非本地,请尝试<forward-path>");
ErrCodeHT.Add("452","系统存储不足,要求的操作未执行");
ErrCodeHT.Add("552","过量的存储分配,要求的操作未执行");
ErrCodeHT.Add("553","邮箱名不可用,要求的操作未执行(例如邮箱格式错误)");
ErrCodeHT.Add("432","需要一个密码转换");
ErrCodeHT.Add("534","认证机制过于简单");
ErrCodeHT.Add("538","当前请求的认证机制需要加密");
ErrCodeHT.Add("454","临时认证失败");
ErrCodeHT.Add("530","需要认证");
RightCodeHT.Add("220","服务就绪");
RightCodeHT.Add("250","要求的邮件操作完成");
RightCodeHT.Add("251","用户非本地,将转发向<forward-path>");
RightCodeHT.Add("354","开始邮件输入,以<enter>.<enter>结束");
RightCodeHT.Add("221","服务关闭传输信道");
RightCodeHT.Add("334","服务器响应验证Base64字符串");
RightCodeHT.Add("235","验证成功");
}
/// <summary>
/// 将字符串编码为Base64字符串
/// </summary>
/// <param name="str">要编码的字符串</param>
private string Base64Encode(string str)
{
byte[] barray;
barray=Encoding.Default.GetBytes(str);
return Convert.ToBase64String(barray);
}
/// <summary>
/// 将Base64字符串解码为普通字符串
/// </summary>
/// <param name="str">要解码的字符串</param>
private string Base64Decode(string str)
{
byte[] barray;
barray=Convert.FromBase64String(str);
return Encoding.Default.GetString(barray);
}
/// <summary>
/// 得到上传附件的文件流
/// </summary>
/// <param name="FilePath">附件的绝对路径</param>
private string GetStream(string FilePath)
{
//建立文件流对象
System.IO.FileStream FileStr=new System.IO.FileStream(FilePath,System.IO.FileMode.Open);
byte[] by=new byte[System.Convert.ToInt32(FileStr.Length)];
FileStr.Read(by,0,by.Length);
FileStr.Close();
return(System.Convert.ToBase64String(by));
}
/// <summary>
/// 发送SMTP命令
/// </summary>
private bool SendCommand(string str)
{
byte[] WriteBuffer;
if(str==null||str.Trim()==String.Empty)
{
return true;
}
logs+=str;
WriteBuffer = Encoding.Default.GetBytes(str);
try
{
ns.Write(WriteBuffer,0,WriteBuffer.Length);
}
catch
{
errmsg="网络连接错误";
return false;
}
return true;
}
/// <summary>
/// 接收SMTP服务器回应
/// </summary>
private string RecvResponse()
{
int StreamSize;
string ReturnValue = String.Empty;
byte[] ReadBuffer = new byte[1024] ;
try
{
StreamSize=ns.Read(ReadBuffer,0,ReadBuffer.Length);
}
catch
{
errmsg="网络连接错误";
return "false";
}
if (StreamSize==0)
{
return ReturnValue ;
}
else
{
ReturnValue = Encoding.Default.GetString(ReadBuffer).Substring(0,StreamSize);
logs+=ReturnValue+this.enter;
return ReturnValue;
}
}
/// <summary>
/// 与服务器交互,发送一条命令并接收回应。
/// </summary>
/// <param name="str">一个要发送的命令</param>
/// <param name="errstr">如果错误,要反馈的信息</param>
private bool Dialog(string str,string errstr)
{
if(str==null||str.Trim()=="")
{
return true;
}
if(SendCommand(str))
{
string RR=RecvResponse();
if(RR=="false")
{
return false;
}
string RRCode=RR.Substring(0,3);
if(RightCodeHT[RRCode]!=null)
{
return true;
}
else
{
if(ErrCodeHT[RRCode]!=null)
{
errmsg+=(RRCode+ErrCodeHT[RRCode].ToString());
errmsg+=enter;
}
else
{
errmsg+=RR;
}
errmsg+=errstr;
return false;
}
}
else
{
return false;
}
}
/// <summary>
/// 与服务器交互,发送一组命令并接收回应。
/// </summary>
private bool Dialog(string[] str,string errstr)
{
for(int i=0;i<str.Length;i++)
{
if(!Dialog(str[i],""))
{
errmsg+=enter;
errmsg+=errstr;
return false;
}
}
return true;
}
/// <summary>
/// SendEmail
/// </summary>
/// <returns></returns>
private bool SendEmail()
{
//连接网络
try
{
tc=new TcpClient(mailserver,mailserverport);
}
catch(Exception e)
{
errmsg=e.ToString();
return false;
}
ns = tc.GetStream();
SMTPCodeAdd();
//验证网络连接是否正确
if(RightCodeHT[RecvResponse().Substring(0,3)]==null)
{
errmsg="网络连接失败";
return false;
}
string[] SendBuffer;
string SendBufferstr;
//进行SMTP验证
if(ESmtp)
{
SendBuffer=new String[4];
SendBuffer[0]="EHLO " + mailserver + enter;
SendBuffer[1]="AUTH LOGIN" + enter;
SendBuffer[2]=Base64Encode(username) + enter;
SendBuffer[3]=Base64Encode(password) + enter;
if(!Dialog(SendBuffer,"SMTP服务器验证失败,请核对用户名和密码。"))
return false;
}
else
{
SendBufferstr="HELO " + mailserver + enter;
if(!Dialog(SendBufferstr,""))
return false;
}
//
SendBufferstr="MAIL FROM:<" + From + ">" + enter;
if(!Dialog(SendBufferstr,"发件人地址错误,或不能为空"))
return false;
//
SendBuffer=new string[recipientmaxnum];
for(int i=0;i<Recipient.Count;i++)
{
SendBuffer[i]="RCPT TO:<" + Recipient[i].ToString() +">" + enter;
}
if(!Dialog(SendBuffer,"收件人地址有误"))
return false;
/*
SendBuffer=new string[10];
for(int i=0;i<RecipientBCC.Count;i++)
{
SendBuffer[i]="RCPT TO:<" + RecipientBCC[i].ToString() +">" + enter;
}
if(!Dialog(SendBuffer,"密件收件人地址有误"))
return false;
*/
SendBufferstr="DATA" + enter;
if(!Dialog(SendBufferstr,""))
return false;
SendBufferstr="From:" + FromName + "<" + From +">" +enter;
//if(ReplyTo.Trim()!="")
//{
// SendBufferstr+="Reply-To: " + ReplyTo + enter;
//}
//SendBufferstr+="To:" + RecipientName + "<" + Recipient[0] +">" +enter;
SendBufferstr += "To:=?"+Charset.ToUpper()+"?B?"+Base64Encode(RecipientName)+"?="+"<"+Recipient[0]
+">"+enter;
SendBufferstr+="CC:";
for(int i=0;i<Recipient.Count;i++)
{
SendBufferstr+=Recipient[i].ToString() + "<" + Recipient[i].ToString() +">,";
}
SendBufferstr+=enter;
SendBufferstr+=((Subject==String.Empty || Subject==null)?"Subject:":((Charset=="")?("Subject:" +
Subject):("Subject:" + "=?" + Charset.ToUpper() + "?B?" + Base64Encode(Subject) +"?="))) + enter;
SendBufferstr+="X-Priority:" + priority + enter;
SendBufferstr+="X-MSMail-Priority:" + priority + enter;
SendBufferstr+="Importance:" + priority + enter;
SendBufferstr+="X-Mailer: Lion.Web.Mail.SmtpMail Pubclass [cn]" + enter;
SendBufferstr+="MIME-Version: 1.0" + enter;
if(Attachments.Count!=0)
{
SendBufferstr+="Content-Type: multipart/mixed;" + enter;
SendBufferstr += " boundary=\"====="+
(Html?"001_Dragon520636771063_":"001_Dragon303406132050_")+"=====\""+enter+enter;
}
if(Html)
{
if(Attachments.Count==0)
{
SendBufferstr += "Content-Type: multipart/alternative;"+enter;//内容格式和分隔符
SendBufferstr += " boundary=\"=====003_Dragon520636771063_=====\""+enter+enter;
SendBufferstr += "This is a multi-part message in MIME format."+enter+enter;
}
else
{
SendBufferstr +="This is a multi-part message in MIME format."+enter+enter;
SendBufferstr += "--=====001_Dragon520636771063_====="+enter;
SendBufferstr += "Content-Type: multipart/alternative;"+enter;//内容格式和分隔符
SendBufferstr += " boundary=\"=====003_Dragon520636771063_=====\""+enter+enter;
}
SendBufferstr += "--=====003_Dragon520636771063_====="+enter;
SendBufferstr += "Content-Type: text/plain;"+ enter;
SendBufferstr += ((Charset=="")?(" charset=\"iso-8859-1\""):(" charset=\"" +
Charset.ToLower() + "\"")) + enter;
SendBufferstr+="Content-Transfer-Encoding: base64" + enter + enter;
SendBufferstr+= Base64Encode("邮件内容为HTML格式,请选择HTML方式查看") + enter + enter;
SendBufferstr += "--=====003_Dragon520636771063_====="+enter;
SendBufferstr+="Content-Type: text/html;" + enter;
SendBufferstr+=((Charset=="")?(" charset=\"iso-8859-1\""):(" charset=\"" +
Charset.ToLower() + "\"")) + enter;
SendBufferstr+="Content-Transfer-Encoding: base64" + enter + enter;
SendBufferstr+= Base64Encode(Body) + enter + enter;
SendBufferstr += "--=====003_Dragon520636771063_=====--"+enter;
}
else
{
if(Attachments.Count!=0)
{
SendBufferstr += "--=====001_Dragon303406132050_====="+enter;
}
SendBufferstr+="Content-Type: text/plain;" + enter;
SendBufferstr+=((Charset=="")?(" charset=\"iso-8859-1\""):(" charset=\"" +
Charset.ToLower() + "\"")) + enter;
SendBufferstr+="Content-Transfer-Encoding: base64" + enter + enter;
SendBufferstr+= Base64Encode(Body) + enter;
}
//SendBufferstr += "Content-Transfer-Encoding: base64"+enter;
if(Attachments.Count!=0)
{
for(int i=0;i<Attachments.Count;i++)
{
string filepath = (string)Attachments[i];
SendBufferstr += "--====="+
(Html?"001_Dragon520636771063_":"001_Dragon303406132050_") +"====="+enter;
//SendBufferstr += "Content-Type: application/octet-stream"+enter;
SendBufferstr += "Content-Type: text/plain;"+enter;
SendBufferstr += " name=\"=?"+Charset.ToUpper()+"?B?"+Base64Encode
(filepath.Substring(filepath.LastIndexOf("\\")+1))+"?=\""+enter;
SendBufferstr += "Content-Transfer-Encoding: base64"+enter;
SendBufferstr += "Content-Disposition: attachment;"+enter;
SendBufferstr += " filename=\"=?"+Charset.ToUpper()+"?B?"+Base64Encode
(filepath.Substring(filepath.LastIndexOf("\\")+1))+"?=\""+enter+enter;
SendBufferstr += GetStream(filepath)+enter+enter;
}
SendBufferstr += "--====="+ (Html?"001_Dragon520636771063_":"001_Dragon303406132050_")
+"=====--"+enter+enter;
}
SendBufferstr += enter + "." + enter;
if(!Dialog(SendBufferstr,"错误信件信息"))
return false;
SendBufferstr="QUIT" + enter;
if(!Dialog(SendBufferstr,"断开连接时错误"))
return false;
ns.Close();
tc.Close();
return true;
}
#endregion
#region
/*
/// <summary>
/// 添加一个密件收件人
/// </summary>
/// <param name="str">收件人地址</param>
public bool AddRecipientBCC(string str)
{
if(str==null||str.Trim()=="")
return true;
if(RecipientBCCNum<10)
{
RecipientBCC.Add(RecipientBCCNum,str);
RecipientBCCNum++;
return true;
}
else
{
errmsg+="收件人过多";
return false;
}
}
/// <summary>
/// 添加一组密件收件人(不超过10个),参数为字符串数组
/// </summary>
/// <param name="str">保存有收件人地址的字符串数组(不超过10个)</param>
public bool AddRecipientBCC(string[] str)
{
for(int i=0;i<str.Length;i++)
{
if(!AddRecipientBCC(str[i]))
{
return false;
}
}
return true;
}
*/
#endregion
}
#endregion
}
相关推荐
综上所述,"EMAIL发送系统(C#+基于SMTP认证)2.0[源文件]"是一个基于C#和SMTP协议的邮件发送管理系统,它利用VS2005提供的开发工具和C#的System.Net.Mail命名空间,实现了邮件的创建、认证、发送以及错误处理等功能,...
在这个特定的知识点中,我们将聚焦于C#编程语言在ASP.NET 2.0环境中实现邮件发送的功能。 邮件发送在Web应用中是非常常见的一项需求,比如用户注册确认、忘记密码重置通知、营销邮件等。C#提供了一种简单而强大的...
总结,基于.NET 2.0的Email程序利用了.NET Framework 2.0的`System.Net.Mail`命名空间,通过`MailMessage`和`SmtpClient`类实现邮件的创建与发送。"BMailer"作为这样的程序,旨在简化电子邮件的管理工作,为用户提供...
### C#.NET 2.0 发送邮件 Demo 源代码解析 #### 一、概述 在本篇文章中,我们将详细解析一个基于 .NET 2.0 的 `System.Net.Mail` 库发送邮件的示例代码。通过这个例子,我们可以学习如何在 C# 中配置邮件发送的...
### C#发送Email邮件三种方法详解 随着网络技术的发展,电子邮件成为了企业和个人间进行信息交流的重要方式之一。在.NET Framework 2.0中,通过`System.Net.Mail`命名空间提供了强大的邮件发送功能,使得开发人员...
总的来说,C#提供了一套完善的API来处理电子邮件的发送,无论是通过本地主机还是远程SMTP服务器,只要正确配置服务器信息和认证,都可以轻松实现邮件发送。在实际应用中,需要根据邮件服务器的具体配置进行适当的...
【基于XML的Email管理系统】是一种使用C#编程语言开发的小型项目,专为.NET Framework 2.0设计。这个系统的核心在于利用XML技术来存储、管理和检索电子邮件信息。XML(Extensible Markup Language)是一种用于标记...
标题中的“一个基于C# .Net 2 的邮件管理组件程序”指的是这是一个使用C#编程语言,基于微软的.NET Framework 2.0版本构建的邮件处理软件开发组件。这种组件通常是为了帮助开发者在他们的应用程序中集成邮件发送和...
ASP.NET 2.0 邮件发送程序是基于微软的ASP.NET框架2.0版本开发的一款应用程序,它主要用于在Web应用中实现邮件发送的功能。这个程序已经过测试,证明可以成功地发送邮件,这对于开发者来说是一个可靠的工具,特别是...
在C# Winform环境下发送邮件是一项常见的任务,尤其在开发桌面应用程序时,可能需要集成邮件功能,例如用户注册验证、系统通知等。本教程将详细解释如何使用C#和Winform来实现邮件发送功能。 首先,你需要引入...
Email v2.0 特别版是一款专为.NET开发者设计的高效邮件处理组件,它集成了SMTP、POP3和IMAP三大电子邮件传输协议,旨在简化邮件的发送、接收和管理任务。这款组件对于那些需要在应用程序中集成邮件功能的开发者来说...
下面是一个简单的C#代码示例,演示如何使用Gmail SMTP服务器发送邮件: ```csharp using System.Net; using System.Net.Mail; MailMessage message = new MailMessage(); message.From = new MailAddress(...
在C#编程中,处理电子邮件是一项常见的任务,用于发送通知、报告或与用户进行通信。在.NET框架中,有多种方法可以实现这一功能。这里我们将深入探讨如何使用C#发送邮件,包括发送纯文本邮件、HTML格式的邮件以及带有...
在.NET Framework 2.0版本中,微软提供了一套完整的邮件发送功能,使得开发者无需依赖第三方库如JMail,也能实现邮件的发送。这个功能主要通过System.Net.Mail命名空间下的类来实现,包括SmtpClient、MailMessage等...
- **SMTP配置**:讲解了如何配置SMTP服务器以支持电子邮件的发送。 - **邮件消息构造**:介绍了如何使用MailMessage类创建格式化的邮件内容。 - **邮件附件与模板**:探讨了如何添加附件及使用邮件模板来改善邮件的...
首先,我们需要在Gmail设置中启用“不够安全的应用”的访问权限,因为ASP.NET的SMTP发送邮件方式默认不支持OAuth2.0,而Gmail通常需要这种安全认证。在Gmail的安全设置中找到“不够安全的应用的访问”,并将其开启。...
在软件开发领域,DLL(Dynamic Link Library)文件是Windows操作系统中的一个重要组成部分,它们提供了代码和资源的共享,使得多个应用程序可以调用相同的函数库。本文将重点讨论LumiSoft.Net 4.5.dll,这是一个专门...
这个框架特别适合于需要定期或批量发送定制邮件的应用程序,如用户通知、营销活动、系统报警等场景。 该框架的核心功能包括: 1. **模板支持**:允许开发者创建可复用的邮件模板,可以包含动态变量,以便在发送时...
- **技术基础**:基于微软VS.net2005+C#+MSSQL - **特点**:功能全面、安全性高、易于操作和维护、适用于Intranet/Internet应用。 #### 二、核心功能与优势 ##### 1. 智能化安装与维护 - **特点**:采用独创的智能...
在实际应用中,你可能还需要处理SMTP服务器进行发送邮件的操作,但这超出了从EML文件中检索信息的范围。提供的“Easily-Retrieve-Email-Information-from-EML-Files-R.pdf”文档可能会更详细地解释这个过程,而...