Don't convert to MimeMessage
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using MimeKit;
|
||||
using MimeKit.Text;
|
||||
using Umbraco.Cms.Core.Models.Email;
|
||||
@@ -62,27 +62,52 @@ namespace Umbraco.Cms.Infrastructure.Extensions
|
||||
public static NotificationEmailModel ToNotificationEmail(this EmailMessage emailMessage,
|
||||
string configuredFromAddress)
|
||||
{
|
||||
var mimeMessage = emailMessage.ToMimeMessage(configuredFromAddress);
|
||||
if (mimeMessage.From.Any() is false || mimeMessage.To.Any() is false)
|
||||
{
|
||||
throw new InvalidOperationException("There must be a valid from address and recipient address.");
|
||||
}
|
||||
// EmailMessage only supports a single from mail, so take the first.
|
||||
NotificationEmailAddress from = ToNotificationAddress(mimeMessage.From.Mailboxes.First());
|
||||
NotificationEmailAddress from = ToNotificationAddress(emailMessage.From);
|
||||
|
||||
return new NotificationEmailModel(from,
|
||||
mimeMessage.To.Mailboxes.Select(ToNotificationAddress),
|
||||
mimeMessage.Cc.Mailboxes.Select(ToNotificationAddress),
|
||||
mimeMessage.Bcc.Mailboxes.Select(ToNotificationAddress),
|
||||
mimeMessage.ReplyTo.Mailboxes.Select(ToNotificationAddress),
|
||||
mimeMessage.Subject,
|
||||
GetNotificationAddresses(emailMessage.To),
|
||||
GetNotificationAddresses(emailMessage.Cc),
|
||||
GetNotificationAddresses(emailMessage.Bcc),
|
||||
GetNotificationAddresses(emailMessage.ReplyTo),
|
||||
emailMessage.Subject,
|
||||
emailMessage.Body,
|
||||
emailMessage.Attachments,
|
||||
emailMessage.IsBodyHtml);
|
||||
}
|
||||
|
||||
private static NotificationEmailAddress ToNotificationAddress(MailboxAddress mailboxAddress) =>
|
||||
new NotificationEmailAddress(mailboxAddress.Address, mailboxAddress.Name);
|
||||
private static NotificationEmailAddress ToNotificationAddress(string address)
|
||||
{
|
||||
if (InternetAddress.TryParse(address, out InternetAddress internetAddress))
|
||||
{
|
||||
if (internetAddress is MailboxAddress mailboxAddress)
|
||||
{
|
||||
return new NotificationEmailAddress(mailboxAddress.Address, internetAddress.Name);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static IEnumerable<NotificationEmailAddress> GetNotificationAddresses(IEnumerable<string> addresses)
|
||||
{
|
||||
if (addresses is null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var notificationAddresses = new List<NotificationEmailAddress>();
|
||||
|
||||
foreach (var address in addresses)
|
||||
{
|
||||
NotificationEmailAddress notificationAddress = ToNotificationAddress(address);
|
||||
if (notificationAddress is not null)
|
||||
{
|
||||
notificationAddresses.Add(notificationAddress);
|
||||
}
|
||||
}
|
||||
|
||||
return notificationAddresses;
|
||||
}
|
||||
|
||||
private static void AddAddresses(MimeMessage message, string[] addresses, Func<MimeMessage, InternetAddressList> addressListGetter, bool throwIfNoneValid = false)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user