示例#1
0
        public virtual bool SendEmail(QueuedEmail queuedEmail)
        {
            var result = false;

            try
            {
                var smtpContext = new SmtpContext(queuedEmail.EmailAccount);
                var msg         = ConvertEmail(queuedEmail);

                _emailSender.SendEmail(smtpContext, msg);

                queuedEmail.SentOnUtc = DateTime.UtcNow;
                result = true;
            }
            catch (Exception exc)
            {
                Logger.Error(string.Concat(T("Admin.Common.ErrorSendingEmail"), ": ", exc.Message), exc);
            }
            finally
            {
                queuedEmail.SentTries = queuedEmail.SentTries + 1;
                UpdateQueuedEmail(queuedEmail);
            }

            return(result);
        }
示例#2
0
        public static void SendMail(SmtpContext smtp, List <string> toAddressList, string fromAddress, string fromDisplayName, string title, string htmlBody)
        {
            System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
            foreach (string address in toAddressList)
            {
                msg.To.Add(address);
            }
            msg.From            = new MailAddress(fromAddress, fromDisplayName, MyEncoding); //发件人地址,发件人姓名,编码
            msg.Subject         = title;                                                     //邮件标题
            msg.SubjectEncoding = MyEncoding;
            msg.Body            = htmlBody;                                                  //邮件内容
            msg.BodyEncoding    = MyEncoding;
            msg.IsBodyHtml      = true;
            msg.Priority        = MailPriority.Normal;

            SmtpClient client = new SmtpClient();

            client.Host = smtp.Server;
            if (smtp.Port != 0)
            {
                client.Port = smtp.Port;//如果不指定端口,默认端口为25
            }
            if (!string.IsNullOrEmpty(smtp.UserName))
            {
                client.Credentials = new System.Net.NetworkCredential(smtp.UserName, smtp.Password); //向SMTP服务器提交认证信息
            }
            client.EnableSsl = smtp.EnableSSL;                                                       //默认为false
            client.Send(msg);
        }
示例#3
0
        public override void Begin(IConnection connection)
        {
            _logger = _logger.ForContext("ConnectionId", connection.Id);

            Context = new SmtpContext(connection, new SmtpSession());

            Connection.SendLine("220 {0}", NetworkHelper.GetLocalDnsHostName());
        }
示例#4
0
        public override void Begin(IConnection connection)
        {
            _logger = _logger.ForContext("ConnectionId", connection.Id);

            Context = new SmtpContext(connection, new SmtpSession());

            Connection.SendLine("220 {0}", NetworkHelper.GetLocalDnsHostName());
        }
示例#5
0
        /// <summary>
        /// Executes a task
        /// </summary>
        public void Execute()
        {
            var maxTries     = 3;
            var queuedEmails = _queuedEmailService.SearchEmails(null, null, null, null, true, maxTries, false, 0, 10000);

            foreach (var qe in queuedEmails)
            {
                var bcc = String.IsNullOrWhiteSpace(qe.Bcc)
                            ? null
                            : qe.Bcc.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                var cc = String.IsNullOrWhiteSpace(qe.CC)
                            ? null
                            : qe.CC.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

                try
                {
                    var smtpContext = new SmtpContext(qe.EmailAccount);

                    var msg = new EmailMessage(
                        new EmailAddress(qe.To, qe.ToName),
                        qe.Subject,
                        qe.Body,
                        new EmailAddress(qe.From, qe.FromName));

                    if (qe.ReplyTo.HasValue())
                    {
                        msg.ReplyTo.Add(new EmailAddress(qe.ReplyTo, qe.ReplyToName));
                    }

                    if (cc != null)
                    {
                        msg.Cc.AddRange(cc.Where(x => x.HasValue()).Select(x => new EmailAddress(x)));
                    }

                    if (bcc != null)
                    {
                        msg.Bcc.AddRange(bcc.Where(x => x.HasValue()).Select(x => new EmailAddress(x)));
                    }

                    _emailSender.SendEmail(smtpContext, msg);

                    qe.SentOnUtc = DateTime.UtcNow;
                }
                catch (Exception exc)
                {
                    Logger.Error(string.Format("Error sending e-mail: {0}", exc.Message), exc);
                }
                finally
                {
                    qe.SentTries = qe.SentTries + 1;
                    _queuedEmailService.UpdateQueuedEmail(qe);
                }
            }
        }
