@ -1,8 +1,9 @@
using System ;
using System.Linq ;
using System.Net ;
using System.Net.Mail ;
using FluentValidation.Results ;
using MailKit.Net.Smtp ;
using MailKit.Security ;
using MimeKit ;
using NLog ;
namespace NzbDrone.Core.Notifications.Email
@ -24,27 +25,22 @@ namespace NzbDrone.Core.Notifications.Email
public void SendEmail ( EmailSettings settings , string subject , string body , bool htmlBody = false )
{
var email = new M ail Message( ) ;
email . From = new MailAddress ( settings . From ) ;
var email = new M ime Message( ) ;
email . From . Add ( MailboxAddress . Parse ( settings . From ) ) ;
settings . To . ToList ( ) . ForEach ( x = > email . To . Add ( x) ) ;
settings . CC . ToList ( ) . ForEach ( x = > email . C C. Add ( x ) ) ;
settings . Bcc . ToList ( ) . ForEach ( x = > email . Bcc . Add ( x) ) ;
settings . To . ToList ( ) . ForEach ( x = > email . To . Add ( Mailbo xAddress. Parse ( x ) ) ) ;
settings . CC . ToList ( ) . ForEach ( x = > email . C c. Add ( MailboxAddress . Parse ( x ) ) ) ;
settings . Bcc . ToList ( ) . ForEach ( x = > email . Bcc . Add ( Mailbo xAddress. Parse ( x ) ) ) ;
email . Subject = subject ;
email . Body = body ;
email . IsBodyHtml = htmlBody ;
NetworkCredential credentials = null ;
if ( ! string . IsNullOrWhiteSpace ( settings . Username ) )
email . Body = new TextPart ( htmlBody ? "html" : "plain" )
{
credentials = new NetworkCredential ( settings . Username , settings . Password ) ;
}
Text = body
} ;
try
{
Send ( email , settings .Server , settings . Port , settings . Ssl , credentials );
Send ( email , settings );
}
catch ( Exception ex )
{
@ -54,13 +50,34 @@ namespace NzbDrone.Core.Notifications.Email
}
}
private void Send ( M ailMessage email , string server , int port , bool ssl , NetworkCredential credential s)
private void Send ( M imeMessage email , EmailSettings setting s)
{
var smtp = new SmtpClient ( server , port ) ;
smtp . EnableSsl = ssl ;
smtp . Credentials = credentials ;
using ( var client = new SmtpClient ( ) )
{
var serverOption = SecureSocketOptions . Auto ;
smtp . Send ( email ) ;
if ( settings . RequireEncryption )
{
if ( settings . Port = = 465 )
{
serverOption = SecureSocketOptions . SslOnConnect ;
}
else
{
serverOption = SecureSocketOptions . StartTls ;
}
}
client . Connect ( settings . Server , settings . Port , serverOption ) ;
if ( ! string . IsNullOrWhiteSpace ( settings . Username ) )
{
client . Authenticate ( settings . Username , settings . Password ) ;
}
client . Send ( email ) ;
client . Disconnect ( true ) ;
}
}
public ValidationFailure Test ( EmailSettings settings )