本人使用Jmail4.4收邮件,现在发现收的邮件邮件内容有部分是乱码,本人是将邮件以.eml格式写到本地硬盘保存的,用的时候再去读,由于本人是在外贸公司上班,所以公司的邮件会有很多国家发来的,比如日本,美国,西班牙,法国这些等。现在发现收到的日文的邮件邮件内容有部分乱码不知怎么解决?望高手指教,下面贴出部分代码,收字符个数的限制
public void TaskProc1(Object stateInfo)
{
EmailServer emailServer = stateInfo as EmailServer;
jmail.POP3 jpop = new jmail.POP3();
jmail.Message Msg = new jmail.Message();
Mail mail = new Mail();
try
{
if (emailServer.Pop3EmailAccount.ToString() != "" && emailServer.Pop3EmaillPwd.ToString() != "")
{
//解密邮箱密码
string Pwd = DESDecrypt(emailServer.Pop3EmaillPwd, EncryptKey);
//连接POP服务器
jpop.Connect(emailServer.Pop3EmailAccount.ToString(), Pwd, emailServer.Pop3Address.ToString(), Int32.Parse(emailServer.Pop3Port.ToString()));
//如果服务器上有邮件
if (jpop.Count >= 1)
{
for (int i = 1; i <= jpop.Count; i++)
{
//取得服务器上邮件的唯一标识ID,判断该邮件是否已经接收,如果本地有这个ID,则认为是已收,则不再下载该邮件,如果本地没有该邮件ID,则下载该邮件
mail.EmailID = jpop.GetMessageUID(i);
IList<string> l = MailManager.GetMailByAddressee(emailServer.EmailName);
if (l != null)
{
if (!l.Contains(mail.EmailID))
{
Msg = jpop.Messages[i];
//将这封新邮件的信息保存到数据库++++
if (Msg != null)
{
///设置邮件的编码方式
Msg.Charset = "GB2312";
Msg.ContentTransferEncoding = "base64";
///设置邮件的附件编码方式
Msg.Encoding = "base64";
Msg.ContentType = "text/html";
///是否将信头编码成iso-8859-1字符集
Msg.ISOEncodeHeaders = false;
mail.MailBoxID = emailServer.ID;
mail.Addressee = emailServer.EmailName;
mail.SentTime = Msg.Date.ToString();
Mail m = new Mail();
m = MailManager.AddMail(mail);
if (m != null)
{
///创建根目录文件夹
string MailDB = "E:\\" + "MailDB" + "\\";
if (!Directory.Exists(MailDB))
{
Directory.CreateDirectory(MailDB);
if (!Directory.Exists(MailDB))
return; //如果创建失败则返回
}
///创建所属邮箱文件夹
string EmailName = MailDB + emailServer.Pop3EmailAccount.ToString() + "\\";
if (!Directory.Exists(EmailName))
{
Directory.CreateDirectory(EmailName);
if (!Directory.Exists(EmailName))
return; //如果创建失败则返回
}
///创建收邮件文件夹
string IncomingMail = EmailName + "IncomingMail" + "\\";
if (!Directory.Exists(IncomingMail))
{
Directory.CreateDirectory(IncomingMail);
if (!Directory.Exists(IncomingMail))
return; //如果创建失败则返回
}
///创建年文件夹
string Year = IncomingMail + System.DateTime.Now.ToString("yyyy");
if (!Directory.Exists(Year))
{
Directory.CreateDirectory(Year);
if (!Directory.Exists(Year))
return; //如果创建失败则返回
}
///创建月文件夹
string Month = Year + "\\" + System.DateTime.Now.ToString("MM");
if (!Directory.Exists(Month))
{
Directory.CreateDirectory(Month);
if (!Directory.Exists(Month))
return; //如果创建失败则返回
}
///创建日文件夹
string Day = Month + "\\" + System.DateTime.Now.ToString("dd") + "\\";
if (!Directory.Exists(Day))
{
Directory.CreateDirectory(Day);
if (!Directory.Exists(Day))
return; //如果创建失败则返回
}
//System.Text.Encoding.Default
string Path = Day + m.ID + ".eml";
using (StreamWriter sr = new StreamWriter(Path, false, Encoding.GetEncoding("GB2312")))
{
sr.WriteLine(Msg.Text);
}
Msg.Clear();
Msg.Close();
if (!MailManager.UpdateMessageContentUrlByID(m.ID, Path))
{
return;
} jpop.Messages[i].Close();
jpop.Messages[i].Clear();
CDO.Message message = new CDO.Message();
message = EmailBody(Path);
mail = new Mail();
mail.Theme = message.Subject;
mail.From = message.From;
mail.ID = m.ID;
if (!MailManager.UpdateEmailByID(mail))
{
return;
}
}
}
}
这就是代码了,这里是将收到的邮件以.eml格式保存在本地硬盘,需要用的时候在通过方法去读取,保存在本地的邮件用OutLook打开也有部分乱码不知怎么解决,望高手指教
public void TaskProc1(Object stateInfo)
{
EmailServer emailServer = stateInfo as EmailServer;
jmail.POP3 jpop = new jmail.POP3();
jmail.Message Msg = new jmail.Message();
Mail mail = new Mail();
try
{
if (emailServer.Pop3EmailAccount.ToString() != "" && emailServer.Pop3EmaillPwd.ToString() != "")
{
//解密邮箱密码
string Pwd = DESDecrypt(emailServer.Pop3EmaillPwd, EncryptKey);
//连接POP服务器
jpop.Connect(emailServer.Pop3EmailAccount.ToString(), Pwd, emailServer.Pop3Address.ToString(), Int32.Parse(emailServer.Pop3Port.ToString()));
//如果服务器上有邮件
if (jpop.Count >= 1)
{
for (int i = 1; i <= jpop.Count; i++)
{
//取得服务器上邮件的唯一标识ID,判断该邮件是否已经接收,如果本地有这个ID,则认为是已收,则不再下载该邮件,如果本地没有该邮件ID,则下载该邮件
mail.EmailID = jpop.GetMessageUID(i);
IList<string> l = MailManager.GetMailByAddressee(emailServer.EmailName);
if (l != null)
{
if (!l.Contains(mail.EmailID))
{
Msg = jpop.Messages[i];
//将这封新邮件的信息保存到数据库++++
if (Msg != null)
{
///设置邮件的编码方式
Msg.Charset = "GB2312";
Msg.ContentTransferEncoding = "base64";
///设置邮件的附件编码方式
Msg.Encoding = "base64";
Msg.ContentType = "text/html";
///是否将信头编码成iso-8859-1字符集
Msg.ISOEncodeHeaders = false;
mail.MailBoxID = emailServer.ID;
mail.Addressee = emailServer.EmailName;
mail.SentTime = Msg.Date.ToString();
Mail m = new Mail();
m = MailManager.AddMail(mail);
if (m != null)
{
///创建根目录文件夹
string MailDB = "E:\\" + "MailDB" + "\\";
if (!Directory.Exists(MailDB))
{
Directory.CreateDirectory(MailDB);
if (!Directory.Exists(MailDB))
return; //如果创建失败则返回
}
///创建所属邮箱文件夹
string EmailName = MailDB + emailServer.Pop3EmailAccount.ToString() + "\\";
if (!Directory.Exists(EmailName))
{
Directory.CreateDirectory(EmailName);
if (!Directory.Exists(EmailName))
return; //如果创建失败则返回
}
///创建收邮件文件夹
string IncomingMail = EmailName + "IncomingMail" + "\\";
if (!Directory.Exists(IncomingMail))
{
Directory.CreateDirectory(IncomingMail);
if (!Directory.Exists(IncomingMail))
return; //如果创建失败则返回
}
///创建年文件夹
string Year = IncomingMail + System.DateTime.Now.ToString("yyyy");
if (!Directory.Exists(Year))
{
Directory.CreateDirectory(Year);
if (!Directory.Exists(Year))
return; //如果创建失败则返回
}
///创建月文件夹
string Month = Year + "\\" + System.DateTime.Now.ToString("MM");
if (!Directory.Exists(Month))
{
Directory.CreateDirectory(Month);
if (!Directory.Exists(Month))
return; //如果创建失败则返回
}
///创建日文件夹
string Day = Month + "\\" + System.DateTime.Now.ToString("dd") + "\\";
if (!Directory.Exists(Day))
{
Directory.CreateDirectory(Day);
if (!Directory.Exists(Day))
return; //如果创建失败则返回
}
//System.Text.Encoding.Default
string Path = Day + m.ID + ".eml";
using (StreamWriter sr = new StreamWriter(Path, false, Encoding.GetEncoding("GB2312")))
{
sr.WriteLine(Msg.Text);
}
Msg.Clear();
Msg.Close();
if (!MailManager.UpdateMessageContentUrlByID(m.ID, Path))
{
return;
} jpop.Messages[i].Close();
jpop.Messages[i].Clear();
CDO.Message message = new CDO.Message();
message = EmailBody(Path);
mail = new Mail();
mail.Theme = message.Subject;
mail.From = message.From;
mail.ID = m.ID;
if (!MailManager.UpdateEmailByID(mail))
{
return;
}
}
}
}
这就是代码了,这里是将收到的邮件以.eml格式保存在本地硬盘,需要用的时候在通过方法去读取,保存在本地的邮件用OutLook打开也有部分乱码不知怎么解决,望高手指教
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货