2008-08-27 12 views
10

Ich möchte, dass mein Programm mir Fehlermeldungen senden kann. Wie kann ich dies tun, ohne einen Benutzernamen/Passwort/SMTP-Server/etc. in den Code? (Das würde den Benutzern ermöglichen, das Programm zu dekompilieren und dieses E-Mail-Konto zu übernehmen.)So senden Sie E-Mails von einem Programm _without_ mit einem bereits vorhandenen Konto?

Mir wurde gesagt, dass Sie mit Telnet zu Port 25 etwas tun können, aber ich bin sehr verschwommen auf die Details. Die meisten Code-Snippets bei Google gehen davon aus, dass Sie über ein bereits vorhandenes Konto verfügen, das in dieser Situation nicht funktioniert.

Ich benutze .NET v3.5 (C# insbesondere), aber ich würde mir vorstellen, dass die Ideen in den meisten Sprachen ähnlich genug sind. Solange du erkennst, dass ich das für eine Offline-App mache und mir keinen PHP-Code oder etwas anderes liefere, sollten wir in Ordnung sein.

Antwort

8

Solange Ihr Konto auf gmail.com ist, richten Sie gmail-smtp-in.l.google.com als ausgehenden SMTP-Server in Ihrem Programm. Sie müssen kein Passwort angeben, um E-Mails an Google Mail-Konten zu senden, wenn Sie diesen Server verwenden.

+0

Was ist, wenn Sie an: Adresse ist keine Google Mail-Adresse? Was sind gute Alternativen für diese Situation? – greg7gkb

1

Wenn das Programm Sie direkt per E-Mail erreichen muss, muss es diese Informationen irgendwie erhalten, damit ein entschlossener Angreifer diese Informationen auch erhalten kann.

Haben Sie in Erwägung gezogen, ein einfaches http-Formular oder einen Webservice irgendwo zu hosten, damit Sie die benötigten Informationen dort eingeben können (keine Authentifizierung erforderlich) und entweder speichern, um sie später manuell anzusehen, oder die E-Mail senden von diesem Server?

7

Ich würde einen Webservice zum Herstellen einer Verbindung erstellen. Dieser Webservice sollte die E-Mail basierend auf den von Ihrem Programm bereitgestellten Daten senden. Alle sensiblen Zugangsdaten werden auf der Webservice-Seite gespeichert, so dass es sicherer ist.

0

Ich denke, der beste Plan wäre, die Fehlerinformationen an einen Dienst (im einfachen Fall ein Webformular) unter Ihrer Kontrolle zu senden, der dann eine E-Mail senden könnte (oder sie auf andere geeignete Weise protokolliert). .

Wenn angenommen wird, dass das Senden der E-Mail für den Endbenutzer von Vorteil ist, kann der Benutzer seinen eigenen SMTP-Server (und Benutzernamen/Passwort) eingeben - Auf Unix-Systemen können Sie möglicherweise nur verwenden sendmail und verlassen sich auf den Benutzer, um es richtig zu konfigurieren. Ich habe früher an einem System gearbeitet, das diesen Ansatz nutzte, um den Benutzern Berichte über die geplanten Aufgaben des Systems zu schicken, und das funktionierte ziemlich gut.

-1
MailMessage msg = new MailMessage("[email protected]", "[email protected]"); 
msg.Subject = "Check it out!"; 
msg.Body = "Visit stackoverflow.com!"; 
SmtpClient client = new SmtpClient("some.smtp.server", 25); 
client.Send(msg); 
0

Was müssen Sie den SMTP-Server des ISP zu tun ist, zu wissen Sie verwenden, weil, wenn Sie den SMTP-Server Ihres eigenen ISP verwenden, werden Sie nicht so tun, E-Mail-Relay Spam betrachtet, so dass Sie gehen können, ohne Authentifizierung.

Leider ist es nicht immer möglich, dass die Informationen leicht zu bekommen oder es gibt einige kleine Ausnahme, die nicht im Stich lassen würde melden Sie sich an anonym mögen, wenn Sie Exchange in einem Unternehmen verwenden ...

Zuerst dachte ich, über die Verschlüsselung Ihrer Informationen und entschlüsseln sie während der Laufzeit, aber es wäre immer noch verfügbar durch Schnüffeln der Netzwerkkarte. Sie können das jedoch mit einem Webservice kombinieren, der die Entschlüsselung und das Versenden für Sie übernimmt (oder direkt Informationen an den Webservice sendet, die Sie bevorzugen), wie es bereits von anderen vorgeschlagen wurde.