Freigeben über


Senden von Email von einer ASP.NET Web Pages -Website (Razor)

von Tom FitzMacken

In diesem Artikel wird erläutert, wie Sie eine E-Mail-Nachricht von einer Website senden, wenn Sie ASP.NET Web Pages (Razor) verwenden.

Sie lernen Folgendes:

  • So senden Sie eine E-Mail-Nachricht von Ihrer Website.
  • Anfügen einer Datei an eine E-Mail-Nachricht

Dies ist die ASP.NET Funktion, die im Artikel vorgestellt wird:

  • Das WebMail Hilfsprogramm.

Im Tutorial verwendete Softwareversionen

  • ASP.NET Web Pages (Razor) 3

Dieses Tutorial funktioniert auch mit ASP.NET Web Pages 2.

Senden Email Nachrichten von Ihrer Website

Es gibt alle möglichen Gründe, warum Sie möglicherweise E-Mails von Ihrer Website senden müssen. Sie können Bestätigungsmeldungen an Benutzer senden oder Benachrichtigungen an sich selbst senden (z. B. dass ein neuer Benutzer registriert ist). Der WebMail Helfer erleichtert Ihnen das Senden von E-Mails.

Um das WebMail Hilfsprogramm verwenden zu können, müssen Sie Zugriff auf einen SMTP-Server haben. (SMTP steht für Simple Mail Transfer Protocol.) Ein SMTP-Server ist ein E-Mail-Server, der Nachrichten nur an den Server des Empfängers weiterleitet – er ist die ausgehende Seite der E-Mail. Wenn Sie einen Hostinganbieter für Ihre Website verwenden, richtet dieser Sie wahrscheinlich mit E-Mail ein, und er kann Ihnen mitteilen, wie Ihr SMTP-Servername lautet. Wenn Sie in einem Unternehmensnetzwerk arbeiten, kann ihnen in der Regel ein Administrator oder Ihre IT-Abteilung die Informationen zu einem SMTP-Server zur Verfügung stellen, den Sie verwenden können. Wenn Sie zu Hause arbeiten, können Sie möglicherweise sogar mit Ihrem normalen E-Mail-Anbieter testen, der Ihnen den Namen des SMTP-Servers mitteilen kann. In der Regel benötigen Sie Folgendes:

  • Der Name des SMTP-Servers.
  • Die Portnummer. Das sind fast immer 25. Ihr ISP erfordert jedoch möglicherweise, dass Sie Port 587 verwenden. Wenn Sie Secure Sockets Layer (SSL) für E-Mails verwenden, benötigen Sie möglicherweise einen anderen Port. Wenden Sie sich an Ihren E-Mail-Anbieter.
  • Anmeldeinformationen (Benutzername, Kennwort).

In diesem Verfahren erstellen Sie zwei Seiten. Die erste Seite verfügt über ein Formular, in dem Benutzer eine Beschreibung eingeben können, als ob sie ein Formular für den technischen Support ausfüllen würden. Die erste Seite übermittelt ihre Informationen an eine zweite Seite. Auf der zweiten Seite extrahiert code die Benutzerinformationen und sendet eine E-Mail-Nachricht. Außerdem wird eine Meldung angezeigt, die bestätigt, dass der Problembericht empfangen wurde.

[Screenshot zeigt eine Meldung, die bestätigt, dass der Problembericht empfangen wurde.]

Hinweis

