天天看點

用jmail收郵件:

用jmail收郵件:

jmail.Message Msg=new jmail.Message();

            jmail.POP3 jpop = new jmail.POP3();

            jmail.Attachments atts;

            jmail.Attachment att;

            //username為使用者名,該方法通過使用者名擷取該使用者的pop設定,即使用者的POP使用者名,密碼,POP伺服器位址以及端口号這四個參數,這四個參數是連接配接POP伺服器的必用參數.

                SqlDataReader dataReader = this.ExtGetSetting(Username);

                if(dataReader.Read())

                {

                    if(dataReader["PopServer"].ToString()!=""&&dataReader["PopUsername"].ToString()!="")

                    {

                        //連接配接POP伺服器

                        jpop.Connect(dataReader["PopUsername"].ToString(),dataReader["PopPassword"].ToString(),dataReader["PopServer"].ToString(),Int32.Parse(dataReader["PopPort"].ToString()));

                        //如果伺服器上有郵件

                        if(jpop.Count> =1)

                        {

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

                            {

                                Msg = jpop.Messages[i];

                                atts=Msg.Attachments;

                             //取資料庫中郵件資訊中的最大發送時間,即最近接收到的一封郵件的時間

                                Database dbase=new Database();

                                DataTable data=dbase.GetDataTable("select max(MailSendDate) as MailSenderDate from TabMailList where MailTypeFlag='1'");

                             //對伺服器上的郵件的發送時間和資料庫最近一封郵件的時間進行比較,如果大那麼證明該郵件還未被收取,是一封新郵件,這樣避免重複收取郵件入庫

                                if(Msg.Date> Convert.ToDateTime(data.Rows[0][0].ToString()))

                                {

                                    //将這封新郵件的資訊儲存到資料庫

                                    this.SaveExtMail(Msg,Username,dataReader["Email"].ToString(),jpop.GetMessageUID(i));

                                    //擷取附件上傳到伺服器并且将資訊存入資料庫

                                    if(atts.Count> =1)

                                    {

                                        for(int k=0;k <atts.Count;k++)

                                        {

                                            att=atts[k];//獲得附件

                                            string attname=att.Name;

                                            try

                                            {

                                                Random TempNameInt    = new Random(); 

                                                string NewMailDirName  = TempNameInt.Next(100000000).ToString();

                                                Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath(".")+"//AttachFiles//"+Username+"//"+NewMailDirName);

                                                string mailPath="//AttachFiles//"+Username+"//"+NewMailDirName+"//"+attname;

                                                att.SaveToFile(System.Web.HttpContext.Current.Server.MapPath(".")+mailPath); 

                                                //擷取該封郵件在資料庫的ID,以便和附件資訊相對應,取郵件表中的最大ID即可 

                                                int mailID=this.GetMailID();

                                               //将附件資訊存入資料庫

                                                this.AttExtSend(mailID,attname,att.Size,mailPath,Msg.From);

                                            }

                                            catch(Exception ex)

                                            {

                                                throw new Exception(ex.Message);

                                            }

                                        }

                                    }                                        

                                }                            

                            }                        

                        }    

                        //删除伺服器上的郵件

                        //jpop.DeleteMessages();

                        //斷開連接配接    

                        jpop.Disconnect();

                    }

            }

        }

郵件資訊入庫:

         public string SaveExtMail(jmail.Message JMsg, string Username, string Email)

        {

            Database data = new Database();

            string MailID = null;

            SqlParameter[] prams = {

   data.MakeInParam("@MailFolderType",  SqlDbType.Int, 20, 1),//?

   data.MakeInParam("@MailReceiverStr",  SqlDbType.VarChar, 300, Username),//!

   data.MakeInParam("@MailSendDate",  SqlDbType.DateTime, 20, DateTime.Parse(JMsg.Date.ToString())),//發送時間

   data.MakeInParam("@MailSendLevel",  SqlDbType.SmallInt,20, 1),//!

   data.MakeInParam("@MailSender",  SqlDbType.NVarChar, 100, JMsg.From.ToString()),//發送者位址

   data.MakeInParam("@MailReceiver",  SqlDbType.NVarChar, 100, Username),//接受者

   data.MakeInParam("@MailSubject",  SqlDbType.NVarChar, 150,subject),//郵件主題

   data.MakeInParam("@MailBody",  SqlDbType.Text , 300000,  ( JMsg.BodyText==null?"": body )),//郵件内容

   data.MakeInParam("@MailCcToAddr",  SqlDbType.NVarChar, 300,""),//?

   data.MakeInParam("@MailBccToAddr",  SqlDbType.NVarChar, 300, ""),//?

   data.MakeInParam("@MailReadFlag",  SqlDbType.Bit, 1, 0),

   data.MakeInParam("@MailTypeFlag",  SqlDbType.Bit, 1,1),//?

   data.MakeInParam("@MailClassID",  SqlDbType.Int, 1, 0),

   data.MakeInParam("@MailImportance",  SqlDbType.Int, 1, Convert.ToInt32(JMsg.Priority)),//優先級

   data.MakeOutParam("@MailID", SqlDbType.Int,20) //?

   };

            try

            {

                data.RunProc("SP_MailSend", prams);

                MailID = prams[14].Value.ToString();

                if (MailID == string.Empty)

                    return null;

                else

                    return MailID;

            }

            catch (Exception ex)

            {

                Error.Log(ex.ToString());

              }

        }