我想把邮箱里没未读的邮件的内容读取出来如何实现。根据邮件的时间和标题读取只定的邮件

解决方案 »

  1.   

    邮箱里的邮件未读和已读你自己来配置就好,在本地程序里放给配置文件已读的标记上,未读的不标记等等,自己来区分就好。收发邮件遵循的是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;
         }
    }
      

  2.   

    POP 是离线的, IMAP 支持在线看需要和服务器支持情况选用合适的协议.
      

  3.   

    用vba还是比较容易的,用c#没做过
    CSDN download上搜一下VbaOutlook.chm,里面介绍了outlook的一些对象
      

  4.   

    E6导航全面上线,欢迎大家访问:http://www.eeeeee6.com,记住了是6个e哦,我们将为您打造一个绿色的上网平台,也期待您的推荐。