您的位置:首页 > 编程语言 > ASP

asp.net利用Jmail发送邮件和接收全部代码

2012-11-22 17:27 639 查看
利用Jmail发送邮件:

private void SendMailByJmail()

{

/**////建立发邮件类

jmail.MessageClass oJmailMessage = new jmail.MessageClass();

/**//// 字符集

oJmailMessage.Charset = "GB2312";

/**////附件的编码格式

oJmailMessage.Encoding = "BASE64";

oJmailMessage.ContentType = "text/html";

/**////是否将信头编码成iso-8859-1字符集

oJmailMessage.ISOEncodeHeaders = false;

/**//// 优先级

oJmailMessage.Priority = Convert.ToByte(1);

/**////发送人邮件地址

oJmailMessage.From = TxtEmail.Text.Trim();

/**////发送人姓名

oJmailMessage.FromName = TxtName.Text.Trim();

/**//// 邮件主题

oJmailMessage.Subject = txtSubject.Text.Trim();

/**////身份验证的用户名

oJmailMessage.MailServerUserName = TxtSmtpUser.Text.Trim();

/**////用户密码

oJmailMessage.MailServerPassWord = TxtSmtpPwd.Text.Trim();

/**////添加一个收件人,抄送人和密送人的添加和该方法是一样的,只是分别使用AddRecipientCC和RecipientBCC两个属性

///要是需要添加多个收件人,则重复下面的语句即可。添加多个抄送和密送人的方法一样

oJmailMessage.AddRecipient(txtReciver.Text.Trim(),"","");

if("" != upFile.PostedFile.FileName)

{

string attpath = upFile.PostedFile.FileName;

oJmailMessage.AddAttachment(@attpath,true,attpath.Substring(attpath.LastIndexOf(".")+1,3));//添加附件

}

/**////邮件内容

oJmailMessage.Body = txtContent.Text.Trim();

if(oJmailMessage.Send(TxtSmtServer.Text.Trim(),false))

{

Response.Write("发送成功!");

}

else

{

Response.Write("发送失败,请检查邮件服务器的设置!");

}

oJmailMessage = null;

}

/**////

/// 利用Jmail接收邮件

///

private void ReciveByJmail()

