Exemple #1
0
        static void testEmailPop()
        {
            string _popServer;
            int    _popPort;
            bool   _popSSL;

            string _popUser;
            string _popPassword;

            _popServer = ConfigurationManager.AppSettings["PopServer"];
            _popPort   = int.Parse(ConfigurationManager.AppSettings["PopPort"]);
            _popSSL    = bool.Parse(ConfigurationManager.AppSettings["PopSSL"]);

            _popUser     = ConfigurationManager.AppSettings["PopUser"];
            _popPassword = ConfigurationManager.AppSettings["PopPassword"];

            try {
                using (var popClient = new OpenPop.Pop3.Pop3Client()) {
                    popClient.Connect(_popServer, _popPort, _popSSL);
                    popClient.Authenticate(_popUser, _popPassword);

                    Console.WriteLine("SUCCESS (pop client)");

                    popClient.Disconnect();
                }
            } catch (Exception e) {
                Console.WriteLine("FAIL (pop client)");
                Console.WriteLine(e.ToString());
            }
        }
Exemple #2
0
 public void Disconnect()
 {
     if (client.Connected)
     {
         client.Disconnect();
     }
 }
Exemple #3
0
 public void Disconnect()
 {
     if (_popClient != null)
     {
         _popClient.Disconnect();
         _popClient = null;
     }
 }
Exemple #4
0
        internal void get()
        {
            client.Connect("pop.gmail.com", 995, true);                      // Connects to the pop3 server for gmail
            client.Authenticate("*****@*****.**", "Max1Oreo2"); // Login Credentials



            var count = client.GetMessageCount();                                     // gets the message count

            OpenPop.Mime.Message     message   = client.GetMessage(count);            // Gets the message that correlates with the count variable- in this case 0
            OpenPop.Mime.MessagePart plainText = message.FindFirstPlainTextVersion(); // Gets the first messsages body
            builder.Append(plainText.GetBodyAsText());                                //Puts the email's text into a StringBuilder where it can be outputed
            Console.WriteLine(builder.ToString());                                    //Outputs the email to the console
            builder.Clear();                                                          //Clears the String Builder
            client.Disconnect();                                                      // Disconnects from the Pop3 Client
        }
Exemple #5
0
        public IEnumerable <MailDto> ReceiveAsync(params string[] identifiers)
        {
            using (var client = new OpenPop.Pop3.Pop3Client())
            {
                client.Connect(this.Host, this.Port, this.EnableSsl);
                client.Authenticate(this.Email, this.Password.Decrypt());

                var uids = client.GetMessageUids();
                for (var i = 1; i <= uids.Count; i++)
                {
                    var uid = uids[i - 1];
                    if (!identifiers.Contains(uid))
                    {
                        var message = client.GetMessage(i);
                        yield return(this.CreateMail(message, uid));
                    }
                }

                client.Disconnect();
            }
        }
