Beispiel #1
0
        private int SaveX40(MailMessage m, BO.x40MailQueue rec)
        {
            var p = new DL.Params4Dapper();

            p.AddInt("pid", rec.x40ID);
            p.AddString("x40MessageGuid", rec.x40MessageGuid);
            p.AddInt("j40ID", rec.j40ID, true);
            if (rec.j03ID == 0)
            {
                rec.j03ID = _mother.CurrentUser.pid;
            }
            p.AddInt("j03ID", rec.j03ID, true);
            p.AddInt("x40RecordPid", rec.x40RecordPid, true);
            p.AddString("x40Entity", rec.x40Entity);

            p.AddString("x40SenderAddress", m.From.Address);
            p.AddString("x40SenderName", m.From.DisplayName);
            p.AddString("x40To", String.Join(",", m.To.Select(p => p.Address)));
            p.AddString("x40Bcc", String.Join(",", m.Bcc.Select(p => p.Address)));
            p.AddString("x40Cc", String.Join(",", m.CC.Select(p => p.Address)));
            p.AddString("x40Subject", m.Subject);
            p.AddString("x40Body", m.Body);
            p.AddBool("x40IsHtmlBody", m.IsBodyHtml);
            p.AddDateTime("x40WhenProceeded", DateTime.Now);
            p.AddString("x40ErrorMessage", rec.x40ErrorMessage);
            p.AddInt("x40State", (int)rec.x40State);
            p.AddString("x40Attachments", String.Join(",", m.Attachments.Select(p => p.Name)));
            p.AddString("x40EmlFolder", rec.x40EmlFolder);
            p.AddInt("x40EmlFileSize", rec.x40EmlFileSize);
            return(_db.SaveRecord("x40MailQueue", p.getDynamicDapperPars(), rec));
        }
Beispiel #2
0
        private BO.x40MailQueue InhaleMessageSender(int j40id, BO.x40MailQueue rec)
        {
            if (j40id > 0)
            {
                _account = LoadJ40(j40id);
            }
            else
            {
                _account = LoadDefaultJ40();
            }
            if (_account == null)
            {
                return(new BO.x40MailQueue()
                {
                    j40ID = 0
                });
            }
            rec.j40ID            = _account.pid;
            rec.x40SenderAddress = _account.j40SmtpEmail;
            rec.x40SenderName    = _account.j40SmtpName;
            if (_account.j40SmtpUsePersonalReply)
            {
                //rec.x40SenderAddress = _mother.CurrentUser.j02Email;
                rec.x40SenderName = _mother.CurrentUser.FullName;
            }

            return(rec);
        }
Beispiel #3
0
 public BO.Result SendMessage(int j40id, string toEmail, string toName, string subject, string body, bool ishtml)  //v BO.Result.pid vrací x40id
 {
     BO.x40MailQueue rec = new BO.x40MailQueue()
     {
         x40To = toEmail, x40Subject = subject, x40Body = body, x40IsHtmlBody = ishtml
     };
     rec = InhaleMessageSender(j40id, rec);
     return(SendMessage(rec));
 }
Beispiel #4
0
        public BO.Result SendMessage(int j40id, MailMessage message)
        {
            var rec = new BO.x40MailQueue();

            if (message.From == null)
            {
                rec          = InhaleMessageSender(j40id, rec);
                message.From = new MailAddress(rec.x40SenderAddress, rec.x40SenderName);
            }
            return(handle_smtp_finish(message, rec));
        }
Beispiel #5
0
        public BO.Result SendMessage(BO.x40MailQueue rec)  //v BO.Result.pid vrací x40id
        {
            rec = InhaleMessageSender(rec.j40ID, rec);
            MailMessage m = new MailMessage()
            {
                Body = rec.x40Body, Subject = rec.x40Subject, IsBodyHtml = rec.x40IsHtmlBody
            };

            m.From = new MailAddress(rec.x40SenderAddress, rec.x40SenderName);
            var lis = new List <string>();

            if (String.IsNullOrEmpty(rec.x40To) == false)
            {
                lis = BO.BAS.ConvertString2List(rec.x40To.Replace(";", ","), ",");
                foreach (string s in lis)
                {
                    m.To.Add(new MailAddress(s));
                }
            }
            if (String.IsNullOrEmpty(rec.x40Cc) == false)
            {
                lis = BO.BAS.ConvertString2List(rec.x40Cc.Replace(";", ","), ",");
                foreach (string s in lis)
                {
                    m.CC.Add(new MailAddress(s));
                }
            }
            if (String.IsNullOrEmpty(rec.x40Bcc) == false)
            {
                lis = BO.BAS.ConvertString2List(rec.x40Bcc.Replace(";", ","), ",");
                foreach (string s in lis)
                {
                    m.Bcc.Add(new MailAddress(s));
                }
            }



            return(handle_smtp_finish(m, rec));
        }
