コード例 #1
0
        /// <summary>
        /// Sends an email by using an email task object, do not call this method manually as it will take time
        /// and kill the performance unless it's you want to wait for the email sending to complete
        /// </summary>
        /// <param name="emailTask">Email task object</param>
        /// <exception cref="System.Net.Mail.SmtpException">If the email sending failed</exception>
        /// <returns>Async task whenever sending the email is done</returns>
        public async Task ManuallySendEmailAsync(EmailQueuerTask emailTask)
        {
            using var scope = factory.CreateScope();
            var fluent = scope.ServiceProvider.GetRequiredService <IFluentEmailFactory>();

            await SendEmailAsync(emailTask, fluent);
        }
コード例 #2
0
        private async Task SendEmailAsync(EmailQueuerTask emailTask, IFluentEmailFactory fluent)
        {
            var data = JsonConvert.DeserializeObject(emailTask.ModelJson,
                                                     options.Assembly.Assembly.GetType(emailTask.ModelType));

            var emails = emailTask.To.Split(";")
                         .Select(e => new FluentEmail.Core.Models.Address {
                EmailAddress = e
            })
                         .ToArray();

            FluentEmail.Core.Models.Address[] cc = { };
            if (!string.IsNullOrEmpty(emailTask.CC))
            {
                cc = emailTask.CC.Split(";")
                     .Select(e => new FluentEmail.Core.Models.Address {
                    EmailAddress = e
                })
                     .ToArray();
            }

            FluentEmail.Core.Models.Address[] bcc = { };
            if (!string.IsNullOrEmpty(emailTask.BCC))
            {
                bcc = emailTask.BCC.Split(";")
                      .Select(e => new FluentEmail.Core.Models.Address {
                    EmailAddress = e
                })
                      .ToArray();
            }

            var attachmentFileNames = emailTask.AttachmentPaths.Split(";");

            var body = await GenerateEmailBody(emailTask.Template, data);

            var emailToSend = fluent.Create()
                              .To(emails)
                              .CC(cc)
                              .BCC(bcc)
                              .Subject(emailTask.Subject)
                              .Body(body, true);

            foreach (var attachmentFileName in attachmentFileNames)
            {
                if (!string.IsNullOrEmpty(attachmentFileName))
                {
                    emailToSend.AttachFromFilename(attachmentFileName);
                }
            }

            await emailToSend.SendAsync();
        }