Frage

Gibt es trotzdem, alle E-Mails an eine andere Adresse gehen zu haben, wenn System.Web.HttpContext.Current.IsDebuggingEnabled wahr ist? Oder brauche ich eine neue Klasse, die ich E-Mail sendet überall benutzen?

War es hilfreich?

Lösung

Wir verwenden eine ähnliche Lösung für die Mailproxy-Methode von tvanfosson beschrieben. Allerdings haben wir einige Unterschiede, die ich fühle, sind erwähnenswert. Die erste ist, dass wir einfach die SmtpClient Klasse erweitern und die Sende Methoden, wenn sie in einer Entwicklungs- oder Testumgebung außer Kraft setzen. Wir verwenden eine Konfigurationsdatei, die Umwelt zu bestimmen. Wir verwenden dann diese Klasse zu jeder Zeit brauchen wir E-Mails zu versenden. Diese Klasse wird bestimmen, wer zur Zeit in der Anwendung angemeldet ist und alle E-Mails, um sie mit einem Failover auf einem Standard-Liste der Empfänger erzeugt umleiten, wenn der angemeldete Benutzer ist aus irgendeinem Grund nicht verfügbar ist. Dies hilft, wenn man mehrere Leute haben, die testen oder entwickeln, da sie nur die E-Mails bekommen sie generiert. Wir voranstellen, auch den ursprünglichen Empfänger der Nachricht an dem Körper der Nachricht. Dies wiederum ist nützlich, wenn Workflow-Typ-Nachrichten zu testen, um sicherzustellen, dass sie an die richtigen Personen gehen. Schließlich finde ich es sinnvoll ist, einen [DEV] oder [QA] Tag auf den Betreff der Nachricht hinzuzufügen, so dass ich eine Regel in meinem Mail-Client einrichten kann alle Tests Nachrichten zu verarbeiten.

Andere Tipps

Ich habe einen SMTP-Server einrichten und Ihren Webapp Einsatz hat, dass als Postausgangsserver (in einer Art Config angegeben). Für Produktionsstätten, verhalten würde der Server normal, aber für das Debuggen, können Sie einen SMTP-Server, um alle E-Mails an Ihre Adresse der Wahl konfigurieren. Dies hat den Vorteil, nicht Ihre App überhaupt zu verändern, was nützlich sein kann, wenn das Verhalten zu ändern Fehler von auftretendem verhindert, dass Sie zu reproduzieren sind versuchen, etc. Meine Firma nutzt diesen Ansatz für QA und es funktioniert ganz gut.

Sie entweder könnte dies überall in Ihrem Code setzen Sie es verwenden:

if (System.Web.HttpContext.Current.IsDebuggingEnabled)
{
 mail.To = "debug@debug.com";
}
else
{
 mail.To = recipientAddress;
}

Oder baut nur eine einfache Wrapper für das bekommen von E-Mail-Adressen (sogar etwas in dem Getter des Verfahrens für die Empfängeradressen funktionieren würde) oder einen Wrapper für die ganze SmtpClient oder Mailmessage-Klasse.

Ich habe um ehrlich zu sein ich gute alte verwenden

#if DEBUG
    Mail.To("debug@debugaddress.com");
#else
    Mail.To("actualrecipient@destinationaddress.com");
#endif

So stoppen Sie mir Debug-Code mit in meiner Produktion Anwendungen im Umlauf. Ein Ansatz, den ich für den Datenbankzugriff verwenden ist, einen DNS-Eintrag zu verwenden, das heißt database1.domain.com und in die Hosts auf meiner Dev-Maschine-Datei verweist es auf meinem lokalen System und auf meine Produktionsmaschine weist sie auf dem Datenbankserver. Sie könnten etwas ähnliches verwenden, um einen Debug-Mail-Server haben und einen Produktions Mail-Server, aber es Overkill oben auf die erste Lösung im Vergleich zu sein scheint.

Der beste Weg, dies zu umgehen, denke ich, ist über eine Proxy-Klasse für den Mail-Client. Wenn Sie die Proxy-Klasse erstellen Sie einen Parameter verwenden, um anzuzeigen, ob im Debug-Modus oder nicht zu arbeiten. Lassen Sie den Proxy unterstützt die gleiche Schnittstelle wie der Mail-Client, aber leise ersetzt die ausgehenden E-Mail-Adressen, wenn es im Debug-Modus betrieben wird.

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 );
     }

     ...
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top