Y at-il de toute façon que tous les e-mails soient dirigés vers une adresse différente lorsque System.Web.HttpContext.Current.IsDebuggingEnabled
est vrai? Ou ai-je besoin d'une nouvelle classe que j'utilise pour envoyer des emails partout?asp.net net.mail - achemine tous les emails vers une autre adresse e-mail en mode débogage
Répondre
Nous utilisons une solution similaire à la méthode MailProxy détaillée par tvanfosson. Cependant, nous avons quelques différences qui méritent d'être mentionnées. La première consiste à étendre simplement la classe SmtpClient et à remplacer les méthodes Send dans un environnement de développement ou de test. Nous utilisons un fichier de configuration pour déterminer l'environnement. Nous utilisons ensuite cette classe chaque fois que nous devons envoyer des courriels. Cette classe déterminera qui est actuellement connecté à l'application et redirigera tous les e-mails qui leur sont générés, avec un basculement vers une liste standard de destinataires si l'utilisateur connecté n'est pas disponible pour une raison quelconque. Cela aide si vous avez plusieurs personnes qui sont en train de tester ou de développer car ils ne recevront que les emails qu'ils ont générés. Nous ajoutons également les destinataires originaux du message au corps du message. Cela est utile lorsque vous testez des messages de type workflow pour vous assurer qu'ils vont aux personnes correctes. Enfin, je trouve qu'il est utile d'ajouter une balise [DEV] ou [QA] à l'objet du message afin que je puisse configurer une règle dans mon client de messagerie pour gérer tous les messages de test.
Vous pouvez soit mettre cela dans votre code partout où vous utilisez:
if (System.Web.HttpContext.Current.IsDebuggingEnabled)
{
mail.To = "[email protected]";
}
else
{
mail.To = recipientAddress;
}
Ou tout simplement construire une enveloppe simple pour l'obtention des adresses e-mail (même quelque chose dans le getter de la méthode pour les adresses des destinataires serait work) ou un wrapper pour l'ensemble de la classe smtpclient ou mailmessage.
La meilleure façon de gérer cela, je pense, est via une classe proxy pour le client de messagerie. Lorsque vous créez la classe proxy, utilisez un paramètre pour indiquer si vous souhaitez utiliser le mode de débogage ou non. Demandez au proxy de prendre en charge la même interface que le client de messagerie, mais remplacez silencieusement les adresses électroniques sortantes lorsqu'il fonctionne en mode débogage.
public class MailProxy
{
private bool IsDebug { get; set; }
private string DebugAddress { get; set; }
private SmtpClient Client { get; set; }
public MailProxy(SmtpClient client,
bool debugging,
string debugAddress)
{
this.IsDebug = debugging;
this.DebugAddress = debugAddress;
}
public void Send(MailMessage message)
{
if (this.IsDebug)
{
message.To = new MailAddress(this.DebugAddress);
}
this.Client.Send(message);
}
...
}
Je créer un serveur SMTP et utiliser votre webapp comme serveur de courrier sortant (spécifié dans une sorte de config). Pour les sites de production, le serveur se comporte normalement, mais pour le débogage, vous pouvez configurer un serveur SMTP pour acheminer tout le courrier à l'adresse de votre choix. Cela a l'avantage de ne pas changer du tout d'application, ce qui peut être utile si la modification du comportement empêche la survenue de bugs que vous essayez de reproduire, etc. Mon entreprise utilise cette approche pour le contrôle qualité et cela fonctionne plutôt bien.
Je considérais cela mais je ne sais pas comment cela fonctionnerait dans des environnements de production partagés – Shawn
Par "production partagée", voulez-vous dire que vous testez sur votre système de production? Si c'est le cas, c'est un non-non majeur. Spammer accidentellement vos clients ne va pas vous gagner de points. Si vous voulez dire que vous partagez le serveur de test avec d'autres développeurs, nous résolvons cela en ayant une boîte aux lettres de test partagée. – rmeador
Je dois être honnête, j'utilise le bon vieux
#if DEBUG
Mail.To("[email protected]");
#else
Mail.To("[email protected]");
#endif
Pour me arrêter d'avoir un code de débogage flottant dans mes applications de production. Une approche que j'utilise pour l'accès à la base de données consiste à utiliser une entrée dns, c'est-à-dire database1.domain.com et dans le fichier hosts sur ma machine dev elle pointe vers mon système local et sur ma machine de production vers le serveur de base de données. Vous pouvez utiliser quelque chose de similaire pour avoir un serveur de messagerie de débogage et un serveur de messagerie de production, mais il semble que ce soit excessif par rapport à la première solution ci-dessus.
- 1. aide d'application d'email. Envoyer un email à composé adresse e-mail qui est redirigé vers email
- 2. Asp.net C# Adresse avec EMail caractère spécial
- 3. Comment exécuter un autre processus en mode débogage?
- 4. Aide au débogage - définir une valeur en mode débogage?
- 5. La configuration de construction ASp.Net est toujours en mode débogage
- 6. ASP.NET SQLMembershipProvider - email en tant qu'utilisateur
- 7. Optimisation - Emails dans une application ASP.NET
- 8. C# Outlook ne déplace pas tous les emails
- 9. SQL: Insérer tous les enregistrements d'une table vers une autre table sans les colonnes spécifiques
- 10. Comment puis-je remplacer toutes les adresses hotmail.com dans un fichier par une autre adresse e-mail, en utilisant Perl?
- 11. Comment vérifier une adresse e-mail en double en PHP, compte tenu de Gmail ([email protected])
- 12. Erreur aléatoire TransactionScope en mode débogage
- 13. Validation des adresses email (ASP.NET)
- 14. Visual Studio désactiver TRACE en mode débogage
- 15. Intercepter les emails SMTP de QMail
- 16. Adresse physique vers GeoLocation UK
- 17. Envoi email en Java
- 18. Valider les emails avec Bash
- 19. Rebobiner une socket vers une autre interface
- 20. Accélération de Tomcat en mode débogage avec Eclipse IDE
- 21. Chemin d'accès d'un site Web à un autre en mode de débogage Visual Studio
- 22. ASP.NET MVC MembershipService Email
- 23. Comment puis-je trouver tous les noms de domaine qui se résolvent en une adresse IP?
- 24. MySQL: sélectionne les emails d'une table seulement si ce n'est pas dans une autre table?
- 25. redirigent vers une autre page
- 26. Php liens parse/emails
- 27. redirigent vers une autre page
- 28. Lancer l'application Mail pour vérifier les nouveaux emails
- 29. Application C# windows OK en mode débogage, en mode de sortie défectueux
- 30. MAMP & localhost email
J'ai pensé à cela mais les méthodes sont marquées virtuelles ce qui pourrait vous donner des problèmes si l'objet est casté en tant que SmtpClient. – tvanfosson
je viens d'utiliser les ombres – Shawn