首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

asp.net c#邮件收发?解决思路

2012-04-15 
asp.net c#邮件收发?大家好:我没写过邮件收发系统,现在要用ASP.NET C#写个邮件收发系统,要可以发邮件,可以

asp.net c#邮件收发?
大家好:
  我没写过邮件收发系统,
现在要用ASP.NET C#写个邮件收发系统,要可以发邮件,可以收邮件,但不知道怎么下手?
在网上看到说 ASP.NET里有自带的System.net.Mail类可以实现,
有的说自带的类只能实现发,不能收,收要用JMAIL,
但这些我都没用过,
不知道该怎么写?
好像程序写好,还要配置SMTP服务?
如果我先在我本地实现收发做个测试,需要怎么配置?
请高手们给我个思路,实现步骤,有代码更好,最好能有注释,谢谢。

[解决办法]

C# code
using System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;using System.Net.Mail;using System.Text;using System.Net;/// <summary>///SendMail 的摘要说明/// </summary>public class SendMail{    private string _mailStmp;    public string MailStmp    {        get { return _mailStmp; }        set { _mailStmp = value; }    }    private string _mailFrom;    public string MailFrom    {        get { return _mailFrom; }        set { _mailFrom = value; }    }    private string _mailPwd;    public string MailPwd    {        get { return _mailPwd; }        set { _mailPwd = value; }    }    private string _mailTo;    public string MailTo    {        get { return _mailTo; }        set { _mailTo = value; }    }    private string _mailTitle;    public string MailTitle    {        get { return _mailTitle; }        set { _mailTitle = value; }    }    private string _mailContent;    public string MailContent    {        get { return _mailContent; }        set { _mailContent = value; }    }    public static void Send(SendMail mailInfo)    {        /*发件人的信息*/        string smtp = mailInfo.MailStmp; //发信人所用邮箱的服务器         string mailForm = mailInfo.MailFrom; //发件人的邮箱         string mailPwd = mailInfo.MailPwd; //发件人的密码         string mailTo = mailInfo.MailTo; //收件人信息         string mailTitle = mailInfo.MailTitle; //邮件标题         string mailContent = mailInfo.MailContent; //邮件内容         SmtpClient client = new SmtpClient(smtp, 25);        client.UseDefaultCredentials = false;        client.Credentials = new NetworkCredential(mailForm, mailPwd);        /*指定如何处理待发的邮件*/        client.DeliveryMethod = SmtpDeliveryMethod.Network;        MailMessage message = new MailMessage(mailForm, mailTo, mailTitle, mailContent);        message.BodyEncoding = Encoding.Default;        message.IsBodyHtml = true;        client.Send(message);        //try        //{        //    MailInfo mi = new MailInfo();        //    mi.MailStmp = ""        //    mi.MailFrom = "@.com";        //    mi.MailPwd = "";        //    mi.MailTo = "beyondmj0.student@sina.com";        //    mi.MailTitle = "Test For Fucking";        //    mi.MailContent = "<marquee>123</marquee>";        //    SendMail(mi);        //}        //catch (Exception ex)        //{        //    Console.WriteLine(ex.Message);        //}    }}
[解决办法]
参考
http://www.cnblogs.com/smallfa/articles/929962.html
http://www.cnblogs.com/zengjun1980/articles/1074825.html
[解决办法]
http://www.cnblogs.com/yank/archive/2008/08/03/1258428.html
http://www.cnblogs.com/voswin/articles/1281522.html
[解决办法]
http://www.cnblogs.com/ustbwuyi/archive/2007/05/28/762581.html
[解决办法]
/**//// <summary>
/// 邮件初始化
/// 为了简单,自己发个自己
/// </summary>
/// <returns></returns>
public MailMessage InitMail(string Address)
{
MailMessage mail = new MailMessage();
//发件人
mail.From = new MailAddress(Address);


//收件人
mail.To.Add(new MailAddress(Address));
//主题
mail.Subject = "ASP.NET send mail testing!";
//内容
mail.Body = "Welcome to join us,let me instruduce myself!";
//邮件主题和正文编码格式
mail.SubjectEncoding = System.Text.Encoding.UTF8;
mail.BodyEncoding = System.Text.Encoding.UTF8;
//邮件正文是Html编码
mail.IsBodyHtml = true;
//优先级
mail.Priority = MailPriority.High;
//密件抄送收件人
mail.Bcc.Add(Address);
//抄送收件人
mail.CC.Add(Address);

//添加附件
mail.Attachments.Add(new Attachment("d:\\1.txt"));
mail.Attachments.Add(new Attachment("d:\\2.txt"));
mail.Attachments.Add(new Attachment("d:\\3.txt"));

return mail;
}



发送Gmail邮件。端口号为25、587成功。
[解决办法]
using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;