Beispiel #6
0
        private BO.Result handle_smtp_finish(MailMessage m, BO.x40MailQueue rec)     //finální odeslání zprávy
        {
            if (_account == null)
            {
                return(handle_result_error("Chybí poštovní účet odesílatele"));
            }
            if (m.From == null)
            {
                return(handle_result_error("Chybí odesílatel zprávy"));
            }
            if (m.To.Count == 0)
            {
                return(handle_result_error("Chybí příjemce zprávy"));
            }
            if (string.IsNullOrEmpty(m.Body) == true)
            {
                return(handle_result_error("Chybí text zprávy."));
            }
            if (string.IsNullOrEmpty(m.Subject) == true)
            {
                return(handle_result_error("Chybí předmět zprávy."));
            }

            if (_account.j40SmtpUsePersonalReply)
            {
                m.ReplyToList.Add(new MailAddress(_mother.CurrentUser.j02Email, _mother.CurrentUser.FullName));
            }

            BO.Result ret = new BO.Result(false);

            using (SmtpClient client = new SmtpClient(_account.j40SmtpHost, _account.j40SmtpPort))
            {
                client.UseDefaultCredentials = _account.j40SmtpUseDefaultCredentials;
                if (client.UseDefaultCredentials == false)
                {
                    client.Credentials = new System.Net.NetworkCredential(_account.j40SmtpLogin, _account.j40SmtpPassword);
                }


                m.BodyEncoding    = Encoding.UTF8;
                m.SubjectEncoding = Encoding.UTF8;
                m.Headers.Add("Message-ID", rec.x40MessageGuid);


                if (_attachments != null)
                {
                    foreach (var att in _attachments)
                    {
                        m.Attachments.Add(att);
                    }
                }


                client.DeliveryMethod          = SmtpDeliveryMethod.SpecifiedPickupDirectory;
                client.PickupDirectoryLocation = _mother.App.TempFolder;
                client.Send(m);                                             //nejdříve uložit eml soubor do temp složky
                string strFullPath = FindEmlFileByGuid(rec.x40MessageGuid); //najít vygenerovaný eml file podle jeho Message-ID
                if (strFullPath != "")
                {
                    rec.x40EmlFolder   = "eml\\" + DateTime.Now.Year.ToString() + "\\" + DateTime.Now.Month.ToString();
                    rec.x40EmlFileSize = (int)(new System.IO.FileInfo(strFullPath).Length);
                    if (!System.IO.Directory.Exists(_mother.App.UploadFolder + "\\" + rec.x40EmlFolder))
                    {
                        System.IO.Directory.CreateDirectory(_mother.App.UploadFolder + "\\" + rec.x40EmlFolder);
                    }
                    string strDestPath = _mother.App.UploadFolder + "\\" + rec.x40EmlFolder + "\\" + rec.x40MessageGuid + ".eml";
                    if (!File.Exists(strDestPath))
                    {
                        File.Move(strFullPath, strDestPath);    //přejmenovat nalezený eml file na guid
                    }
                }
                client.DeliveryMethod = SmtpDeliveryMethod.Network; //nyní opravdu odeslat

                try
                {
                    client.Send(m);
                    rec.x40ErrorMessage = "";
                    rec.x40State        = BO.x40StateFlag.Proceeded;
                    ret.pid             = SaveX40(m, rec);
                    ret.Flag            = ResultEnum.Success;
                }
                catch (Exception ex)
                {
                    _db.CurrentUser.AddMessage(ex.Message);
                    rec.x40ErrorMessage = ex.Message;
                    rec.x40State        = BO.x40StateFlag.Error;
                    ret.pid             = SaveX40(m, rec);
                    ret.Flag            = ResultEnum.Failed;
                    ret.Message         = rec.x40ErrorMessage;
                }
            }

            return(ret);
        }