Letztes Update: 31.10.2015
SMTP (Simple Mail Transfer Protocol) wird zum Versenden von E-Mails über das Internet verwendet. Dieses Protokoll gibt an, wie Mailserver während der Übertragung interagieren Email.
Um mit dem SMTP-Protokoll zu arbeiten und E-Mails in .NET zu versenden, ist die SmtpClient-Klasse aus dem System.Net.Mail-Namespace vorgesehen.
Diese Klasse definiert eine Reihe von Eigenschaften, mit denen Sie den Versand anpassen können:
Host: SMTP-Server, von dem E-Mails gesendet werden. Beispiel: smtp.yandex.ru
Port: Der vom smp-Server verwendete Port. Wenn nicht angegeben, wird standardmäßig Port 25 verwendet.
Anmeldeinformationen: Absender-Authentifizierungsdaten
EnableSsl: Gibt an, ob verwendet werden soll SSL-Protokoll wenn du sendest
Eine weitere Schlüsselklasse, die beim Senden verwendet wird, ist MailMessage . Diese Klasse repräsentiert die gesendete Nachricht. Zu seinen Eigenschaften gehören die folgenden:
Anhänge: enthält alle E-Mail-Anhänge
Body: direkt der Text des Briefes
Von: Adresse des Absenders. Stellt ein MailAddress-Objekt dar
An: Adresse des Empfängers. Stellt auch ein MailAddress-Objekt dar
Betreff: definiert den Betreff der E-Mail
IsBodyHtml: Gibt an, ob die E-Mail Inhalte mit HTML-Code darstellt
Lassen Sie uns diese Klassen verwenden und die E-Mail senden:
Verwenden des Systems; mit System.Net; mit System.IO; mit System.Threading.Tasks; mit System.Net.Mail; namespace NetConsoleApp ( class Program ( static void Main(string args) ( // sender - setze die Adresse und den im Brief angezeigten Namen MailAddress from = new MailAddress(" [E-Mail geschützt]", "Tom"); // an wen wir MailAddress schicken = new MailAddress(" [E-Mail geschützt]"); // Nachrichtenobjekt erstellen MailMessage m = new MailMessage(from, to); // Betreff mailen m.Subject = "Test"; // Mailtext m.Body = "
Brieftest des SMTP-Clients
"; // Buchstabe repräsentiert HTML Quelltext m.IsBodyHtml = wahr; // Adresse des SMTP-Servers und Port, von dem wir einen Brief senden SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); // Login und Passwort smtp.Credentials = new NetworkCredential(" [E-Mail geschützt]", "mypassword"); smtp.EnableSsl = true; smtp.Send(m); Console.Read(); ) ) )Zum Senden wird die Send()-Methode verwendet, in der das MailMessage-Objekt übergeben wird.
Wir können auch die asynchrone Version des Sendens mit der Methode SendMailAsync verwenden:
Verwenden des Systems; mit System.Net; mit System.IO; mit System.Threading.Tasks; mit System.Net.Mail; namespace NetConsoleApp ( class Program ( static void Main(string args) ( SendEmailAsync().GetAwaiter(); Console.Read(); ) private static async Task SendEmailAsync() ( MailAddress from = new MailAddress(" [E-Mail geschützt]", "Tom"); MailAdresse an = neue MailAdresse(" [E-Mail geschützt]"); MailMessage m = new MailMessage(from, to); m.Subject = "Test"; m.Body = "Smtp client work test letter 2"; SmtpClient smtp = new SmtpClient("smtp.gmail.com" , 587 ); smtp.Credentials = new NetworkCredential(" [E-Mail geschützt]", "mypassword"); smtp.EnableSsl = true; warte auf smtp.SendMailAsync(m); Console.WriteLine("Mail gesendet"); ) ) )
Anhänge hinzufügen
Mit der Eigenschaft Attachments können wir Anhänge an E-Mails anhängen. Jeder Anhang stellt ein System.Net.Mail.Attachment-Objekt dar:
MailAdresse von = neue MailAdresse(" [E-Mail geschützt]", "Tom"); MailAdresse an = neue MailAdresse(" [E-Mail geschützt]"); MailMessage m = new MailMessage(from, to); m.Attachments.Add(new Attachment("D://temlog.txt"));
Schiffskommandant 14. Oktober 2013 um 19:29 UhrSenden Sie E-Mails programmgesteuert mit verschiedenen Diensten
- .Netz,
Sehr oft muss man sich mit dem Versenden auseinandersetzen E-Mails aus Programmcode. Sie müssen nicht lange nach Beispielen suchen.
Dieser Artikel ist ein Hinweis und verrät nichts Neues, aber bevor ich ihn geschrieben habe, habe ich im Internet ähnlich gesucht und war ziemlich überrascht, dass sie fast überall entweder eine nicht funktionierende oder veraltete Lösung anbieten oder einfach Analphabeten geschrieben sind.
Das erste, was Sie mit diesen Beispielen nicht tun sollten, ist die Verwendung von System.Web.Mail, das seit langem veraltet ist und seitdem visuelles Studio 2010 kann die System.Web-Bibliothek nicht einmal ohne Wissen hinzugefügt werden vollständigen Pfad in die entsprechende DLL.
Stattdessen wird vorgeschlagen, die System.Net-Bibliothek zu verwenden.
mit System.Net; mit System.Net.Mail;
Also, das einfachste, es ist auch das wichtigste und am häufigsten verwendete ist das Versenden eines Briefes von Ihnen Mail-Server Der, auf dem der SMTP-Client konfiguriert ist. Wie Sie verstehen, kann der Server entweder derjenige sein, auf dem die Anwendung ausgeführt wird, oder ein entfernter Server, auf dem Sie das Recht haben, Briefe ohne zusätzliche Autorisierung zu senden.
Beispielcode zum Senden von E-Mails von einem lokalen Computer:
Verwendung von E-Mail-Diensten wie Gmail, Yandex, Mail.ru usw. alles ist gleich, nur Parameter mit Autorisierung werden hinzugefügt.
SMTP-Server: smtp.gmail.com
Hafen: 587
using (MailMessage mm = new MailMessage("Name
SMTP-Server: smtp.yandex.ru
Hafen: 25
using (MailMessage mm = new MailMessage("Name
SMTP-Server: smtp.mail.ru
Hafen: 25
using (MailMessage mm = new MailMessage("Name
Wenn Sie haben Briefkasten endet der mail.ru-Dienst mit inbox.ru, list.ru oder bk.ru, dann ändert sich die Adresse des SMTP-Servers (smtp.inbox.ru, smtp.list.ru und smtp.bk.ru) entsprechend.
Wie Sie sehen, müssen Sie, um einen anderen Mail-Dienst in Ihren Programmen zu verwenden, nur die Adresse und den Port des SMTP-Servers sowie die Autorisierungsregeln herausfinden.
Es muss auch daran erinnert werden, dass fast alle E-Mail-Dienste von Drittanbietern die Anzahl der in einem bestimmten Zeitraum gesendeten E-Mails beschränken.
Stichworte: E-Mail, E-Mails senden, SMTP
Eine der am häufigsten nachgefragten Funktionen auf der Website ist das Antrags- oder Bestellformular, dessen Daten an die E-Mail des Eigentümers der Website gesendet werden. In der Regel sind solche Formulare einfach und bestehen aus zwei oder drei Feldern zur Dateneingabe. Wie erstellt man ein solches Bestellformular? Dies erfordert die Verwendung der HTML-Auszeichnungssprache und der Sprache PHP-Programmierung.
Die HTML-Markup-Sprache selbst ist einfach, Sie müssen nur herausfinden, wie und wo bestimmte Tags platziert werden. Bei der Programmiersprache PHP ist die Sache etwas komplizierter.
Es ist für einen Programmierer nicht schwierig, ein solches Formular zu erstellen, aber einige Aktionen können für einen HTML-Codierer schwierig erscheinen.
Erstellen eines HTML-Absendeformulars
Die erste Zeile wird die nächste sein
Lassen Sie uns nun alles zusammenfügen.
Lassen Sie uns nun die Felder im Formular zu Pflichtfeldern machen. Wir haben folgenden Code:
Erstellen Sie eine Datei, die Daten aus einem HTML-Formular akzeptiert
Dies wird eine Datei namens send.php sein
In der Datei müssen Sie in der ersten Phase Daten vom Post-Array empfangen. Dazu erstellen wir zwei Variablen:
$fio = $_POST["fio"];
$email = $_POST["email"];
Variablennamen in PHP wird ein $-Zeichen vorangestellt und am Ende jeder Zeile steht ein Semikolon. $_POST ist ein Array, an das die Daten aus dem Formular übergeben werden. Im HTML-Formular ist die Sendemethode method="post" angegeben. Es werden also zwei Variablen entnommen HTML-Formulare. Um Ihre Website zu schützen, müssen Sie diese Variablen durch mehrere Filter - PHP-Funktionen - leiten.
Die erste Funktion konvertiert alle Zeichen, die der Benutzer versucht, dem Formular hinzuzufügen:
In diesem Fall werden keine neuen Variablen in php erstellt, sondern vorhandene verwendet. Der Filter konvertiert das Zeichen "<" в "<". Также он поступить с другими символами, встречающимися в html коде.
Die zweite Funktion entschlüsselt die URL, wenn der Benutzer versucht, sie dem Formular hinzuzufügen.
$fio = urldecode($fio);
$email = urldecode($email);
Mit der dritten Funktion entfernen wir gegebenenfalls Leerzeichen am Anfang und am Ende der Zeichenfolge:
$fio = trim($fio);
$email = trim($email);
Es gibt andere Funktionen, mit denen Sie PHP-Variablen filtern können. Ihre Verwendung hängt davon ab, wie sehr Sie befürchten, dass ein Angreifer versucht, dieser Form des Datenversands an HTML-Mails Programmcode hinzuzufügen.
Validieren Sie Daten, die vom HTML-Formular an die PHP-Datei übergeben werden
Um zu überprüfen, ob dieser Code funktioniert, wenn die Daten übertragen werden, können Sie ihn einfach mit der Echo-Funktion auf dem Bildschirm anzeigen:
echo $fio;
Echo "
";
echo $email;
Die zweite Zeile hier wird benötigt, um die Ausgabe von PHP-Variablen in verschiedene Zeilen aufzuteilen.
Senden der empfangenen Daten aus dem HTML-Formular an die E-Mail mit PHP
Um Daten an die E-Mail zu senden, müssen Sie die E-Mail-Funktion in PHP verwenden.
mail("an welche Adresse gesendet werden soll", "Betreff des Briefes", "Nachricht (Text des Briefes)","Von: von welcher E-Mail der Brief gesendet wird \r\n");
Beispielsweise müssen Sie Daten an die E-Mail-Adresse des Eigentümers oder Managers der Website senden [E-Mail geschützt]
Der Betreff der E-Mail sollte klar sein, und die Nachricht der E-Mail sollte enthalten, was der Benutzer im HTML-Formular angegeben hat.
mail(" [E-Mail geschützt]", "Anwendung von der Website", "Name:".$fio.". E-Mail: ".$email ,"Von: [E-Mail geschützt]\r\n");
Sie müssen eine Bedingung hinzufügen, die überprüft, ob das Formular mit PHP an die angegebene E-Mail-Adresse gesendet wurde.
wenn (mail(" [E-Mail geschützt]", "Auf der Website bestellen", "Name:".$fio.". E-Mail: ".$email ,"Von: [E-Mail geschützt]\r\n"))
{
echo "Nachricht erfolgreich gesendet";
) anders (
}
Der Programmcode der send.php-Datei, die die HTML-Formulardaten an die Mail sendet, sieht also folgendermaßen aus:
$fio = $_POST["fio"];
$email = $_POST["email"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$fio = trim($fio);
$email = trim($email);
//echo $fio;
// echo "
";
//echo $email;
wenn (mail(" [E-Mail geschützt]", "Anwendung von der Website", "Name:".$fio.". E-Mail: ".$email ,"Von: [E-Mail geschützt]\r\n"))
( echo "Nachricht erfolgreich gesendet";
) anders (
echo "Fehler beim Senden der Nachricht aufgetreten";
}?>
Die drei Zeilen zur Überprüfung, ob Daten an die Datei übergeben werden, sind auskommentiert. Bei Bedarf können sie entfernt werden, da sie nur zum Debuggen benötigt wurden.
Platzieren Sie HTML- und PHP-Formularübermittlungscode in einer Datei
In den Kommentaren zu diesem Artikel fragen viele Leute, wie man sowohl das HTML-Formular als auch den PHP-Code zum Senden von Daten an die E-Mail in einer Datei zusammenfasst, nicht in zwei.
Um diese Arbeit zu implementieren, müssen Sie den HTML-Code des Formulars in die Datei send.php einfügen und eine Bedingung hinzufügen, die das Vorhandensein von Variablen im POST-Array prüft (dieses Array wird vom Formular übergeben). Das heißt, wenn die Variablen im Array nicht vorhanden sind, müssen Sie dem Benutzer ein Formular zeigen. Andernfalls müssen Sie die Daten aus dem Array nehmen und an den Adressaten senden.
Sehen wir uns an, wie man den PHP-Code in der send.php-Datei ändert:
//überprüfen, ob Variablen im POST-Array vorhanden sind
if(!isset($_POST["fio"]) und !isset($_POST["email"]))(
?> ) anders (
//Formular anzeigen
$fio = $_POST["fio"];
$email = $_POST["email"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$fio = trim($fio);
$email = trim($email);
wenn (mail(" [E-Mail geschützt]", "Anwendung von der Website", "Name:".$fio.". E-Mail: ".$email ,"Von: [E-Mail geschützt]\r\n"))(
echo "Nachricht erfolgreich gesendet";
) anders (
echo "Beim Senden der Nachricht sind Fehler aufgetreten";
}
}
?>
Wir überprüfen die Existenz einer Variablen im POST-Array mit der PHP-Funktion isset(). Ein Ausrufezeichen vor dieser Funktion in einer Bedingung bedeutet Negation. Das heißt, wenn die Variable nicht existiert, müssen wir unser Formular zeigen. Wenn ich kein Ausrufezeichen setzen würde, würde die Bedingung wörtlich bedeuten - "wenn vorhanden, dann zeige das Formular". Und das ist in unserem Fall falsch. Natürlich können Sie es in index.php umbenennen. Wenn Sie die Datei umbenennen, vergessen Sie nicht, den Dateinamen und in der Zeile umzubenennen