示例#6
0
        /// <summary>
        /// Sends a queued email
        /// </summary>
        /// <param name="queuedEmail">Queued email</param>
        /// <returns>Whether the operation succeeded</returns>
        public virtual bool SendEmail(QueuedEmail queuedEmail)
        {
            var result = false;

            try
            {
                var bcc = String.IsNullOrWhiteSpace(queuedEmail.Bcc) ? null : queuedEmail.Bcc.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                var cc  = String.IsNullOrWhiteSpace(queuedEmail.CC) ? null : queuedEmail.CC.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

                var smtpContext = new SmtpContext(queuedEmail.EmailAccount);

                var msg = new EmailMessage(
                    new EmailAddress(queuedEmail.To, queuedEmail.ToName),
                    queuedEmail.Subject,
                    queuedEmail.Body,
                    new EmailAddress(queuedEmail.From, queuedEmail.FromName));

                if (queuedEmail.ReplyTo.HasValue())
                {
                    msg.ReplyTo.Add(new EmailAddress(queuedEmail.ReplyTo, queuedEmail.ReplyToName));
                }

                if (cc != null)
                {
                    msg.Cc.AddRange(cc.Where(x => x.HasValue()).Select(x => new EmailAddress(x)));
                }

                if (bcc != null)
                {
                    msg.Bcc.AddRange(bcc.Where(x => x.HasValue()).Select(x => new EmailAddress(x)));
                }

                _emailSender.SendEmail(smtpContext, msg);

                queuedEmail.SentOnUtc = DateTime.UtcNow;
                result = true;
            }
            catch (Exception exc)
            {
                _logger.Error(string.Concat(_localizationService.GetResource("Admin.Common.ErrorSendingEmail"), ": ", exc.Message), exc);
            }
            finally
            {
                queuedEmail.SentTries = queuedEmail.SentTries + 1;
                UpdateQueuedEmail(queuedEmail);
            }
            return(result);
        }
示例#7
0
        public virtual void Publish(ExportDeploymentContext context, ExportDeployment deployment)
        {
            var emailAccount = _emailAccountService.GetEmailAccountById(deployment.EmailAccountId);
            var smtpContext  = new SmtpContext(emailAccount);
            var count        = 0;

            foreach (var email in deployment.EmailAddresses.SplitSafe(",").Where(x => x.IsEmail()))
            {
                var queuedEmail = new QueuedEmail
                {
                    From           = emailAccount.ToEmailAddress(),
                    SendManually   = false,
                    To             = email,
                    Subject        = deployment.EmailSubject.NaIfEmpty(),
                    Body           = deployment.EmailSubject.NaIfEmpty(),
                    CreatedOnUtc   = DateTime.UtcNow,
                    EmailAccountId = deployment.EmailAccountId
                };

                foreach (var path in context.GetDeploymentFiles())
                {
                    var name = Path.GetFileName(path);

                    queuedEmail.Attachments.Add(new QueuedEmailAttachment
                    {
                        StorageLocation = EmailAttachmentStorageLocation.Blob,
                        MediaStorage    = new MediaStorage {
                            Data = File.ReadAllBytes(path)
                        },
                        Name     = name,
                        MimeType = MimeTypes.MapNameToMimeType(name)
                    });
                }

                _queuedEmailService.InsertQueuedEmail(queuedEmail);
                ++count;
            }

            context.Log.Info("{0} email(s) created and queued for deployment.".FormatInvariant(count));
        }
        public virtual void Publish(ExportDeploymentContext context, ExportDeployment deployment)
        {
            var emailAccount = _emailAccountService.GetEmailAccountById(deployment.EmailAccountId);
            var smtpContext  = new SmtpContext(emailAccount);
            var count        = 0;

            foreach (var email in deployment.EmailAddresses.SplitSafe(",").Where(x => x.IsEmail()))
            {
                var queuedEmail = new QueuedEmail
                {
                    From           = emailAccount.Email,
                    FromName       = emailAccount.DisplayName,
                    SendManually   = true,
                    To             = email,
                    Subject        = deployment.EmailSubject.NaIfEmpty(),
                    CreatedOnUtc   = DateTime.UtcNow,
                    EmailAccountId = deployment.EmailAccountId
                };

                foreach (string path in context.DeploymentFiles)
                {
                    string name = Path.GetFileName(path);

                    queuedEmail.Attachments.Add(new QueuedEmailAttachment
                    {
                        StorageLocation = EmailAttachmentStorageLocation.Path,
                        Path            = path,
                        Name            = name,
                        MimeType        = MimeTypes.MapNameToMimeType(name)
                    });
                }

                _queuedEmailService.InsertQueuedEmail(queuedEmail);
                ++count;
            }

            context.Log.Information("{0} email(s) created and queued for deployment.".FormatInvariant(count));
        }
