C# 获取邮箱里邮件的内容

q19871117 2010-02-03 10:17:24
我想把邮箱里没未读的邮件的内容读取出来如何实现。

根据邮件的时间和标题读取只定的邮件
...全文
1720 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
llj0772 2011-08-05
  • 打赏
  • 举报
回复
怎么不完整呢?
meyaomm 2011-05-22
  • 打赏
  • 举报
回复
E6导航全面上线,欢迎大家访问:http://www.eeeeee6.com,记住了是6个e哦,我们将为您打造一个绿色的上网平台,也期待您的推荐。
女人的阳光 2011-02-25
  • 打赏
  • 举报
回复
111
readfuture 2010-02-03
  • 打赏
  • 举报
回复
友情 帮顶。
jasper 2010-02-03
  • 打赏
  • 举报
回复
用vba还是比较容易的,用c#没做过
CSDN download上搜一下VbaOutlook.chm,里面介绍了outlook的一些对象
mayonglong 2010-02-03
  • 打赏
  • 举报
回复
1楼不错啊,写这么多
Dobzhansky 2010-02-03
  • 打赏
  • 举报
回复
POP 是离线的, IMAP 支持在线

看需要和服务器支持情况选用合适的协议.
睡神在睡觉 2010-02-03
  • 打赏
  • 举报
回复
邮箱里的邮件未读和已读你自己来配置就好,在本地程序里放给配置文件已读的标记上,未读的不标记等等,自己来区分就好。

收发邮件遵循的是SMTP/POP协议,你需要做的就是按照协议来解析邮件,邮件编码一般是Base64的,读取指定邮件,可以用JMail也可以用Email做。
JMail的例子方法网上多的要死,直接baidu加Google就可以了,给你提供一个EMail的方法吧,这个是需要EMail.dll文件就可以,网上可以下的到的。