{

/**////建立收邮件对象

jmail.POP3Class popMail = new POP3Class();

/**////建立邮件信息接口

jmail.Message mailMessage;

/**////建立附件集接口

jmail.Attachments atts;

/**////建立附件接口

jmail.Attachment att;

try

{

popMail.Connect(TxtPopUser.Text.Trim(),TxtPopPwd.Text.Trim(),TxtPopServer.Text.Trim(),Convert.ToInt32(TxtPopPort.Text.Trim()));

/**////如果收到邮件

if(0 < popMail.Count)

{

/**////根据取到的邮件数量依次取得每封邮件

for(int i=1;i <= popMail.Count;i++)

{

/**////取得一条邮件信息

mailMessage = popMail.Messages[i];

/**////取得该邮件的附件集合

atts = mailMessage.Attachments;

/**////设置邮件的编码方式

mailMessage.Charset = "GB2312";

/**////设置邮件的附件编码方式

mailMessage.Encoding = "Base64";

/**////是否将信头编码成iso-8859-1字符集

mailMessage.ISOEncodeHeaders = false;

**////邮件的优先级

txtpriority.Text = mailMessage.Priority.ToString();

/**////邮件的发送人的信箱地址

txtSendMail.Text = mailMessage.From;

/**////邮件的发送人

txtSender.Text = mailMessage.FromName;

/**////邮件主题

txtSubject.Text = mailMessage.Subject;

/**////邮件内容

txtBody.Text = mailMessage.Body;

/**////邮件大小

txtSize.Text = mailMessage.Size.ToString();

for(int j=0;j62 {

/**////取得附件

att = atts[j];

/**////附件名称

string attname = att.Name;

/**////上传到服务器

att.SaveToFile("e://attFile//"+attname);

}

}

panMailInfo.Visible = true;

att = null;

atts = null;

}

else

{

Response.Write("没有新邮件!");

}

popMail.DeleteMessages();

popMail.Disconnect();

popMail = null;

}

catch

{

Response.Write("Warning!请检查邮件服务器的设置是否正确!");

}

}

发送邮件的代码如下:

using System;
usingSystem.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
usingSystem.Web.UI.WebControls;
using jmail;
using System.IO;
using System.Net.Mail;
using System.Net;
using System.Net.Mime;
public partial class getemail :System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void sendEmail_Click(object sender, EventArgse)
{
#region
SmtpClient smtpClient = newSmtpClient("smtp.gmail.com", 587);

smtpClient.DeliveryMethod =SmtpDeliveryMethod.Network;
smtpClient.Credentials = newNetworkCredential("likeshan168@gmail.com","likeshannihao168");
MailMessage mail = newMailMessage("likeshan168@gmail.com",emailRec.Text.Trim());
mail.Subject =subject.Text.Trim();
mail.SubjectEncoding =System.Text.Encoding.UTF8;
mail.Body =emailbody.Text.Trim();
mail.BodyEncoding =System.Text.Encoding.UTF8;
smtpClient.EnableSsl =true;
string attafile =fileUpload.PostedFile.FileName;
if(!string.IsNullOrEmpty(attafile))//这里是添加附件的作用
{
#region//方法一
//string filename =Path.GetFileName(attafile);
//fileUpload.PostedFile.SaveAs(Server.MapPath(filename));
//System.Net.Mail.Attachment atta = newSystem.Net.Mail.Attachment(Server.MapPath(filename));
//mail.Attachments.Add(atta);
#endregion
#region//方法二

//string filepath =Server.MapPath("~/UploadFile/Files");
//string extName =Path.GetExtension(attafile);
//if (!Directory.Exists(filepath))
//{
// Directory.CreateDirectory(filepath);
//}
//filepath = filepath + "\" +DateTime.Now.ToString("yyyyMMddhhMMssffff") + extName;
//fileUpload.PostedFile.SaveAs(filepath);

//System.Net.Mail.Attachment atta =null;
//if (extName == ".zip" || extName ==".rar")
//{
// atta =new System.Net.Mail.Attachment(filepath,MediaTypeNames.Application.Zip);
//}
//else
//{
// atta =new System.Net.Mail.Attachment(filepath,MediaTypeNames.Application.Octet);
//}

#endregion
#region//方法三
string filepath =Server.MapPath("~/UploadFile/Files");
string extName =Path.GetExtension(attafile);
if (!Directory.Exists(filepath))
{
Directory.CreateDirectory(filepath);
}
filepath = filepath + "\" +DateTime.Now.ToString("yyyyMMddhhMMssffff") + extName;
fileUpload.PostedFile.SaveAs(filepath);

System.Net.Mail.Attachment atta =null;
if (extName == ".zip" || extName ==".rar")
{
atta = newSystem.Net.Mail.Attachment(new FileStream(filepath, FileMode.Open,FileAccess.Read), attafile,MediaTypeNames.Application.Zip);
}
else
{
atta = newSystem.Net.Mail.Attachment(new FileStream(filepath, FileMode.Open,FileAccess.Read), attafile,MediaTypeNames.Application.Octet);
}
mail.Attachments.Add(atta);
#endregion
}
mail.Priority =MailPriority.Normal;
try
{
smtpClient.Send(mail);
ClientScript.RegisterClientScriptBlock(Page.GetType(), "tip1","alert('发送成功!')", true);
}
catch (Exceptionex)
{
ClientScript.RegisterClientScriptBlock(Page.GetType(), "tip2","alert('" + ex.Message + "!')", true);
}
#endregion
}
}

接受邮件的代码
<%@ WebHandlerLanguage="C#" Class="getEmail" %>