namespace OSLeagueForumXP.Components
{
/**//// <summary>
/// TcpClient派生类,用来进行SMTP服务器的连接工作
/// </summary>
public class SMTPClient : TcpClient
{
/**//// <summary>
/// 进行SMTP服务器的连接
/// </summary>
public SMTPClient()
{
}
/**//// <summary>
/// 是否以连接
/// </summary>
/// <returns>连接为True,不连接为False</returns>
public bool isConnected()
{
return Active;
}

/**//// <summary>
/// 向服务器发送命令
/// </summary>
/// <param name="Command">命令</param>
public void SendCommandToServer(string Command)
{
NetworkStream ns = this.GetStream() ;
byte[] WriteBuffer ;
WriteBuffer = new byte[1024] ;
WriteBuffer = Encoding.Default.GetBytes(Command);
ns.Write(WriteBuffer,0,WriteBuffer.Length);
return ;
}

/**//// <summary>
/// 取得服务器反馈信息
/// </summary>
/// <returns>字符串</returns>
public string GetServerResponse()
{
int StreamSize ;
string ReturnValue = "" ;
byte[] ReadBuffer ;
NetworkStream ns = this.GetStream() ;
ReadBuffer = new byte[1024] ;
StreamSize = ns.Read(ReadBuffer,0,ReadBuffer.Length);
if (StreamSize==0)
{
return ReturnValue ;
}
else
{
ReturnValue = Encoding.Default.GetString(ReadBuffer);
return ReturnValue;
}
}

/**//// <summary>
/// 判断返回的信息中是否有指定的SMTP代码出现
/// </summary>
/// <param name="Message">信息</param>
/// <param name="SMTPCode">SMTP代码</param>
/// <returns>存在返回False,不存在返回True</returns>
public bool DoesStringContainSMTPCode(string Message,string SMTPCode)
{
return(Message.IndexOf(SMTPCode,0,10)==-1)?false:true;
}

} //结束类

/**//// <summary>
/// 发送邮件类
/// </summary>
public class SMTPMail
{
/**//// <summary>
/// 错误反馈信息
/// </summary>
private string strErrMessage = null;

/**//// <summary>
/// SMTP服务器反馈的信息
/// </summary>
private string strResponse;



/**//// <summary>
/// 构造函数
/// </summary>
public SMTPMail()
{
strErrMessage = "";
strResponse = "";
}

/**//// <summary>
/// 取得错误反馈信息
/// </summary>
public string ErrorMessage
{
get
{
return strErrMessage ;
}
}

/**//// <summary>
/// 取得SMTP服务器反馈的信息
/// </summary>
public string ServerResponse
{
get
{
return strResponse;
}
}

/**//// <summary>
/// 邮件发送优先级
/// </summary>
public enum Prioritys
{
/**//// <summary>
/// 最高级别
/// </summary>
HIGH = 1,
/**//// <summary>
/// 默认级别
/// </summary>
NORMAL = 3,
/**//// <summary>
/// 最低级别
/// </summary>
LOW = 5
}


[解决办法]
/**//// <summary>
/// 进行BASE64编码
/// </summary>
/// <param name="Data">数据</param>
/// <returns>字符串</returns>
private string Encode(string Data)
{
byte[] bteData;
bteData = Encoding.Default.GetBytes(Data);
return Convert.ToBase64String(bteData);
}

/**//// <summary>
/// 进行BASE64解码
/// </summary>
/// <param name="Data">数据</param>
/// <returns>字符串</returns>
private string Decode(string Data)
{
byte[] bteData;
bteData = Convert.FromBase64String(Data);
return Encoding.Default.GetString(bteData);
}

/**//// <summary>
/// 发送邮件
/// </summary>
/// <param name="SmtpHost">SMTP服务器</param>
/// <param name="Port">SMTP服务器端口</param>
/// <param name="From">邮件发送者</param>
/// <param name="DisplayFromName">显示的发送者名称</param>
/// <param name="Authentication">是否进行认证</param>
/// <param name="UserName">认证用户名</param>
/// <param name="Password">认证密码</param>
/// <param name="To">邮件接收者</param>
/// <param name="DisplayToName">显示的接收者名称</param>
/// <param name="Priority">优先级</param>
/// <param name="Html">是否为HTML</param>
/// <param name="Base">URL</param>
/// <param name="Subject">邮件主题</param>
/// <param name="Message">邮件内容</param>
public void SendMail(string SmtpHost,int Port,string From,string DisplayFromName,bool Authentication,string UserName,string Password,string To,string DisplayToName,Prioritys Priority,bool Html,string Base,string Subject,string Message)
{
try
{
string strResponseNumber;
SMTPClient smtpcMail = new SMTPClient();
smtpcMail.Connect(SmtpHost,Port);
bool bolConnect = smtpcMail.isConnected();

//判断是否进行了连接
if (!bolConnect)
{


strErrMessage = "Smtp服务器连接失败";
return;
}

//读取反馈信息
strResponseNumber = smtpcMail.GetServerResponse();
if (smtpcMail.DoesStringContainSMTPCode(strResponseNumber,"220"))
{
this.strResponse += strResponseNumber;
}
else
{
this.strErrMessage = "连接失败" + strResponseNumber;
return ;
}

int intBuffer = 0;
int intArray = 0;
if(Authentication)
{
intBuffer = 9;
}
else
{
intBuffer = 6;
}
string[] strSendBuffer = new string[intBuffer];
string[] strResponseCode = {"220","250","251","354","221","334","235"}; // success codes from SMTP server

string strData = "";
strData = string.Concat("HELO ",SmtpHost);
strData = string.Concat(strData,"\r\n");
strSendBuffer[intArray] = strData;
intArray = intArray+1;

if(Authentication)
{
strData = "";
strData = string.Concat("AUTH LOGIN","\r\n");
strData = string.Concat(strData,"\r\n");
strSendBuffer[intArray] = strData;
intArray = intArray+1;

strData = "";
strData = string.Concat(Encode(UserName),"\r\n");
strData = string.Concat(strData,"\r\n");
strSendBuffer[intArray] = strData;
intArray = intArray+1;

strData = "";
strData = string.Concat(Encode(Password),"\r\n");
strData = string.Concat(strData,"\r\n");
strSendBuffer[intArray] = strData;
intArray = intArray+1;
}

strData = "";
strData = string.Concat("MAIL FROM: ","<" + From + ">" + "AUTH=" + From);
strData = string.Concat(strData,"\r\n");
strSendBuffer[intArray] = strData;
intArray = intArray+1;

strData = "";
strData = string.Concat("RCPT TO: ","<" + To + ">");
strData = string.Concat(strData,"\r\n");
strSendBuffer[intArray] = strData;
intArray = intArray+1;

strData = "" ;
strData = string.Concat("DATA","\r\n");
strSendBuffer[intArray] = strData ;
intArray = intArray+1;
strData = "" ;
strData = string.Concat("From: ",DisplayFromName + "<" + From + ">");
strData = string.Concat(strData,"\r\n" );
strData = string.Concat(strData,"To: " );
strData = string.Concat(strData,DisplayToName + "<" + To + ">");
strData = string.Concat(strData,"\r\n" );
strData = string.Concat(strData,"Subject: " );


strData = string.Concat(strData,Subject);
strData = string.Concat(strData,"\r\n");
strData = string.Concat(strData,"MIME-Version: 1.0" );
strData = string.Concat(strData,"\r\n");
strData = string.Concat(strData,"X-Priority: " + Priority);
strData = string.Concat(strData,"\r\n");
strData = string.Concat(strData,"X-MSMail-Priority: " + Priority);
strData = string.Concat(strData,"\r\n");
if(Html)
{
strData = string.Concat(strData,"Content-Type: text/html;" );
}
else
{
strData = string.Concat(strData,"Content-Type: text/plain;" );
}
strData = string.Concat(strData,"\r\n");
strData = string.Concat(strData,"charset=\"iso-8859-1\"" );
strData = string.Concat(strData,"\r\n");
if(Html == true)
{
strData = string.Concat(strData,"Content-Transfer-Encoding: text/html;" );
}
else
{
strData = string.Concat(strData,"Content-Transfer-Encoding: text/plain;" );
}

[解决办法]
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Mail;

namespace Email
{
public class Email
{
// private variables

private string smtpServer;

private MailMessage email;

// properties

public string To
{
set
{
this.email.To.Add(value);

}
}

public string From
{
set
{
this.email.From = new MailAddress(value);
}
}

public string Subject
{
set
{
this.email.Subject = value;
}
}

public string Cc
{
set
{
this.email.CC.Add(value);
}
}

public string Bcc
{
set
{
this.email.Bcc.Add(value);
}
}

public string Body
{
set
{
this.email.Body = value;
}
}

public string SmtpServer
{
set
{
this.smtpServer = value;
}
}

public System.Text.Encoding BodyEncoding
{
set
{
this.BodyEncoding = value;
}
}




// public methods

/// <summary>
///Default Constructor
/// </summary>
public Email()
{
this.email = new MailMessage();
}

/// <summary>
///Constructor with default values
/// </summary>
public Email(string to, string from, string cc, string bcc, string subject, string body, string smtpServer)
{
this.email = new MailMessage();

this.email.To.Add(to);
this.email.From = new MailAddress(from);
this.email.CC.Add(cc);


this.email.Bcc.Add(bcc);
this.email.Subject = subject;
this.email.Body = body;
this.smtpServer = smtpServer;
}


/// <summary>
///Sends email
/// </summary>
public void Send()
{
// sets smtp server
SmtpClient sc = new SmtpClient();

sc.Host = this.smtpServer;

// sends email
sc.Send(this.email);
}

/// <summary>
/// Send email using Smtp authentication
/// </summary>
public void Send(string username, string password)
{
SmtpClient sc = new SmtpClient();

// do not use default, use specified
sc.UseDefaultCredentials = false;

sc.Credentials = new System.Net.NetworkCredential(username, password);

sc.Host = this.smtpServer;

// sends email
sc.Send(this.email);

}

/// <summary>
///Adds attachment to email
/// </summary>
public void AddAttachment(string fileName)
{
Attachment attach = new Attachment(fileName);

this.email.Attachments.Add(attach);
}

/// <summary>
/// Sets email format to HTML
/// </summary>
public void HtmlBodyFormat()
{
email.IsBodyHtml = true;
}

/// <summary>
/// Sets encoding to UTF8
/// </summary>
public void UTF8Encoding()
{
email.BodyEncoding = System.Text.Encoding.UTF8;
}
}
}

[解决办法]
http://blog.csdn.net/Eray/archive/2007/11/29/1907531.aspx 

http://blog.csdn.net/Eray/archive/2007/11/30/1908614.aspx
[解决办法]

探讨
C# codeusing System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Net.Mail;
using System.Text;
using System.Net;

/// <summary>
///SendMail 的摘要说明…

[解决办法]
C# code
using System.Web.Util;using System.Web.Mail; public bool sendjmail()        {            jmail.Message jmail = new jmail.Message();            DateTime t = DateTime.Now;            string Subject = "from jmail.net";            string body = "你好jmail";            string FromEmail = "username@sina.com";            string ToEmail = "name@sohu.com";            jmail.Silent = true;            jmail.Logging = true;            jmail.Charset = "GB2312";            jmail.ContentType = "text/html";            jmail.AddRecipient(ToEmail, "", "");            jmail.From = FromEmail;            jmail.MailServerUserName = "username";            jmail.MailServerPassWord = "******";            jmail.Subject = Subject;            jmail.AddAttachment(@"E:\as.txt",true,null);//添加附件            bool reval;            jmail.Body = body + t.ToString();            reval = jmail.Send("smtp.sina.com", false);            jmail.Close();            return reval;//返回值为true,则发送成功,返回值为false,则发送失败        } 


[解决办法]
asp.net类库中发送邮件的方法总结
http://www.qeqoo.com/dev/donet/aspnet/814.html
[解决办法]
using System.Net.Mail; 
using System.Net.Mime; 
using System.Net; 

public static void CreateMessageWithAttachment(string server) 

// Specify the file to be attached and sent. 
// This example assumes that a file named Data.xls exists in the 
// current working directory. 
string file = @"D:\asdf.txt"; 
// Create a message and set up the recipients. 
MailMessage message = new MailMessage( 
"asdf@163.com", 
"asdf@163.com", 
"test", 
"no du"); 

// Create the file attachment for this e-mail message. 
Attachment data = new Attachment(file, MediaTypeNames.Application.Octet); 
// Add time stamp information for the file. 
ContentDisposition disposition = data.ContentDisposition; 
disposition.CreationDate = System.IO.File.GetCreationTime(file); 
disposition.ModificationDate = System.IO.File.GetLastWriteTime(file); 
disposition.ReadDate = System.IO.File.GetLastAccessTime(file); 
// Add the file attachment to this e-mail message. 
message.Attachments.Add(data); 
//Send the message. 
SmtpClient client = new SmtpClient(server); 
// Add credentials if the SMTP server requires them. 
//client.Credentials = CredentialCache.DefaultNetworkCredentials; 
client.UseDefaultCredentials = true; 
client.Credentials = new System.Net.NetworkCredential("username", "password"); 
client.Send(message); 
// Display the values in the ContentDisposition for the attachment. 
ContentDisposition cd = data.ContentDisposition; 
Console.WriteLine("Content disposition"); 
Console.WriteLine(cd.ToString()); 
Console.WriteLine("File {0}", cd.FileName); 
Console.WriteLine("Size {0}", cd.Size); 
Console.WriteLine("Creation {0}", cd.CreationDate); 
Console.WriteLine("Modification {0}", cd.ModificationDate); 
Console.WriteLine("Read {0}", cd.ReadDate); 
Console.WriteLine("Inline {0}", cd.Inline); 
Console.WriteLine("Parameters: {0}", cd.Parameters.Count); 
foreach (DictionaryEntry d in cd.Parameters) 

Console.WriteLine("{0} = {1}", d.Key, d.Value); 

data.Dispose(); 


protected void Timer1_Tick(object sender, EventArgs e) 

if (DateTime.Now.Second % 20 == 0) 

CreateMessageWithAttachment("smtp.163.com"); 

}


定时发送的代码

接收的没写过

热点排行