Пример #1
0
        private string FindPlainTextInMessage(Message message)
        {
            OpenPop.Mime.Header.MessageHeader msgheader = message.Headers;
            string sender        = msgheader.From.Address;
            string LinkExtracted = "";

            if (sender == cSender)
            {
                List <MessagePart> list = message.FindAllTextVersions();
                string             str  = "";
                foreach (MessagePart part in list)
                {
                    if (part != null)
                    {
                        try
                        {
                            //string pattern = @"http://www.gutefrage.net/registrierungsbestaetigung.*(?=\042)";  linkpattern
                            //part.Save(new FileInfo("temp"));
                            //string str2 = File.ReadAllText("temp");
                            string str2       = part.GetBodyAsText();
                            int    startIndex = 0;
                            int    num2       = 0;
                            startIndex = str2.IndexOf(linkpattern, startIndex);
                            while (startIndex != -1)
                            {
                                startIndex = startIndex + ShiftBy;
                                char[] anyOf = new char[] { ' ', '"', '>', '<', '\r', '\n', '\\', ')' };
                                num2 = str2.IndexOfAny(anyOf, startIndex);
                                string str3 = str2.Substring(startIndex, num2 - startIndex);
                                if (str == str3)
                                {
                                    startIndex = str2.IndexOf(linkpattern, num2);
                                }
                                else
                                {
                                    // File.AppendAllText("links.txt", str3 + "\r\n");
                                    LinkExtracted = str3;
                                    str           = str3;
                                    startIndex    = str2.IndexOf(linkpattern, num2);
                                }
                            }
                            return(LinkExtracted);
                        }
                        catch (Exception)
                        {
                            // Console.WriteLine("Pizdets!");
                            return(null);
                        }
                    }
                }
            }
            if (LinkExtracted != "")
            {
                return(LinkExtracted);
            }
            else
            {
                return(null);
            }
        }
Пример #2
0
        /// <summary>
        /// 获取某个编号的那封邮件,返回EmailInfo对象
        /// </summary>
        /// <param name="no"></param>
        /// <returns></returns>
        private EmailInfo getEmailInfo(int no)
        {
            OpenPop.Mime.Header.MessageHeader head = emailClient.GetMessageHeaders(no);
            //OpenPop.Mime.Message message = emailClient.GetMessage(no);
            EmailInfo emailinfo = new EmailInfo();

            emailinfo.From = head.From.Raw;
            foreach (var toAdd in head.To)
            {
                emailinfo.To += toAdd.Raw + ",";
            }
            foreach (var ccAdd in head.Cc)
            {
                emailinfo.Cc += ccAdd.Raw + ",";
            }
            emailinfo.Subject = head.Subject;
            emailinfo.Date    = head.DateSent.ToString();
            emailinfo.no      = no;

            string content = "";
            int    size    = emailClient.GetMessageSize(no);

            if (size > 10 * 1024 * 1024)
            {
                emailinfo.Content = "****邮件过大,无法获取。请到邮箱中查看此邮件!****";
            }
            else
            {
                OpenPop.Mime.Message message = emailClient.GetMessage(no);
                if (message.MessagePart.IsText)
                {
                    content = message.MessagePart.GetBodyAsText();
                }
                else if (message.MessagePart.IsMultiPart)
                {
                    MessagePart plainTextPart = message.FindFirstPlainTextVersion();
                    if (plainTextPart != null)
                    {
                        // The message had a text/plain version - show that one
                        content = plainTextPart.GetBodyAsText();
                    }
                    else
                    {
                        // Try to find a body to show in some of the other text versions
                        //List<MessagePart> textVersions = message.FindAllTextVersions();
                        //if (textVersions.Count >= 1)
                        //    content = textVersions[0].GetBodyAsText();
                        //else
                        //    content = "";
                    }
                }
                emailinfo.Content = content;
            }
            return(emailinfo);
        }
