예제 #1
0
        public override void Dispatch(MessageDelivery messageDelivery)
        {
            try
            {
                SmtpClient  client      = new SmtpClient();
                MailMessage mailMessage = new MailMessage();
                mailMessage.Subject = DetermineSubject(messageDelivery);
                mailMessage.From    = DetermineFromAddress(messageDelivery);

                foreach (MailAddress address in DetermineToEmailAddresses(messageDelivery))
                {
                    mailMessage.To.Add(address);
                }

                foreach (MailAddress address in DetermineCCEmailAddresses(messageDelivery))
                {
                    mailMessage.CC.Add(address);
                }

                foreach (MailAddress address in DetermineBccEmailAddresses(messageDelivery))
                {
                    mailMessage.Bcc.Add(address);
                }
                mailMessage.BodyEncoding = BodyEncoding;

                Message content = Converter.ToMessage(messageDelivery);

                using (StringWriter writer = new StringWriter(CultureInfo.InvariantCulture))
                {
                    using (XmlTextWriter xmlWriter = new XmlTextWriter(writer))
                    {
                        content.WriteMessage(xmlWriter);
                    }

                    mailMessage.Body = writer.ToString();
                }

                client.Send(mailMessage);
            }
            catch (System.Net.Mail.SmtpException ex)
            {
                throw new DeliveryException("Error sending mail", ex);
            }
        }
예제 #2
0
        public override void Dispatch(MessageDelivery messageDelivery)
        {
            IOutputChannel channel = CreateChannelFactory().CreateChannel();
            bool           closed  = false;

            try
            {
                channel.Open();
                channel.Send(_converter.ToMessage(messageDelivery));
            }
            finally
            {
                channel.Close();
                closed = true;
            }
            if (!closed)
            {
                channel.Abort();
            }
        }