Um dieses Beispiel einfach zu halten, initialisiert der Code das WebMail Hilfsprogramm direkt auf der Seite, auf der Sie es verwenden. Für echte Websites empfiehlt es sich jedoch, initialisierungscode wie diesen in einer globalen Datei zu platzieren, damit Sie das WebMail Hilfsprogramm für alle Dateien auf Ihrer Website initialisieren. Weitere Informationen finden Sie unter Anpassen des Site-Wide Verhaltens für ASP.NET Web Pages.

  1. Erstellen Sie eine neue Website.

  2. Fügen Sie eine neue Seite namens EmailRequest.cshtml hinzu, und fügen Sie das folgende Markup hinzu:

    <!DOCTYPE html>
    <html>
    <head>
        <title>Request for Assistance</title>
    </head>
    <body>
      <h2>Submit Email Request for Assistance</h2>
      <form method="post" action="ProcessRequest.cshtml">
        <div>
            Your name:
            <input type="text" name="customerName" />
        </div>
    
        <div>
            Your email address:
            <input type="text" name="customerEmail" />
        </div>
    
        <div>
            Details about your problem: <br />
            <textarea name="customerRequest" cols="45" rows="4"></textarea>
        </div>
    
        <div>
            <input type="submit" value="Submit" />
        </div>
      </form>
    </body>
    </html>
    

    Beachten Sie, dass das action Attribut des Formularelements auf ProcessRequest.cshtml festgelegt wurde. Dies bedeutet, dass das Formular an diese Seite gesendet wird, anstatt an die aktuelle Seite zurückzukehren.

  3. Fügen Sie der Website eine neue Seite namens ProcessRequest.cshtml hinzu, und fügen Sie den folgenden Code und markup hinzu:

    @{
        var customerName = Request["customerName"];
        var customerEmail = Request["customerEmail"]; 
        var customerRequest = Request["customerRequest"];
        var errorMessage = "";
        var debuggingFlag = false;
        try {
            // Initialize WebMail helper
            WebMail.SmtpServer = "your-SMTP-host";
            WebMail.SmtpPort = 25;
            WebMail.UserName = "your-user-name-here";
            WebMail.Password = "your-account-password";
            WebMail.From = "your-email-address-here";
    
            // Send email
            WebMail.Send(to: customerEmail,
                subject: "Help request from - " + customerName,
                body: customerRequest
            );
        }
        catch (Exception ex ) {
            errorMessage = ex.Message;
        }
    }
    <!DOCTYPE html>
    <html>
    <head>
      <title>Request for Assistance</title>
    </head>
    <body>
      <p>Sorry to hear that you are having trouble, <b>@customerName</b>.</p>
        @if(errorMessage == ""){
          <p>An email message has been sent to our customer service
             department regarding the following problem:</p>
          <p><b>@customerRequest</b></p>
        }
        else{
            <p><b>The email was <em>not</em> sent.</b></p>
            <p>Please check that the code in the ProcessRequest page has 
               correct settings for the SMTP server name, a user name, 
               a password, and a "from" address.
            </p>
            if(debuggingFlag){
                <p>The following error was reported:</p>
                <p><em>@errorMessage</em></p>
            }
        }
    </body>
    </html>
    

    Im Code erhalten Sie die Werte der Formularfelder, die an die Seite übermittelt wurden. Anschließend rufen Sie die WebMail -Methode des Hilfsprogrammes Send auf, um die E-Mail-Nachricht zu erstellen und zu senden. In diesem Fall bestehen die zu verwendenden Werte aus Text, den Sie mit den Werten verketten, die aus dem Formular übermittelt wurden.

    Der Code für diese Seite befindet sich in einem try/catch -Block. Wenn der Versuch, eine E-Mail zu senden, aus irgendeinem Grund nicht funktioniert (z. B. die Einstellungen nicht richtig sind), wird der Code im catch Block ausgeführt und die errorMessage Variable auf den aufgetretenen Fehler festgelegt. (Weitere Informationen zu try/catch Blöcken oder dem <text> Tag finden Sie unter Einführung in die ASP.NET Web Pages Programmierung mithilfe der Razor-Syntax.)

    Wenn die errorMessage Variable im Text der Seite leer ist (Standard), wird dem Benutzer eine Nachricht angezeigt, dass die E-Mail-Nachricht gesendet wurde. Wenn die errorMessage Variable auf true festgelegt ist, wird dem Benutzer eine Meldung angezeigt, dass beim Senden der Nachricht ein Problem aufgetreten ist.

    Beachten Sie, dass im Teil der Seite, in dem eine Fehlermeldung angezeigt wird, ein zusätzlicher Test vorhanden ist: if(debuggingFlag). Dies ist eine Variable, die Sie auf TRUE festlegen können, wenn Sie Probleme beim Senden von E-Mails haben. Wenn debuggingFlag true ist und ein Problem beim Senden von E-Mails vorliegt, wird eine zusätzliche Fehlermeldung angezeigt, die zeigt, was ASP.NET beim Senden der E-Mail gemeldet hat. Faire Warnung: Die Fehlermeldungen, die ASP.NET melden, wenn keine E-Mail-Nachricht gesendet werden kann, können generisch sein. Wenn ASP.NET beispielsweise keine Verbindung mit dem SMTP-Server herstellen kann (z. B. weil Sie einen Fehler im Servernamen gemacht haben), lautet Failure sending mailder Fehler .

    Hinweis

    Wichtig Wenn Sie eine Fehlermeldung von einem Ausnahmeobjekt (ex im Code) erhalten, übergeben Sie diese Nachricht nicht routinemäßig an Benutzer. Ausnahmeobjekte enthalten häufig Informationen, die Benutzern nicht angezeigt werden sollten und die sogar ein Sicherheitsrisiko sein können. Aus diesem Grund enthält dieser Code die Variable debuggingFlag , die als Schalter zum Anzeigen der Fehlermeldung verwendet wird, und warum die Variable standardmäßig auf false festgelegt ist. Sie sollten diese Variable nur dann auf true festlegen (und daher die Fehlermeldung anzeigen), wenn beim Senden von E-Mails ein Problem auftritt und Sie debuggen müssen. Nachdem Sie probleme behoben haben, legen Sie wieder auf false fest debuggingFlag .

    Ändern Sie die folgenden E-Mail-bezogenen Einstellungen im Code:

    • Legen Sie your-SMTP-host auf den Namen des SMTP-Servers fest, auf den Sie Zugriff haben.

    • Legen Sie auf den Benutzernamen für Ihr SMTP-Serverkonto fest your-user-name-here .

    • Legen Sie auf das Kennwort für Ihr SMTP-Serverkonto fest your-account-password .

    • Legen Sie auf Ihre eigene E-Mail-Adresse fest your-email-address-here . Dies ist die E-Mail-Adresse, von der die Nachricht gesendet wird. (Einige E-Mail-Anbieter lassen die Angabe einer anderen From Adresse nicht zu und verwenden Ihren Benutzernamen als From Adresse.)

      Tipp

      Konfigurieren von Email-Einstellungen

      Es kann manchmal eine Herausforderung sein, sicherzustellen, dass Sie über die richtigen Einstellungen für den SMTP-Server, die Portnummer usw. verfügen. Im Folgenden einige Tipps:

      • Der Name des SMTP-Servers lautet häufig wie smtp.provider.com oder smtp.provider.net. Wenn Sie Ihre Website jedoch bei einem Hostinganbieter veröffentlichen, kann der SMTP-Servername an diesem Punkt lauten localhost. Dies liegt daran, dass der E-Mail-Server aus Sicht Ihrer Anwendung lokal sein kann, nachdem Sie veröffentlicht haben und Ihre Website auf dem Server des Anbieters ausgeführt wird. Diese Änderung der Servernamen kann bedeuten, dass Sie den SMTP-Servernamen im Rahmen Ihres Veröffentlichungsprozesses ändern müssen.
      • Die Portnummer ist in der Regel 25. Einige Anbieter erfordern jedoch, dass Sie Port 587 oder einen anderen Port verwenden.
      • Stellen Sie sicher, dass Sie die richtigen Anmeldeinformationen verwenden. Wenn Sie Ihre Website bei einem Hostinganbieter veröffentlicht haben, verwenden Sie die Anmeldeinformationen, die der Anbieter speziell für E-Mails angegeben hat. Diese können sich von den Anmeldeinformationen unterscheiden, die Sie zum Veröffentlichen verwenden.
      • Manchmal benötigen Sie überhaupt keine Anmeldeinformationen. Wenn Sie E-Mails mit Ihrem persönlichen ISP senden, kennt Ihr E-Mail-Anbieter möglicherweise bereits Ihre Anmeldeinformationen. Nach der Veröffentlichung müssen Sie möglicherweise andere Anmeldeinformationen als beim Testen auf Ihrem lokalen Computer verwenden.
      • Wenn Ihr E-Mail-Anbieter Verschlüsselung verwendet, müssen Sie auf truefestlegenWebMail.EnableSsl.
  4. Führen Sie die Seite EmailRequest.cshtml in einem Browser aus. (Stellen Sie sicher, dass die Seite im Arbeitsbereich Dateien ausgewählt ist , bevor Sie sie ausführen.)

  5. Geben Sie Ihren Namen und eine Problembeschreibung ein, und klicken Sie dann auf die Schaltfläche Senden . Sie werden zur Seite ProcessRequest.cshtml weitergeleitet, die Ihre Nachricht bestätigt und Ihnen eine E-Mail-Nachricht sendet.

    [Screenshot: Seite

Senden einer Datei mithilfe von Email

Sie können auch Dateien senden, die an E-Mail-Nachrichten angefügt sind. In diesem Verfahren erstellen Sie eine Textdatei und zwei HTML-Seiten. Sie verwenden die Textdatei als E-Mail-Anlage.

  1. Fügen Sie auf der Website eine neue Textdatei hinzu, und benennen Sie sie MyFile.txt.

  2. Kopieren Sie den folgenden Text, und fügen Sie ihn in die Datei ein:

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

  3. Erstellen Sie eine Seite mit dem Namen SendFile.cshtml , und fügen Sie das folgende Markup hinzu:

    <!DOCTYPE html>
    <html>
    <head>
        <title>Attach File</title>
    </head>
    <body>
      <h2>Submit Email with Attachment</h2>
      <form method="post" action="ProcessFile.cshtml">
        <div>
            Your name:
            <input type="text" name="customerName" />
        </div>
    
        <div>
            Your email address:
            <input type="text" name="customerEmail" />
        </div>
    
        <div>
            Subject line: <br />
            <input type="text" size= 30 name="subjectLine" />
        </div>
    
        <div>
            File to attach: <br />
            <input type="text" size=60 name="fileAttachment" />
        </div>
    
        <div>
            <input type="submit" value="Submit" />
        </div>
      </form>
    </body>
    </html>
    
  4. Erstellen Sie eine Seite mit dem Namen ProcessFile.cshtml , und fügen Sie das folgende Markup hinzu:

    @{
        var customerName = Request["customerName"];
        var customerEmail = Request["customerEmail"]; 
        var customerRequest = Request["customerRequest"];
        var subjectLine = Request["subjectLine"];
        var fileAttachment = Request["fileAttachment"];
        var errorMessage = "";
        var debuggingFlag = false;
    
        try {
            // Initialize WebMail helper
            WebMail.SmtpServer = "your-SMTP-host";
            WebMail.SmtpPort = 25;
            WebMail.UserName = "your-user-name-here";
            WebMail.Password = "your-account-password";
            WebMail.From = "your-email-address-here";
    
            // Create array containing file name
            var filesList = new string [] { fileAttachment };
    
            // Attach file and send email
            WebMail.Send(to: customerEmail,
                subject: subjectLine,
                body: "File attached. <br />From: " + customerName,
                filesToAttach: filesList);
        }
        catch (Exception ex ) {
            errorMessage = ex.Message;
        }
    }
    <!DOCTYPE html>
    <html>
    <head>
        <title>Request for Assistance</title>
    </head>
    <body>
      <p>Sorry to hear that you are having trouble, <b>@customerName</b>.</p>
        @if(errorMessage == ""){
            <p><b>@customerName</b>, thank you for your interest.</p>
            <p>An email message has been sent to our customer service
               department with the <b>@fileAttachment</b> file attached.</p>
        }
        else{
            <p><b>The email was <em>not</em> sent.</b></p>
            <p>Please check that the code in the ProcessRequest page has 
               correct settings for the SMTP server name, a user name, 
               a password, and a "from" address.
            </p>
            if(debuggingFlag){
                <p>The following error was reported:</p>
                <p><em>@errorMessage</em></p>
            }
        }
    </body>
    </html>
    
  5. Ändern Sie die folgenden E-Mail-bezogenen Einstellungen im Code aus dem Beispiel:

    • Legen Sie your-SMTP-host auf den Namen eines SMTP-Servers fest, auf den Sie Zugriff haben.
    • Legen Sie auf den Benutzernamen für Ihr SMTP-Serverkonto fest your-user-name-here .
    • Legen Sie auf Ihre eigene E-Mail-Adresse fest your-email-address-here . Dies ist die E-Mail-Adresse, von der die Nachricht gesendet wird.
    • Legen Sie auf das Kennwort für Ihr SMTP-Serverkonto fest your-account-password .
    • Legen Sie auf Ihre eigene E-Mail-Adresse fest target-email-address-here . (Wie zuvor würden Sie normalerweise eine E-Mail an eine andere Person senden, aber zum Testen können Sie sie an sich selbst senden.)
  6. Führen Sie die Seite SendFile.cshtml in einem Browser aus.

  7. Geben Sie Ihren Namen, eine Betreffzeile und den Namen der anzufügenden Textdatei ein (MyFile.txt).

  8. Klicken Sie auf die Schaltfläche Submit. Wie zuvor werden Sie zur Seite ProcessFile.cshtml umgeleitet, die Ihre Nachricht bestätigt und Ihnen eine E-Mail-Nachricht mit der angefügten Datei sendet.

Zusätzliche Ressourcen