Ejemplo n.º 1
0
        /// <summary>
        /// Sends the logs.
        /// </summary>
        /// <param name="logs">The logs.</param>
        private async void SendLogs([NotNull] IEnumerable <Log> logs)
        {
            try
            {
                Log[] timeOrdered = logs
                                    .OrderBy(l => l.TimeStamp)
                                    .ToArray();
                Log[] levelOrdered = timeOrdered
                                     .OrderByDescending(l => l.Level)
                                     .ToArray();

                string subject  = _newLineRegex.Replace(Subject.ToString(GetSubjectResolver(levelOrdered)), m => " ");
                string bodyHtml = BodyHtml.ToString(GetBodyResolver(timeOrdered, true));
                string bodyText = BodyPlainText?.ToString(GetBodyResolver(timeOrdered, false));

                MailMessage message = new MailMessage
                {
                    Subject      = subject,
                    Body         = bodyHtml,
                    IsBodyHtml   = true,
                    BodyEncoding = Encoding.UTF8
                };
                if (SenderAddress != null)
                {
                    message.Sender = SenderAddress;
                }
                if (FromAddress != null)
                {
                    message.From = FromAddress;
                }
                if (ToAddresses != null)
                {
                    message.To.AddRange(ToAddresses);
                }
                if (CCAddresses != null)
                {
                    message.CC.AddRange(CCAddresses);
                }
                if (BccAddresses != null)
                {
                    message.Bcc.AddRange(BccAddresses);
                }
                if (bodyText != null)
                {
                    message.AlternateViews.Add(
                        AlternateView.CreateAlternateViewFromString(bodyText, Encoding.UTF8, "text/plain"));
                }

                SmtpClient smtpClient = _smtpClient;
                if (smtpClient == null)
                {
                    return;
                }
                using (await _sendLock.LockAsync().ConfigureAwait(false))
                {
                    smtpClient = _smtpClient;
                    if (smtpClient == null)
                    {
                        return;
                    }

                    // ReSharper disable once PossibleNullReferenceException
                    await smtpClient.SendMailAsync(message).ConfigureAwait(false);
                }
            }
            catch (Exception e)
            {
                Log.Add(e, LoggingLevel.Error, () => Resources.EmailLogger_SendLogs_Error);
            }
        }