J'utilise le code suivant pour envoyer un e-mail :
using (var mailMessage = new MailMessage("from@example.com", "to@example.com"))
{
mailMessage.Subject = "My topic";
mailMessage.IsBodyHtml = true;
mailMessage.Body = "My content";
using (var smtpClient = new SmtpClient())
{
smtpClient.Send(mailMessage);
}
}
J'aimerais pouvoir intercepter l'e-mail, et changer l'objet ainsi que le destinataire, lorsque j'utilise ce code dans mon environnement de test. Je veux pouvoir configurer quelque chose comme ceci dans mon fichier web.config :
<appSettings>
[...]
<add key="RedirectAllEmailsTo" value="someone.else@example.com" />
</appSettings>
Lorsque la valeur de "RedirectAllEmailsTo" n'est pas vide, j'aimerais que tous les courriels de mon application soient envoyés à l'adresse électronique spécifiée, au lieu du destinataire assigné dans ma base de données. MailMessage instance.
Je voudrais également changer le sujet de la MailMessage pour indiquer qui est censé recevoir l'e-mail à quelque chose comme ça : "Mon sujet (destinataire : to@example.com)".
Est-il possible d'intercepter des e-mails, et de changer le destinataire ainsi que le sujet, ou dois-je écrire ma propre classe, au lieu d'utiliser directement SmtpClient ?
Voici mon code. J'espère qu'il y a une meilleure façon de le faire.
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);
}
}