using System; using System.Configuration; using System.Diagnostics; using System.Net.Mail; namespace ChadSoft.Edificator { internal class MailService : IMailService { private const string DefaultSubjectFormat = "[Wisdom] {0}"; private readonly SmtpClient _mailClient; private readonly string _senderEmailAddress; private readonly string _recipientEmailAddresses; private static readonly string _subjectFormat = ConfigurationManager.AppSettings["MailService.SubjectFormat"]; protected static string SubjectFormat { get { return string.IsNullOrEmpty(_subjectFormat) ? DefaultSubjectFormat : _subjectFormat; } } public MailService(string host, string senderEmailAddress, string recipientEmailAddresses) : this(new SmtpClient(host), senderEmailAddress, recipientEmailAddresses) { } public MailService(SmtpClient mailClient, string senderEmailAddress, string recipientEmailAddresses) { _mailClient = mailClient; _senderEmailAddress = senderEmailAddress; _recipientEmailAddresses = recipientEmailAddresses; } public void Mail(WisdomBit bitOfWisdom) { Mail(bitOfWisdom, _recipientEmailAddresses); } public void Mail(WisdomBit bitOfWisdom, string recipientAddresses) { MailMessage emailMessage = CreateEmailMessage(bitOfWisdom, recipientAddresses); SendMessage(emailMessage); Debug.WriteLine(string.Format("Bit of Wisdom '{0}' sent to {1}", emailMessage.Subject, recipientAddresses)); } protected virtual MailMessage CreateEmailMessage(WisdomBit bitOfWisdom, string recipientAddresses) { if (string.IsNullOrEmpty(recipientAddresses)) throw new ArgumentNullException("recipientAddresses"); string subject = string.Format(SubjectFormat, bitOfWisdom.Title); string body = string.Format("

{1}

{2}
", bitOfWisdom.Uri.AbsoluteUri, bitOfWisdom.Title, bitOfWisdom.Content); MailMessage message = new MailMessage(_senderEmailAddress, recipientAddresses, subject, body) { IsBodyHtml = true }; return message; } protected virtual void SendMessage(MailMessage emailMessage) { _mailClient.Send(emailMessage); } } }