2008-09-11 11 views
7

Ich arbeite an einer Windows Forms (.NET 3.5) -Anwendung, die einen integrierten Ausnahme-Handler hat, um alle (Himmel verboten) Ausnahmen zu erfassen, die möglicherweise auftreten. Ich möchte, dass der Ausnahmebehandler den Benutzer auffordern kann, auf die Schaltfläche "Fehlerbericht senden" zu klicken, wodurch die App eine E-Mail an meine FogBugz-E-Mail-Adresse senden würde.Der beste Weg, um eine E-Mail von einer .NET-Anwendung zu senden?

Was ist der beste Weg, dies zu tun, und gibt es irgendwelche "gotchas" zu beachten?

Antwort

3

Sie möchten die SmtpClient-Klasse wie beschrieben verwenden here.
Es gibt keine Probleme - Senden von E-Mails ist so einfach wie es geht.

+3

Wie skalierbar ist es, wenn Sie mit smtp E-Mails an 1000 Ihrer Benutzer senden müssen? Müssen Sie extra Code schreiben um langsamer zu werden, damit der SMTP Server nicht überflutet wird? – Haoest

1

Vielleicht möchten Sie auch die 3rd Party aspNetEmail Bibliothek, die eine Menge von nützlichen Funktionen bietet über was System.Net.Mail bietet Ihnen.

2

In einer kontrollierten Umgebung mit SmtpClient wäre die Antwort. Auf dem Computer eines Benutzers benötigen Sie jedoch einen SMTP-Server zum Senden.

Sie könnten den Benutzer nach seinen SMTP-Anmeldeinformationen fragen, aber ich denke, das wäre für Ihren Fall nicht praktikabel. Als Benutzer möchte ich meine SMTP-Anmeldeinformationen nicht einer zufälligen App zur Verfügung stellen (denke SPAM). Außerdem möchten Sie Ihre eigenen SMTP-Anmeldeinformationen nicht fest in die App codieren. Es wäre für einen böswilligen Benutzer trivial, diese Anmeldeinformationen zu erkennen und Ihren Server zum Senden von SPAM zu verwenden.

Idealerweise können Sie den E-Mail-Agenten des Benutzers zum Senden der E-Mail verwenden. Ich dachte, Sie könnten eine mailto: URL formulieren und ausführen, aber ich bin mir nicht sicher, ob Sie in der Lage sein könnten, den Hauptteil oder irgendwelche Anhänge für die Nachricht anzugeben.

+0

Die Syntax lautet mailto: [email protected]? Subject = Hello & body = Welt! Parameter müssen url-escaped sein – rpetrich

6

Sie sollten sich keine Sorgen über die Anmeldeinformationen des Clients machen und nur den von Esteban vorgeschlagenen SmtpClient verwenden. Sie benötigen den Benutzer, um eine gültige Smtp-Server-URL bei der Konfiguration anzugeben, aber die meisten ISPs erlauben anonymes SMTP, vorausgesetzt, Sie befinden sich in ihrem Netzwerk (einem ihrer Clients) - solange der Benutzer die URL für ihren ISPs-SMTP-Server eingibt Leute würden keine Probleme haben.

Hinweis: Es gibt einen vordefinierten Abschnitt der .config-Datei zum Speichern der Konfigurationsoptionen für das SmtpClient-Objekt. Wenn Sie die Einstellungen dort eingeben, müssen Sie beim Senden einer E-Mail nichts explizit in Ihrem Code festlegen. Ein Beispiel für den Abschnitt ist unten:

<system.net> 
    <mailSettings> 
     <smtp deliveryMethod="Network" from="[email protected]"> 
     <network host="smtp.somewhere.com.au" /> 
     </smtp> 
    </mailSettings> 
</system.net> 

Der Benutzername und das Kennwort sind optional. Intellisense arbeitet für diese Teile der Konfigurationsdatei.

Edit: leichte Korrektur zu meinem Codebeispiel.

+0

Hey! Würden Sie bitte meinen Namen richtig buchstabieren? Danke, Esteban –

2

Sie haben erwähnt, dass Sie Fogbugz verwenden.

Versuchen http://www.fogcreek.com/FogBugz/docs/60/topics/customers/BugzScout.html?isl=59722 oder http://www.fogcreek.com/FogBugz/blog/post/C-wrapper-for-the-FogBugz-API.aspx?isl=59722

Es gibt einige Beispiele-Code um, ich glaube, in Ihrem FB-Verzeichnis installieren. Ich überprüft mit Michael Pryor re: Lizenzierung und er sagte, es war in Ordnung, ihren Code zu verwenden, aber YMMV, also würde ich überprüfen.

Es bietet einen guten Ausgangspunkt.

0

Sie möchten die SmtpClient-Klasse wie beschrieben verwenden here. Es gibt keine Probleme - Senden von E-Mails ist so einfach wie es geht.

Eine umfangreiche System.Net.Mail FAQ befindet sich here.