Exemple #6
0
        private static void CleanUpInbox()
        {
            OpenPop.Pop3.Pop3Client p3 = new OpenPop.Pop3.Pop3Client();
            int iPort = 110;

            iPort = 995;
            bool bSSL = false;

            bSSL = true;
            string sPopHost = Saved.Code.Common.GetBMSConfigurationKeyValue("outlookhost");
            string sPopUser = Saved.Code.Common.GetBMSConfigurationKeyValue("smtppopuser");
            string sPopPass = Saved.Code.Common.GetBMSConfigurationKeyValue("smtppoppassword");

            p3.Connect(sPopHost, iPort, bSSL, 7000, 7000, null);
            p3.Authenticate(sPopUser, sPopPass);
            int iCount = p3.GetMessageCount();
            int i      = 0;

            for (i = iCount; i > 0; i--)
            {
                try
                {
                    MessageHeader            h         = p3.GetMessageHeaders(i);
                    Message                  m         = p3.GetMessage(i);
                    OpenPop.Mime.MessagePart plainText = m.FindFirstPlainTextVersion();
                    OpenPop.Mime.MessagePart htmlPart  = m.FindFirstHtmlVersion();
                    string body     = "";
                    string myto     = m.Headers.Subject;
                    string mysentto = "";

                    if (myto != null)
                    {
                        string[] vTo = myto.Split(new string[] { "-" }, StringSplitOptions.None);
                        if (vTo.Length > 1)
                        {
                            mysentto = vTo[1].Trim();
                        }
                    }


                    if (plainText != null)
                    {
                        body += plainText.GetBodyAsText();
                    }
                    if (htmlPart != null)
                    {
                        body += htmlPart.GetBodyAsText();
                    }
                    bool fTotaled = false;
                    if (body.Contains("be delivered to one"))
                    {
                        fTotaled = true;
                    }
                    else if (body.Contains("hop count exceeded"))
                    {
                        fTotaled = true;
                    }
                    else if (body.Contains("A communication failure occurred"))
                    {
                        fTotaled = true;
                    }
                    else if (body.Contains("The email address you entered couldn't be found"))
                    {
                        fTotaled = true;
                    }
                    else if (body.Contains("The domain you attempted to contact"))
                    {
                        fTotaled = true;
                    }
                    else if (body.Contains("I'm afraid I wasn't able to deliver the following message"))
                    {
                        fTotaled = true;
                    }
                    else if (body.Contains("cannot be delivered"))
                    {
                        fTotaled = true;
                    }
                    else if (body.Contains("I was unable to deliver your message"))
                    {
                        fTotaled = true;
                    }
                    else if (body.Contains("Your message wasn't delivered"))
                    {
                        fTotaled = true;
                    }
                    else if (body.Contains("rejected your message to the following"))
                    {
                        fTotaled = true;
                    }
                    else if (body.Contains("Delivery to the following recipient failed permanently"))
                    {
                        fTotaled = true;
                    }
                    else if (body.Contains("This is a delivery failure notification message "))
                    {
                        fTotaled = true;
                    }
                    else if (body.Contains("Delivery has failed to these recipients or groups"))
                    {
                        fTotaled = true;
                    }
                    else if (body.Contains("There was a temporary problem delivering your message "))
                    {
                        fTotaled = true;
                    }
                    else if (body.Contains("The following addresses had permanent fatal errors"))
                    {
                        fTotaled = true;
                    }

                    else if (body.Contains("the receiving email server outside Office 365 reported ") || body.Contains("couldn't be delivered"))
                    {
                        fTotaled = true;
                    }

                    if (fTotaled)
                    {
                        string sql = "update Leads set Advertised=getdate() where email='" + mysentto + "'";
                        Saved.Code.Common.gData.Exec(sql);
                        p3.DeleteMessage(i);
                    }
                }
                catch (Exception)
                {
                }
            }

            p3.Disconnect();
        }
Exemple #7
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);
            }
        }
Exemple #8
0
        public static void FetchAllMessages(object sender, DoWorkEventArgs e)
        {
            // Add messages from pop3 server to message database
            try
            {
                // Makes a new POP3 session
                // POP3 does not allow to check for new mails
                // * facepalm *
                popClient.Disconnect();
                popClient.Connect(currentUser.pop_hostname, currentUser.pop_port, currentUser.pop_ssl);
                popClient.Authenticate(currentUser.mailaddress, currentUser.password);
            }
            catch (SystemException err)
            {
                MessageBox.Show("Kunne ikke genoprette en forbindelse" + Environment.NewLine + err.Message);
            }

            // gets messagecount
            int messageCount = popClient.GetMessageCount();

            // progress of process
            int progress = 0;

            // the progress value when it was sent to the progressbar
            int lastProgress = 0;

            for (int i = messageCount; i > 0; i--)
            {
                OpenPop.Mime.Message msg = popClient.GetMessage(i);

                // We don't like the fact about messageId is optional,
                // so we make our own messageID by a md5 of
                //  - the sender's email
                //  - the tick value (ticks since 1. January year 1)
                //  - md5 of messageID (if it doesnt present then = md5 of "")
                //  - subject of the mail
                string id      = genMd5(string.Format("{0}_{1}_{2}_{3}", msg.Headers.From.MailAddress.Address, msg.Headers.DateSent.Ticks.ToString(), genMd5(msg.Headers.MessageId), msg.Headers.Subject));
                string from    = msg.Headers.From.MailAddress.Address;
                string subject = msg.Headers.Subject;
                string body    = "";

                // We prefer multipart if it's available
                if (msg.MessagePart.IsMultiPart)
                {
                    body = msg.FindFirstHtmlVersion().GetBodyAsText();
                }
                else
                {
                    body = msg.FindFirstPlainTextVersion().GetBodyAsText();
                }

                // Date sent to SQLite DateTime format
                DateTime sent_o = msg.Headers.DateSent;
                string   sent   = string.Format("{0:d4}-{1:d2}-{2:d2} {3:d2}:{4:d2}:{5:d2}", sent_o.Year, sent_o.Month, sent_o.Day, sent_o.Hour, sent_o.Minute, sent_o.Second);

                // Insert it (or not, if it already exists) to the SQLite database
                SQLiteCommand crCMD = new SQLiteCommand("INSERT OR IGNORE INTO messagetable (id,sender,subject,body,date) VALUES (@_id,@_sender,@_subject,@_body,datetime(strftime('%Y-%m-%d %H:%M:%S',@_sent)))", msgSqlCon);

                crCMD.Parameters.AddWithValue("@_id", id);
                crCMD.Parameters.AddWithValue("@_sender", from);
                crCMD.Parameters.AddWithValue("@_subject", subject);
                crCMD.Parameters.AddWithValue("@_body", MerMail.Symmetric.EncryptString(currentUser.encryption_key, body));
                crCMD.Parameters.AddWithValue("@_sent", sent);

                crCMD.ExecuteNonQuery();

                // calculate the progress percentage
                progress = (i * 100) / (messageCount);
                if (progress > lastProgress + 10)
                {
                    // if the progress is 10 percent higher than lastprogress,
                    // then report it to the progressBar, and set lastprogress
                    // to the progress percentage right now
                    (sender as BackgroundWorker).ReportProgress(progress);
                    lastProgress = progress;
                }
            }
        }
        public bool Execute()
        {
            // Get already processed messages list
            List <String> processedMessages = _context.ReferralEmails.Select(x => x.MessageID).ToList();

            if (processedMessages == null)
            {
                processedMessages = new List <string>();
            }

            // Get any un-processed messages
            OpenPop.Pop3.Pop3Client popClient = new OpenPop.Pop3.Pop3Client();
            popClient.Connect(_popServer, _popPort, _popSSL);
            popClient.Authenticate(_popUser, _popPassword);

            var messageIDs = popClient.GetMessageUids();

            for (int i = 0; i < messageIDs.Count; i++)
            {
                if (!processedMessages.Contains(messageIDs[i]))
                {
                    OpenPop.Mime.Message msg = null;
                    string msgStatus         = "";
                    string msgSubject        = "";
                    try
                    {
                        msg        = popClient.GetMessage(i + 1);
                        msgSubject = msg.Headers.Subject;
                        if (!_seedMode)
                        {
                            msgStatus = ProcessMessage(msg);
                        }
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex) {
                        if (ex.EntityValidationErrors != null &&
                            ex.EntityValidationErrors.Count() > 0 &&
                            ex.EntityValidationErrors.First().ValidationErrors != null &&
                            ex.EntityValidationErrors.First().ValidationErrors.Count > 0)
                        {
                            string errorMessage = "An error occurred validating the referral."
                                                  + "\r\nID: " + messageIDs[i]
                                                  + "\r\nSubject: " + msgSubject
                                                  + "\r\nFirst Validation Error: " + ex.EntityValidationErrors.First().ValidationErrors.First().ErrorMessage;

                            _logger.LogError(errorMessage);
                            AABC.DomainServices.Email.SMTP.Send(_smtpAccount, "Referral Validation Error", errorMessage, _validationEmail);
                        }

                        else
                        {
                            string errorMessage = "An error occurred validating the referral."
                                                  + "\r\nID: " + messageIDs[i]
                                                  + "\r\nSubject: " + msgSubject
                                                  + "\r\nError Message: " + ex.Message;

                            _logger.LogError(errorMessage);
                            AABC.DomainServices.Email.SMTP.Send(_smtpAccount, "Referral Validation Error", errorMessage, _validationEmail);
                        }

                        msgStatus = "Validation Error";
                    }
                    catch (System.Exception ex)
                    {
                        string errorMessage = "An error occurred processing the referral."
                                              + "\r\nID: " + messageIDs[i]
                                              + "\r\nSubject: " + msgSubject
                                              + "\r\nError Message: " + ex.Message;

                        _logger.LogError(errorMessage);
                        AABC.DomainServices.Email.SMTP.Send(_smtpAccount, "Referral Error", errorMessage, _errorEmail);

                        msgStatus = "Errored";
                    }

                    _context.ReferralEmails.Add(new Data.Models.ReferralEmail()
                    {
                        MessageID      = messageIDs[i],
                        MessageSubject = msgSubject,
                        MessageStatus  = msgStatus,
                        ProcessedTime  = DateTime.Now
                    });
                    _context.SaveChanges();
                }
            }

            popClient.Disconnect();
            popClient.Dispose();

            return(true);
        }