class Pop3
{
string POPServer;
string user;
string pwd;
int port;
public static string Data_ = "";

/// <summary>
/// 接收邮件服务器相关信息
/// </summary>
/// <param name="server">参数 pop邮件服务器地址 </param>
/// <param name="user">参数 登录到pop邮件服务器的用户名 </param>
/// <param name="pwd">参数 登录到pop邮件服务器的密码</param>
/// <returns>无返回</returns>
public Pop3(string server, string _user, string _pwd, int _port)
{
POPServer = server;
user = _user;
pwd = _pwd;
port = _port;
}

/// <summary>
/// 获取服务器上邮件总数
/// </summary>
/// <returns></returns>
public int GetNewMessage()
{
POP3 objPOP3 = new POP3(POPServer, user, pwd);
objPOP3.Connect();
objPOP3.Login();
objPOP3.QueryServer();
int EmailCount = objPOP3.TotalMailCount;
objPOP3.Close();
return EmailCount;
}
/// <summary>
/// 保存服务器上所有邮件
/// </summary>
/// <param name="SerName"></param>
/// <param name="UserName"></param>
/// <param name="Password"></param>
/// <returns></returns>
public DataTable main()
{
POP3 objPOP3 = new POP3(POPServer, user, pwd);
objPOP3.Connect();

objPOP3.Login();
objPOP3.QueryServer();
int EmailCount = objPOP3.TotalMailCount;
DataTable dt = new DataTable("邮件");
dt.Columns.Add("FROM");//发件人
dt.Columns.Add("TO");//收件人
dt.Columns.Add("CC");//回复
dt.Columns.Add("SUBJECT");//主题
dt.Columns.Add("DATE");//日期
dt.Columns.Add("CONTENT-TYPE");
dt.Columns.Add("CHARSET");
dt.Columns.Add("MESSAGE-ID");//邮件id
dt.Columns.Add("MESSAGE SIZE");//大小
dt.Columns.Add("EMAILOBJ");//内容
dt.Columns.Add("Attachments");//附件
dt.Columns.Add("FILEDIR");//保存目录
int sum = 0;
for (int i = 1; i <= EmailCount; i++)
{
EmailMessage objEmail = objPOP3.GetMessage(i, false); // use true to get headers only
DataRow dr = dt.NewRow();
dr[0] = objEmail.From;
dr[1] = objEmail.To;
dr[2] = objEmail.Cc;
dr[3] = objEmail.Subject;
dr[4] = objEmail.Date;
dr[5] = objEmail.ContentType;
dr[6] = objEmail.Charset;
dr[7] = objEmail.GetCustomHeader("Message-ID");
dr[8] = objEmail.Size;
dr[9] = QPDecode(objEmail.Body, System.Text.Encoding.Default);

string fj = "";
if (objEmail.IsAnyAttachments)
{
for (int a = 0; a < objEmail.Attachments.Count; a++)
{
Attachment objFile = (Attachment)objEmail.Attachments[a];
if (!objFile.IsFileAttachment)
{
if (objFile.TextBody != null)
{
sum++;
fj += sum.ToString() + ":" + objFile.FileName;
if (!System.IO.Directory.Exists(@"d:\pop3\fj"))
{
System.IO.Directory.CreateDirectory(@"d:\pop3\fj");
}
StreamWriter swfj = new StreamWriter(@"d:\pop3\fj\" + sum.ToString() + "_" + objFile.FileName);
;
swfj.Write(objFile.Data);
swfj.Close();
}
}
}
}
dr[10] = fj;
dr[11] = @"d:\pop3\m_" + i.ToString() + ".eml";
dt.Rows.Add(dr);//构建DataTable的数据
if (!System.IO.Directory.Exists(@"d:\pop3"))
{
System.IO.Directory.CreateDirectory(@"d:\pop3");
}
StreamWriter sw = new StreamWriter(@"d:\pop3\m_" + i.ToString() + ".eml");
sw.Write(objEmail.ToString());
sw.Close();
}
objPOP3.Close();
return dt;

}

public string QPDecode(string data, Encoding encoding)
{
char ch;
string ret = "";

byte[] bytes = new byte[data.Length];
int bIdex = 0;

try
{
for (int rIndex = 0; rIndex < data.Length; rIndex++)
{
ch = data[rIndex];
if (ch == '=')
{
rIndex++;
if (rIndex < data.Length && (Char.IsDigit(data[rIndex]) || Char.IsLetter(data[rIndex])))
{
bytes[bIdex++] = Byte.Parse(data.Substring(rIndex++, 2), System.Globalization.NumberStyles.HexNumber);
continue;
}
if (rIndex < data.Length && data[rIndex] == '\r' && (rIndex + 1) < data.Length && data[rIndex + 1] == '\n')
{
rIndex++;
continue;
}
}
if (ch == '\r' || ch == '\n')
continue;
bytes[bIdex++] = (byte)ch;
}
ret = encoding.GetString(bytes, 0, bIdex);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return ret;
}

/// <summary>
/// base64编码转16进制
/// </summary>
/// <param name="code">base64编码字符串</param>
/// <returns></returns>
private byte[] DecodeBase64(string code) //string code_type,
{
string st = code + "000";//
string strcode = st.Substring(0, (st.Length / 4) * 4);
byte[] bytes = Convert.FromBase64String(strcode);
return bytes;
}

//UTC时间转WINDOWS时间
public DateTime UTCToDateTime(double l)
{
DateTime dtZone = new DateTime(1970, 1, 1, 0, 0, 0);

dtZone = dtZone.AddSeconds(l);

return dtZone.ToLocalTime();
}

//WINDOWS时间转UTC时间
public double DateTimeToUTC(DateTime vDate)
{
TimeZone tz = TimeZone.CurrentTimeZone;

vDate = vDate.ToUniversalTime();

DateTime dtZone = new DateTime(1970, 1, 1, 0, 0, 0);

return vDate.Subtract(dtZone).TotalSeconds;
}
/// <summary>
/// 提取指定邮件附件内容
/// </summary>
/// <param name="MessageNum">邮件编号</param>
/// <returns></returns>
public string Attachments_to_resolve(int COUNT)
{
string back = "";
string temp = "";
try
{
int NewNum = 0;
POP3 objPOP3 = new POP3(POPServer, user, pwd);
objPOP3.Connect();
objPOP3.Login();
objPOP3.QueryServer();

int EmailCount = objPOP3.TotalMailCount;
if (COUNT <= EmailCount)
NewNum = EmailCount - COUNT;
int[] email_new = new int[NewNum];
for (int i = 1; i < NewNum + 1; i++)
{
email_new[i - 1] = COUNT + i;
}

EmailMessage objEmail;
for (int cnt = 1; cnt < email_new.Length + 1; cnt++)
{
back = "";
objEmail = objPOP3.GetMessage(email_new[cnt - 1], false);
string body = objEmail.Body.ToString();
int i = body.IndexOf("base64\r\n\r\n");
if (i > 0)
{
body = body.Substring(i + 10, 16);
//编码邮件内容
byte[] body_ = DecodeBase64(body);
//你要做的操作
}
objPOP3.Close();
string tmp_time = DateTime.Now.ToString();
if (NewNum != 0)
back = "成功!本次共解析" + NewNum.ToString() + "封邮件于" + tmp_time + "。\r\n" + temp;
else
back = "本次查询于" + tmp_time + " 未找到新邮件!\r\n";
E_Mail.COUNT = EmailCount;
}
catch { back = "失败!\r\n"; }

return back;
}
}

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