Пример #3
0
        private void Read_Emails()
        {
            Pop3Client pop3Client;

            pop3Client = new Pop3Client();
            pop3Client.Connect("pop.asia.secureserver.net", 995, true);

            pop3Client.Authenticate("*****@*****.**", "Titlereport247", AuthenticationMethod.UsernameAndPassword);

            int       count      = pop3Client.GetMessageCount();
            DataTable dtMessages = new DataTable();

            dtMessages.Columns.Add("MessageNumber");
            dtMessages.Columns.Add("TO");
            dtMessages.Columns.Add("From");
            dtMessages.Columns.Add("Subject");
            dtMessages.Columns.Add("DateSent");



            int counter = 0;

            for (int i = count; i >= 1; i--)
            {
                OpenPop.Mime.Header.MessageHeader msgheader = pop3Client.GetMessageHeaders(i);

                string From = msgheader.From.ToString();
                if (From == "*****@*****.**")
                {
                    string subject = msgheader.Subject.ToString();
                    if (From == "Mail Delivery System")
                    {
                        //message = pop3Client.GetMessage(i);
                    }
                    else
                    {
                        // OpenPop.Mime.Message message = pop3Client.GetMessage(i);
                        dtMessages.Rows.Add();
                        dtMessages.Rows[dtMessages.Rows.Count - 1]["MessageNumber"] = i;

                        dtMessages.Rows[dtMessages.Rows.Count - 1]["From"]     = msgheader.From.DisplayName;
                        dtMessages.Rows[dtMessages.Rows.Count - 1]["Subject"]  = msgheader.Subject;
                        dtMessages.Rows[dtMessages.Rows.Count - 1]["DateSent"] = msgheader.DateSent;

                        counter++;
                        if (counter > 1)
                        {
                            break;
                        }
                    }
                }
            }
            dataGridView1.DataSource = dtMessages;
        }
Пример #4
0
        private Int32 BuscarIdPorFecha(int Inicio, int Fin, OpenPop.Pop3.Pop3Client POP3, DateTime Fecha)
        {
            if (Inicio >= Fin)
            {
                return(Inicio);
            }
            Int32 Medio = (Inicio + Fin) / 2;

            OpenPop.Mime.Header.MessageHeader mh = POP3.GetMessageHeaders(Medio);
            if (mh.DateSent.ToLocalTime() <= Fecha)
            {
                return(BuscarIdPorFecha(Medio + 1, Fin, POP3, Fecha));
            }
            else
            {
                return(BuscarIdPorFecha(Inicio, Medio - 1, POP3, Fecha));
            }
        }
Пример #5
0
 /// <summary>
 /// 获取某个编号的邮件的日期
 /// </summary>
 /// <param name="no"></param>
 /// <returns></returns>
 private DateTime getEmailDate(int no)
 {
     OpenPop.Mime.Header.MessageHeader head = emailClient.GetMessageHeaders(no);
     return(head.DateSent);
 }