示例#9
0
        private void SendCompletionEmail(DataImporterContext ctx)
        {
            var emailAccount = _emailAccountService.Value.GetDefaultEmailAccount();
            var smtpContext  = new SmtpContext(emailAccount);
            var message      = new EmailMessage();

            var store     = _services.StoreContext.CurrentStore;
            var storeInfo = "{0} ({1})".FormatInvariant(store.Name, store.Url);
            var intro     = _services.Localization.GetResource("Admin.DataExchange.Import.CompletedEmail.Body").FormatInvariant(storeInfo);
            var body      = new StringBuilder(intro);
            var result    = ctx.ExecuteContext.Result;

            if (result.LastError.HasValue())
            {
                body.AppendFormat("<p style=\"color: #B94A48;\">{0}</p>", result.LastError);
            }

            body.Append("<p>");

            body.AppendFormat("<div>{0}: {1} &middot; {2}: {3}</div>",
                              T("Admin.Common.TotalRows"), result.TotalRecords,
                              T("Admin.Common.Skipped"), result.SkippedRecords);

            body.AppendFormat("<div>{0}: {1} &middot; {2}: {3}</div>",
                              T("Admin.Common.NewRecords"), result.NewRecords,
                              T("Admin.Common.Updated"), result.ModifiedRecords);

            body.AppendFormat("<div>{0}: {1} &middot; {2}: {3}</div>",
                              T("Admin.Common.Errors"), result.Errors,
                              T("Admin.Common.Warnings"), result.Warnings);

            body.Append("</p>");

            message.From = new EmailAddress(emailAccount.Email, emailAccount.DisplayName);

            if (_contactDataSettings.Value.WebmasterEmailAddress.HasValue())
            {
                message.To.Add(new EmailAddress(_contactDataSettings.Value.WebmasterEmailAddress));
            }

            if (message.To.Count == 0 && _contactDataSettings.Value.CompanyEmailAddress.HasValue())
            {
                message.To.Add(new EmailAddress(_contactDataSettings.Value.CompanyEmailAddress));
            }

            if (message.To.Count == 0)
            {
                message.To.Add(new EmailAddress(emailAccount.Email, emailAccount.DisplayName));
            }

            message.Subject = T("Admin.DataExchange.Import.CompletedEmail.Subject").Text.FormatInvariant(ctx.Request.Profile.Name);

            message.Body = body.ToString();

            _emailSender.Value.SendEmail(smtpContext, message);

            //Core.Infrastructure.EngineContext.Current.Resolve<IQueuedEmailService>().InsertQueuedEmail(new QueuedEmail
            //{
            //	From = emailAccount.Email,
            //	FromName = emailAccount.DisplayName,
            //	To = message.To.First().Address,
            //	Subject = message.Subject,
            //	Body = message.Body,
            //	CreatedOnUtc = DateTime.UtcNow,
            //	EmailAccountId = emailAccount.Id,
            //	SendManually = true
            //});
            //_services.DbContext.SaveChanges();
        }
