Beispiel #1
0
        internal MailWriter SendMail(MailAddress sender, MailAddressCollection recipients, string deliveryNotify,
                                     bool allowUnicode, out SmtpFailedRecipientException exception)
        {
            if (sender == null)
            {
                throw new ArgumentNullException(nameof(sender));
            }

            if (recipients == null)
            {
                throw new ArgumentNullException(nameof(recipients));
            }

            if (GlobalLog.IsEnabled && recipients.Count > 0)
            {
                GlobalLog.Assert("SmtpTransport::SendMail()|recepients.Count <= 0");
            }
            MailCommand.Send(_connection, SmtpCommands.Mail, sender, allowUnicode);
            _failedRecipientExceptions.Clear();

            exception = null;
            string response;

            foreach (MailAddress address in recipients)
            {
                string smtpAddress = address.GetSmtpAddress(allowUnicode);
                string to          = smtpAddress + (_connection.DSNEnabled ? deliveryNotify : string.Empty);
                if (!RecipientCommand.Send(_connection, to, out response))
                {
                    _failedRecipientExceptions.Add(
                        new SmtpFailedRecipientException(_connection.Reader.StatusCode, smtpAddress, response));
                }
            }

            if (_failedRecipientExceptions.Count > 0)
            {
                if (_failedRecipientExceptions.Count == 1)
                {
                    exception = _failedRecipientExceptions[0];
                }
                else
                {
                    exception = new SmtpFailedRecipientsException(_failedRecipientExceptions, _failedRecipientExceptions.Count == recipients.Count);
                }

                if (_failedRecipientExceptions.Count == recipients.Count)
                {
                    exception.fatal = true;
                    throw exception;
                }
            }

            DataCommand.Send(_connection);
            return(new MailWriter(_connection.GetClosableStream()));
        }
Beispiel #2
0
 internal MailWriter SendMail(MailAddress sender, MailAddressCollection recipients, string deliveryNotify, out SmtpFailedRecipientException exception)
 {
     if (sender == null)
     {
         throw new ArgumentNullException("sender");
     }
     if (recipients == null)
     {
         throw new ArgumentNullException("recipients");
     }
     MailCommand.Send(this.connection, SmtpCommands.Mail, sender.SmtpAddress);
     this.failedRecipientExceptions.Clear();
     exception = null;
     foreach (MailAddress address in recipients)
     {
         string str;
         if (!RecipientCommand.Send(this.connection, this.connection.DSNEnabled ? (address.SmtpAddress + deliveryNotify) : address.SmtpAddress, out str))
         {
             this.failedRecipientExceptions.Add(new SmtpFailedRecipientException(this.connection.Reader.StatusCode, address.SmtpAddress, str));
         }
     }
     if (this.failedRecipientExceptions.Count > 0)
     {
         if (this.failedRecipientExceptions.Count == 1)
         {
             exception = (SmtpFailedRecipientException)this.failedRecipientExceptions[0];
         }
         else
         {
             exception = new SmtpFailedRecipientsException(this.failedRecipientExceptions, this.failedRecipientExceptions.Count == recipients.Count);
         }
         if (this.failedRecipientExceptions.Count == recipients.Count)
         {
             exception.fatal = true;
             throw exception;
         }
     }
     DataCommand.Send(this.connection);
     return(new MailWriter(this.connection.GetClosableStream()));
 }