using System;
using System.Web;
using jmail;
using System.Text;
public class getEmail :IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
//context.Response.ContentType = "text/plain";
POP3Class popClient = newPOP3Class();
try
{
popClient.Connect("likeshan168@163.com","likeshannihao168", "pop.163.com", 110);
if (popClient != null)
{
if(popClient.Count > 0)//收件数目
{
StringBuilder sb = newStringBuilder();
Message msg =null;
for (int i = 0, len =popClient.Count; i < len; i++)
{
msg = popClient.Messages[i + 1];
string msgid = popClient.GetMessageUID(i +1);//029DCA8D131AA92586C8FB6CB61B627B0E00000000000001(邮件在服务器中的唯一标识)
int c =popClient.GetLastUnreadMessage();
msg.ISOEncodeHeaders = false;
sb.Append("<p>时间:"+ msg.Date.ToString() +"</p>");
sb.Append("<p>发件人:" + msg.From +"</p>");
string substr =msg.Headers.GetHeader("Subject");//只要有中文就会进行base64的编码,如果是英文的话,就不会进行base64的编码
if (substr.Contains("utf-8"))
{
substr =DecodeStr(substr.Split('?')[3],"utf-8");//=?utf-8?B?5pyJ5LiA5Liq5rWL6K+V?=
}
if (substr.Contains("gbk") ||substr.Contains("GBK") || substr.Contains("GB2312"))
{
substr =DecodeStr(substr.Split('?')[3], "gbk");
}

sb.Append("<p>主题:"+ substr + "</p>");
sb.Append("<p>内容:"+ msg.Body + "</p>");
int attaCount =msg.Attachments.Count;
for (int j = 0; j < attaCount;j++)
{
sb.Append("<p>附件(" + (j +1).ToString() + "):" + msg.Attachments[j].Name +"</p>");

}
}
context.Response.Write(sb.ToString());
}
}
}
catch (Exceptionex)
{
context.Response.Write(ex.Message);
}
}

public bool IsReusable
{
get
{
return false;
}
}

public static string base64GbkDecode(string data)
{
string decode ="";
byte[] bytes =Convert.FromBase64String(data);//先经过base64解码,在经过gbk2312解码
try
{
decode =Encoding.GetEncoding("gb2312").GetString(bytes);
}
catch (Exceptionex1)
{
return "Error in base64Encode" +ex1.Message;
}
return decode;
}

public static string base64Utf8Decode(string data)
{
string result ="";
try
{
System.Text.UTF8Encoding encoder = newSystem.Text.UTF8Encoding();
System.Text.Decoder utf8Decode =encoder.GetDecoder();//获取解码器
byte[] todecode_byte =Convert.FromBase64String(data);//先经过base64解码,在经过utf-8解码
int charCount =utf8Decode.GetCharCount(todecode_byte, 0,todecode_byte.Length);//多少个字符
char[] decoded_char = newchar[charCount];//字符字符数组
utf8Decode.GetChars(todecode_byte, 0,todecode_byte.Length, decoded_char, 0);//解码到字符数组
result = new String(decoded_char);
}
catch (Exceptione)
{
return "Error in base64Encode" +e.Message;
}
return result;
}

//base64解码
public static string DecodeStr(string allstr, stringcode)
{
//形如=?...?=是结束开始的标志
//=?utf-8?B?5rWL6K+V5o6l5pS25pys6YKu5Lu26L+Z5piv5Li76aKY?=
//=?gbk?B?suLK1L3TytXN4rK/08q8/tXiuPbKx9b3zOU=?=
//返回的字符串
string str = "";
if (code =="gbk")
{
str = base64GbkDecode(allstr);
}
else if (code =="utf-8")
{
str = base64Utf8Decode(allstr);
}
return str;
}
// string subjectStr =popMail.Messages[i].Headers.GetHeader("Subject");
//subjectstr = DecodeStr(subjectallstr.Split('?')[3],“utf-8”);
//再次申明下一定要用popMail.Messages[i].Headers.GetHeader(“Subject”)的形式,
//如果原来页面用的是UTF-8编码popMail.Messages[i].Subject得到的将是直接经jmail解码后的乱码
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: