示例#1
0
 public void SaveEmail(SystemEmailMessage_OTP model)
 {
     if (model.SystemEmailMessageID != 0)
     {
         model.Status = (int)Enums.SystemEmailMessageStatus.Processed;
         var original = context.SystemEmailMessage_OTP.Where(sem => sem.SystemEmailMessageID == model.SystemEmailMessageID).FirstOrDefault();
         context.Entry(original).CurrentValues.SetValues(model);
         context.SaveChanges();
     }
 }
示例#2
0
        private void SendMessages(SmtpClient client, SystemEmailMessage item = null, SystemEmailMessage_OTP otpItem = null, SystemEmailMessage_PDO pdoItem = null, SystemEmailMessage_NOZ nozItem = null)
        {
            bool isOTPitem = false;
            bool isPDOitem = false;
            bool isNOZItem = false;

            try
            {
                if (otpItem != null)
                {
                    isOTPitem = true;
                }
                else if (pdoItem != null)
                {
                    isPDOitem = true;
                }
                else if (nozItem != null)
                {
                    isNOZItem = true;
                }

                //if (String.IsNullOrEmpty(isOTPitem ? otpItem.EmailTo : (isPDOitem ? ((pdoItem.TOEmails != null && pdoItem.TOEmails.Length > 0) ? pdoItem.TOEmails : pdoItem.EmailTo) : (isNOZItem ? nozItem.EmailTo : item.EmailTo))))
                if (String.IsNullOrEmpty(isOTPitem ? otpItem.EmailTo : (isPDOitem ? pdoItem.EmailTo : (isNOZItem ? nozItem.EmailTo : item.EmailTo))))
                {
                    if (isOTPitem)
                    {
                        otpItem.Status = (int)Enums.SystemEmailMessageStatus.Processed;
                    }
                    else if (isPDOitem)
                    {
                        pdoItem.Status = (int)Enums.SystemEmailMessageStatus.Processed;
                    }
                    else if (isNOZItem)
                    {
                        pdoItem.Status = (int)Enums.SystemEmailMessageStatus.Processed;
                    }
                    else
                    {
                        item.Status = (int)Enums.SystemEmailMessageStatus.Processed;
                    }

                    DataTypesHelper.LogThis("Couldn't send email! Email to is empty");
                }
                else
                {
                    string sender = "", emailTitle = "", emailTo = "", emailSubject = "", emailBody = "";

                    if (isOTPitem)
                    {
                        DataTypesHelper.LogThis("OTP ITEM!");
                        sender = ConfigurationManager.AppSettings["SenderOTP"].ToString();
                        //sender = otpItem.EmailFrom;

                        emailTitle   = "(" + otpItem.EmailFrom + ") - " + ConfigurationManager.AppSettings["EmailTitleOTP"].ToString();
                        emailTo      = otpItem.EmailTo;
                        emailSubject = otpItem.EmailSubject;
                        emailBody    = otpItem.EmailBody;
                    }
                    else if (isPDOitem)
                    {
                        DataTypesHelper.LogThis("PDO ITEM");
                        if (Convert.ToBoolean(ConfigurationManager.AppSettings["UseUserEmailSettings"]))
                        {
                            if (pdoItem.OsebaEmailFromID.HasValue)
                            {
                                SettingsModel set = pdoSettingsRepo.GetLatestSettings();

                                string host = String.IsNullOrEmpty(set.EmailStreznik) ? pdoItem.Osebe_PDO.EmailStreznik : set.EmailStreznik;
                                //int port = 587;//set.EmailVrata > 0 ? set.EmailVrata : pdoItem.Osebe_PDO.EmailVrata.Value;
                                int port = set.EmailVrata > 0 ? set.EmailVrata : pdoItem.Osebe_PDO.EmailVrata.Value;
                                //bool sslEnable = false;//!set.EmailSifriranjeSSL ? pdoItem.Osebe_PDO.EmailSifriranjeSSL.Value : set.EmailSifriranjeSSL;
                                bool sslEnable = set.EmailSifriranjeSSL ? pdoItem.Osebe_PDO.EmailSifriranjeSSL.Value : set.EmailSifriranjeSSL;
                                //var credentials = new NetworkCredential("*****@*****.**"/*pdoItem.Osebe_PDO.Email, "Geslo123."/*pdoItem.Osebe_PDO.EmailGeslo);
                                var credentials = new NetworkCredential(pdoItem.Osebe_PDO.Email, pdoItem.Osebe_PDO.EmailGeslo);

                                client = new SmtpClient
                                {
                                    Host                  = host,
                                    Port                  = port,
                                    EnableSsl             = sslEnable,
                                    DeliveryMethod        = SmtpDeliveryMethod.Network,
                                    UseDefaultCredentials = false,
                                    Credentials           = credentials
                                };
                            }
                        }

                        string emailTitleOseba = pdoItem.Osebe_PDO != null ? pdoItem.Osebe_PDO.Ime + " " + pdoItem.Osebe_PDO.Priimek : ConfigurationManager.AppSettings["EmailTitlePDO"].ToString();;
                        sender     = pdoItem.OsebaEmailFromID != null ? pdoItem.Osebe_PDO.Email : ConfigurationManager.AppSettings["SenderPDO"].ToString();
                        emailTitle = emailTitleOseba;


                        emailTo      = pdoItem.EmailTo;
                        emailSubject = pdoItem.EmailSubject;
                        emailBody    = pdoItem.EmailBody;
                    }
                    else if (isNOZItem)
                    {
                        sender = ConfigurationManager.AppSettings["SenderNOZ"].ToString();
                        //sender = otpItem.EmailFrom;

                        //string emailTitleOseba = nozItem.Osebe_PDO != null ? pdoItem.Osebe_PDO.Ime + " " + pdoItem.Osebe_PDO.Priimek : ConfigurationManager.AppSettings["EmailTitlePDO"].ToString(); ;
                        //sender = nozItem.OsebaEmailFromID != null ? nozItem.Osebe_PDO.Email : ConfigurationManager.AppSettings["SenderNOZ"].ToString();


                        emailTitle   = "(" + nozItem.EmailFrom + ") - " + ConfigurationManager.AppSettings["EmailTitleNOZ"].ToString();
                        emailTo      = nozItem.EmailTo;
                        emailSubject = nozItem.EmailSubject;
                        emailBody    = nozItem.EmailBody;
                    }
                    else
                    {
                        sender       = ConfigurationManager.AppSettings["Sender"].ToString();
                        emailTitle   = ConfigurationManager.AppSettings["EmailTitle"].ToString();
                        emailTo      = item.EmailTo;
                        emailSubject = item.EmailSubject;
                        emailBody    = item.EmailBody;
                    }



                    MailMessage message = new MailMessage();

                    // preverimo če je emailTO prazen pomeni, da vazame list pošiljateljev
                    if (emailTo.Length > 0)
                    {
                        if (emailTo != null && emailTo.Length > 0)
                        {
                            string[] splitTOEmails = emailTo.Split(';');
                            if (splitTOEmails.Length > 1)
                            {
                                foreach (var email in splitTOEmails)
                                {
                                    MailAddress ToEmail = new MailAddress(email);
                                    message.To.Add(ToEmail);
                                }
                            }
                            else
                            {
                                message.To.Add(emailTo);
                            }
                        }
                    }

                    message.Sender       = new MailAddress(sender);
                    message.From         = new MailAddress(sender, emailTitle);
                    message.Subject      = emailSubject;
                    message.IsBodyHtml   = true;
                    message.Body         = emailBody;
                    message.BodyEncoding = Encoding.UTF8;


                    if (isOTPitem)
                    {
                        otpItem.Status = (int)Enums.SystemEmailMessageStatus.Processed;
                    }
                    else if (isPDOitem)
                    {
                        pdoItem.Status = (int)Enums.SystemEmailMessageStatus.Processed;
                    }
                    else if (isNOZItem)
                    {
                        nozItem.Status = (int)Enums.SystemEmailMessageStatus.Processed;
                    }
                    else
                    {
                        item.Status = (int)Enums.SystemEmailMessageStatus.Processed;
                    }

                    // Boris 20.11.2019:  attachments
                    string attachmentFilename = "";
                    if (isOTPitem || isPDOitem || isNOZItem)
                    {
                        attachmentFilename = isOTPitem ? otpItem.Attachments : (isPDOitem ? pdoItem.Attachments : nozItem.Attachments);
                    }
                    else
                    {
                    }

                    // Boris 27.04.2020: CC seznam emailov
                    if (isPDOitem)
                    {
                        if (pdoItem.CCEmails != null && pdoItem.CCEmails.Length > 0)
                        {
                            string[] splitCCEmails = pdoItem.CCEmails.Split(';');
                            foreach (var email in splitCCEmails)
                            {
                                MailAddress copy = new MailAddress(email);
                                message.CC.Add(copy);
                            }
                        }
                    }


                    if (!string.IsNullOrEmpty(attachmentFilename))
                    {
                        string[] splitAttachments = attachmentFilename.Split(';');
                        foreach (var fileAttachment in splitAttachments)
                        {
                            if (File.Exists(attachmentFilename))
                            {
                                Attachment         attachment  = new Attachment(fileAttachment, MediaTypeNames.Application.Octet);
                                ContentDisposition disposition = attachment.ContentDisposition;
                                disposition.CreationDate     = File.GetCreationTime(fileAttachment);
                                disposition.ModificationDate = File.GetLastWriteTime(fileAttachment);
                                disposition.ReadDate         = File.GetLastAccessTime(fileAttachment);
                                disposition.FileName         = Path.GetFileName(fileAttachment);
                                disposition.Size             = new FileInfo(fileAttachment).Length;
                                disposition.DispositionType  = DispositionTypeNames.Attachment;
                                message.Attachments.Add(attachment);
                            }
                        }
                    }
                    // ------------------------------------------------------------------------------------

                    client.Send(message);
                }

                if (isOTPitem)
                {
                    otpSystemEmailMessageRepo.SaveEmail(otpItem);
                }
                else if (isPDOitem)
                {
                    pdoSystemEmailMessageRepo.SaveEmail(pdoItem);
                }
                else if (isNOZItem)
                {
                    nozSystemEmailMessageRepo.SaveEmail(nozItem);
                }
                else
                {
                    systemEmailMessageRepo.SaveEmail(item);
                }
            }
            catch (SmtpFailedRecipientsException ex)
            {
                if (isOTPitem)
                {
                    otpItem.Status = (int)Enums.SystemEmailMessageStatus.RecipientError;
                }
                else if (isPDOitem)
                {
                    pdoItem.Status = (int)Enums.SystemEmailMessageStatus.RecipientError;
                }
                else if (isNOZItem)
                {
                    nozItem.Status = (int)Enums.SystemEmailMessageStatus.RecipientError;
                }
                else
                {
                    item.Status = (int)Enums.SystemEmailMessageStatus.RecipientError;
                }

                DataTypesHelper.LogThis("Couldn't send the email to receipient: " + item.EmailTo + "\n" + ex.Message);

                if (isOTPitem)
                {
                    otpSystemEmailMessageRepo.SaveEmail(otpItem);
                }
                else if (isPDOitem)
                {
                    pdoSystemEmailMessageRepo.SaveEmail(pdoItem);
                }
                else if (isNOZItem)
                {
                    nozSystemEmailMessageRepo.SaveEmail(nozItem);
                }
                else
                {
                    systemEmailMessageRepo.SaveEmail(item);
                }
            }
            catch (SmtpException ex)
            {
                if (ex.Message.Contains("Mailbox unavailable"))
                {
                    if (isOTPitem)
                    {
                        otpItem.Status = (int)Enums.SystemEmailMessageStatus.RecipientError;
                    }
                    else if (isPDOitem)
                    {
                        pdoItem.Status = (int)Enums.SystemEmailMessageStatus.RecipientError;
                    }
                    else if (isNOZItem)
                    {
                        nozItem.Status = (int)Enums.SystemEmailMessageStatus.RecipientError;
                    }
                    else
                    {
                        item.Status = (int)Enums.SystemEmailMessageStatus.RecipientError;
                    }

                    DataTypesHelper.LogThis("Could not send the email to receipient: " + item.EmailTo);

                    if (isOTPitem)
                    {
                        otpSystemEmailMessageRepo.SaveEmail(otpItem);
                    }
                    else if (isPDOitem)
                    {
                        pdoSystemEmailMessageRepo.SaveEmail(pdoItem);
                    }
                    else if (isNOZItem)
                    {
                        nozSystemEmailMessageRepo.SaveEmail(nozItem);
                    }
                    else
                    {
                        systemEmailMessageRepo.SaveEmail(item);
                    }
                }
                else
                {
                    if (isOTPitem)
                    {
                        otpItem.Status = (int)Enums.SystemEmailMessageStatus.RecipientError;
                    }
                    else if (isPDOitem)
                    {
                        pdoItem.Status = (int)Enums.SystemEmailMessageStatus.RecipientError;
                    }
                    else if (isNOZItem)
                    {
                        nozItem.Status = (int)Enums.SystemEmailMessageStatus.RecipientError;
                    }
                    else
                    {
                        item.Status = (int)Enums.SystemEmailMessageStatus.RecipientError;
                    }

                    DataTypesHelper.LogThis("SmtpException: " + ex.Message);

                    if (isOTPitem)
                    {
                        otpSystemEmailMessageRepo.SaveEmail(otpItem);
                    }
                    else if (isPDOitem)
                    {
                        pdoSystemEmailMessageRepo.SaveEmail(pdoItem);
                    }
                    else if (isNOZItem)
                    {
                        nozSystemEmailMessageRepo.SaveEmail(nozItem);
                    }
                    else
                    {
                        systemEmailMessageRepo.SaveEmail(item);
                    }
                }
            }
            catch (Exception ex)
            {
                if (isOTPitem)
                {
                    otpItem.Status = (int)Enums.SystemEmailMessageStatus.RecipientError;
                }
                else if (isPDOitem)
                {
                    pdoItem.Status = (int)Enums.SystemEmailMessageStatus.RecipientError;
                }
                else if (isNOZItem)
                {
                    nozItem.Status = (int)Enums.SystemEmailMessageStatus.RecipientError;
                }
                else
                {
                    item.Status = (int)Enums.SystemEmailMessageStatus.Error;
                }

                if (isOTPitem)
                {
                    otpSystemEmailMessageRepo.SaveEmail(otpItem);
                }
                else if (isPDOitem)
                {
                    pdoSystemEmailMessageRepo.SaveEmail(pdoItem);
                }
                else if (isNOZItem)
                {
                    nozSystemEmailMessageRepo.SaveEmail(nozItem);
                }
                else
                {
                    systemEmailMessageRepo.SaveEmail(item);
                }

                DataTypesHelper.LogThis("LOG1: " + ex.Message);
            }
        }