Я использую следующий код для отправки электронного письма:
using (var mailMessage = new MailMessage("[email protected]", "[email protected]"))
{
mailMessage.Subject = "My topic";
mailMessage.IsBodyHtml = true;
mailMessage.Body = "My content";
using (var smtpClient = new SmtpClient())
{
smtpClient.Send(mailMessage);
}
}
Я хотел бы иметь возможность перехватывать электронную почту и изменять тему, а также получателя, когда я использую этот код в своей тестовой среде. Я хочу иметь возможность настроить что-то подобное в моем файле web.config:
<appSettings>
[...]
<add key="RedirectAllEmailsTo" value="[email protected]" />
</appSettings>
Если значение RedirectAllEmailsTo не пусто, я хочу, чтобы все электронные письма в моем приложении отправлялись на указанный адрес электронной почты, а не на назначенного получателя в моем экземпляре MailMessage.
Я также хотел бы изменить тему MailMessage, чтобы указать, кто должен получать электронное письмо, примерно так: «Моя тема (получатель: [email protected])».
Можно ли перехватывать электронные письма и изменять получателя, а также тему, или мне нужно написать свой собственный класс вместо прямого использования SmtpClient?
Это мой код. Надеюсь, есть лучший способ справиться с этим.
public static void SendEmail(MailMessage mailMessage)
{
var redirectAllEmailsTo = ConfigurationManager.AppSettings["RedirectAllEmailsTo"];
if (string.IsNullOrEmpty(redirectAllEmailsTo) == false)
{
mailMessage.Subject += string.Format(" (to: {0}, cc: {1}, bcc: {2})",
string.Join(", ", mailMessage.To.Select(m => m.Address)),
string.Join(", ", mailMessage.CC.Select(m => m.Address)),
string.Join(", ", mailMessage.Bcc.Select(m => m.Address)));
mailMessage.To.Clear();
mailMessage.CC.Clear();
mailMessage.Bcc.Clear();
mailMessage.To.Add(redirectAllEmailsTo);
}
using (var smtpClient = new SmtpClient())
{
smtpClient.Send(mailMessage);
}
}