Пример #6
0
        private void LeerCorreo(object IdOperador)
        {
            Int32 idProcesoPersonal = idProceso;

            try
            {
                Int32 idOperador = (int)IdOperador;
                using (CobranzasDataContext db = new CobranzasDataContext())
                {
                    List <Entidades.CorreosFiltros> Filtros = db.CorreosFiltros./*Where(x => x.idOperador == idOperador).*/ ToList();

                    String Ruta             = Parametro("RutaCorreos", db);
                    Entidades.Operadores op = db.Operadores.Single(x => x.idOperador == idOperador);
                    Log("Leyendo: " + op.Nombre, idProcesoPersonal, idOperador);
                    String Servidor = (op.POP3Host ?? Parametro("POP3Host", db));
                    if (Servidor == null)
                    {
                        Log("Saltando, por no tener definido un servidor", idProcesoPersonal, idOperador);
                        return;
                    }
                    Int32   Puerto   = (op.POP3Port ?? Convert.ToInt32(Parametro("POP3Port", db)));
                    Boolean SSL      = op.POP3SSL ?? (Parametro("POP3SSL", db) == "1");
                    String  Usuario  = op.POP3Login;
                    String  Password = op.POP3Password;
                    if (op.POP3Password == null)
                    {
                        Log("Saltando, por no tener contraseña", idProcesoPersonal, idOperador);
                        return;
                    }
                    DateTime?UltimaFecha = op.UltimaFechaCorreoEntrante;
                    using (OpenPop.Pop3.Pop3Client POP3 = new OpenPop.Pop3.Pop3Client())//Iniciando el servidor POP3;
                    {
                        POP3.Connect(Servidor, Puerto, SSL);
                        POP3.Authenticate(Usuario, Password);
                        int Count = POP3.GetMessageCount();

                        Int32 Inicio = Count;
                        while (true)
                        {
                            OpenPop.Mime.Header.MessageHeader mh = POP3.GetMessageHeaders(Inicio);
                            if (db.Correos.Any(x => x.idOperador == idOperador && x.IdPop3 == mh.MessageId))
                            {
                                break;
                            }
                            Inicio--;
                            if (Inicio == 0)
                            {
                                break;
                            }
                        }
                        Inicio++;
                        //Inicio = UltimaFecha == null ? 1 : BuscarIdPorFecha(1, Count, POP3, UltimaFecha.Value);
                        //Inicio -= 4;
                        //if (Inicio < 1) Inicio = 1;


                        Log(op.Login + " Inicio:" + Inicio + ", Total:" + Count, idProcesoPersonal, idOperador);
                        Int32 ErroresSeguidos = 0;
                        if (Inicio > Count)
                        {
                            Log("No hay correos nuevos para: " + op.Login, idProcesoPersonal, idOperador);
                        }
                        for (int i = Inicio; i <= Count; i++)//últimos 5 correos para verificar.
                        {
                            if (ErroresSeguidos == 5)
                            {
                                Log("Abortando Lectura de " + op.Login + " Por 5 erorres consecutivos", idProcesoPersonal, idOperador);
                                break;
                            }
                            try
                            {
                                OpenPop.Mime.Header.MessageHeader mh = POP3.GetMessageHeaders(i);

                                /*if (UltimaFecha != null && mh.DateSent.ToLocalTime() <= UltimaFecha)
                                 * {
                                 *  Log("Saltando Mensaje", idProcesoPersonal, i);
                                 *  continue;
                                 * }*/
                                if (db.Correos.Any(x => x.idOperador == idOperador && x.IdPop3 == mh.MessageId))
                                {
                                    Log("Saltando Mensaje de " + op.Login + " " + i.ToString() + "/" + Count.ToString(), idProcesoPersonal, idOperador);
                                    continue;
                                }
                                Log("Leyendo Mensaje de " + op.Login + " " + i.ToString() + "/" + Count.ToString(), idProcesoPersonal, idOperador);

                                OpenPop.Mime.Message m = POP3.GetMessage(i);
                                UltimaFecha = mh.DateSent.ToLocalTime();
                                String idLimpio      = Limpiar(mh.MessageId);
                                String Directorio    = UltimaFecha.Value.ToString("yyyyMMdd") + "\\";
                                String Prefijo       = UltimaFecha.Value.ToString("mmss") + "_";
                                String RutaCompleta  = Ruta + Directorio + Prefijo + idLimpio + ".eml";
                                Int32  idCorreoNuevo = 0;
                                if (!File.Exists(RutaCompleta))
                                {
                                    Directory.CreateDirectory(Ruta + Directorio);
                                    m.Save(new FileInfo(RutaCompleta));
                                }
                                Entidades.Correos Correo = new Entidades.Correos();
                                Correo.IdPop3                   = mh.MessageId;
                                Correo.idOperador               = idOperador;
                                Correo.Asunto                   = Limitar(mh.Subject, 2000);
                                Correo.Remitente                = Limitar(mh.From.Raw, 500);
                                Correo.FechaCreacion            = mh.DateSent.ToLocalTime();
                                Correo.Destinatarios            = Limitar(String.Join(",", mh.To.Select(x => x.Raw)), 5000);
                                Correo.DestinatariosCopia       = Limitar(String.Join(",", mh.Cc.Select(x => x.Raw)), 5000);
                                Correo.DestinatariosCopiaOculta = Limitar(String.Join(",", mh.Bcc.Select(x => x.Raw)), 5000);
                                Correo.RutaEml                  = Directorio + Prefijo + idLimpio;
                                var Personas = Filtros.Where(x => mh.From.Address.ToLower() == x.De.ToLower()).Select(x => x.idPersona);
                                foreach (int idPersona in Personas)
                                {
                                    Correo.Correos_Personas.Add(new Entidades.Correos_Personas()
                                    {
                                        idPersona = idPersona
                                    });
                                }
                                db.Correos.InsertOnSubmit(Correo);
                                Correo.Fecha = DateTime.Now;
                                db.SubmitChanges();
                                idCorreoNuevo = Correo.idCorreo;

                                db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, op);
                                op.UltimaFechaCorreoEntrante = UltimaFecha;
                                db.SubmitChanges();
                                Log("Leido Mensaje de " + op.Login + " " + i.ToString() + "/" + Count.ToString() + "#" + idCorreoNuevo, idProcesoPersonal, idOperador);
                                ErroresSeguidos = 0;
                            }
                            catch (OpenPop.Pop3.Exceptions.InvalidLoginException Ex)
                            {
                                ErroresSeguidos++;
                                Log("Error en Mensaje: IL Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador);
                            }
                            catch (OpenPop.Pop3.Exceptions.InvalidUseException Ex)
                            {
                                ErroresSeguidos++;
                                Log("Error en Mensaje: IU Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador);
                            }
                            catch (OpenPop.Pop3.Exceptions.LoginDelayException Ex)
                            {
                                ErroresSeguidos++;
                                Log("Error en Mensaje: LD Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador);
                            }
                            catch (OpenPop.Pop3.Exceptions.PopServerException Ex)
                            {
                                ErroresSeguidos++;
                                Log("Error en Mensaje: PS Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador);
                            }
                            catch (OpenPop.Pop3.Exceptions.PopServerLockedException Ex)
                            {
                                ErroresSeguidos++;
                                Log("Error en Mensaje: PSL Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador);
                            }
                            catch (OpenPop.Pop3.Exceptions.PopServerNotAvailableException Ex)
                            {
                                ErroresSeguidos++;
                                Log("Error en Mensaje: PSNA Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador);
                            }
                            catch (OpenPop.Pop3.Exceptions.PopServerNotFoundException Ex)
                            {
                                ErroresSeguidos++;
                                Log("Error en Mensaje: SNF Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador);
                            }
                            catch (OpenPop.Pop3.Exceptions.PopClientException Ex)
                            {
                                ErroresSeguidos++;
                                Log("Error en Mensaje: PC Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador);
                            }
                            catch (Exception Ex)
                            {
                                ErroresSeguidos++;
                                Log("Error en Mensaje: Op: " + op.Login + "(" + i.ToString() + "/" + Count.ToString() + "), Mensaje:" + Ex.Message, idProcesoPersonal, idOperador);
                            }
                        }
                        POP3.Disconnect();
                    }
                    Log("Fin Lectura: " + op.Nombre, idProcesoPersonal, idOperador);
                }
            }
            catch (Exception Ex)
            {
                if (Ex.Message == "Server did not accept user credentials")
                {
                    try
                    {
                        using (CobranzasDataContext db = new CobranzasDataContext())
                        {
                            db.Operadores.Single(x => x.idOperador == (Int32)IdOperador).POP3Password = null;
                            db.SubmitChanges();
                            db.Avisos.InsertOnSubmit(new Entidades.Avisos
                            {
                                Aviso          = "El servidor ha rechazado su contraseña, por favor actualice su contraseña de correo nuevamente",
                                FechaAviso     = DateTime.Now.AddMinutes(2),
                                FechaCrea      = DateTime.Now,
                                FechaOriginal  = DateTime.Now.AddMinutes(2),
                                idOperador     = (Int32)IdOperador,
                                idOperadorCrea = 1,
                                VecesMostrada  = 0
                            });
                            db.SubmitChanges();
                        }
                    }
                    catch { }
                }
                Log("Error General: Op:" + IdOperador + ", Mensaje:" + Ex.Message, idProcesoPersonal, (int)IdOperador);
            }
        }