示例#10
0
        public void Execute(IJobExecutionContext context)
        {
            try
            {
                Log.Debug("");
                Log.Info("Executing queued message send job");

                IEmailSender                _emailSender           = new DefaultEmailSender();
                QueuedEmailServices         _queuedEmailService    = ServiceProvider.GetQueuedEmailServices();
                QueuedSMSServices           _queuedSMSService      = ServiceProvider.GetQueuedSMSServices();
                ApplicationSettingsServices generalSettingsService = ServiceProvider.GetApplicationSettingsServices();

                var sendTriesStart = 0;
                var sendTriesEnd   = OpenCBSConstants.MessagingMaxSentTries;

                int enableSmsMsg = Convert.ToInt32(generalSettingsService.SelectParameterValue(OGeneralSettings.ENABLE_SMS_MESSAGING));
                Log.Debug("Send SMS status: " + enableSmsMsg);
                if (enableSmsMsg == 1)
                {
                    var queuedsms = _queuedSMSService.SearchSMSs(null, null, null, null, true, sendTriesStart, sendTriesEnd, false, 0, 10000);

                    Log.Debug("");
                    Log.Debug("-------------------------------------");
                    Log.Info("Sending SMS");
                    Log.Debug("Queued sms count: " + queuedsms.Count);

                    foreach (var qe in queuedsms)
                    {
                        try
                        {
                            ISms sms = new EstoreSms();
                            sms.UserName = Convert.ToString(generalSettingsService.SelectParameterValue(OGeneralSettings.SMS_GATEWAY_USERNAME));
                            sms.Password = Convert.ToString(generalSettingsService.SelectParameterValue(OGeneralSettings.SMS_GATEWAY_PASSWORD));

                            sms.Message = qe.Message;
                            sms.AddRecipient(qe.Recipient);
                            sms.MessageFrom = qe.From;

                            qe.Response = sms.SendSms();

                            if (qe.Response.ToLower().Contains("ok"))
                            {
                                qe.SentOnUtc = DateTime.UtcNow;
                            }
                            Log.Info(qe.Response);
                        }
                        catch (Exception exc)
                        {
                            Log.Error(string.Format("Error sending sms: {0}", exc.Message), exc);
                        }
                        finally
                        {
                            qe.SentTries = qe.SentTries + 1;
                            _queuedSMSService.Update(qe);
                        }
                    }
                }

                var queuedEmails = _queuedEmailService.SearchEmails(null, null, null, null, true, sendTriesStart, sendTriesEnd, false, 0, 10000);

                Log.Debug("");
                Log.Debug("");
                Log.Debug("-------------------------------------");
                Log.Info("Sending Emails");
                Log.Debug("Queued email count: " + queuedEmails.Count);

                foreach (var qe in queuedEmails)
                {
                    var bcc = String.IsNullOrWhiteSpace(qe.Bcc)
                                ? null
                                : qe.Bcc.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                    var cc = String.IsNullOrWhiteSpace(qe.CC)
                                ? null
                                : qe.CC.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

                    try
                    {
                        var smtpContext = new SmtpContext(qe.EmailAccount);

                        var msg = new EmailMessage(
                            new EmailAddress(qe.To, qe.ToName),
                            qe.Subject,
                            qe.Body,
                            new EmailAddress(qe.From, qe.FromName));

                        if (qe.ReplyTo.HasValue())
                        {
                            msg.ReplyTo.Add(new EmailAddress(qe.ReplyTo, qe.ReplyToName));
                        }

                        if (cc != null)
                        {
                            msg.Cc.AddRange(cc.Where(x => x.HasValue()).Select(x => new EmailAddress(x)));
                        }

                        if (bcc != null)
                        {
                            msg.Bcc.AddRange(bcc.Where(x => x.HasValue()).Select(x => new EmailAddress(x)));
                        }

                        _emailSender.SendEmail(smtpContext, msg);

                        qe.SentOnUtc = DateTime.UtcNow;
                    }
                    catch (Exception exc)
                    {
                        Log.Error(string.Format("Error sending e-mail: {0}", exc.Message), exc);
                    }
                    finally
                    {
                        qe.SentTries = qe.SentTries + 1;
                        _queuedEmailService.Update(qe);
                    }
                }
                Log.Info("Queued message send completed");
            }
            catch (Exception exc)
            {
                Log.Error(exc);
            }
        }