Udostępnij za pośrednictwem


Wysyłanie Email z witryny ASP.NET Web Pages (Razor)

– autor Tom FitzMacken

W tym artykule wyjaśniono, jak wysyłać wiadomość e-mail z witryny internetowej podczas korzystania z ASP.NET Web Pages (Razor).

Zawartość:

  • Jak wysłać wiadomość e-mail z witryny internetowej.
  • Jak dołączyć plik do wiadomości e-mail.

Jest to funkcja ASP.NET wprowadzona w artykule:

  • Pomocnik WebMail .

Wersje oprogramowania używane w samouczku

  • ASP.NET Web Pages (Razor) 3

Ten samouczek działa również z ASP.NET Web Pages 2.

Wysyłanie wiadomości Email z witryny internetowej

Istnieją różne powody, dla których może być konieczne wysłanie wiadomości e-mail z witryny internetowej. Możesz wysyłać wiadomości potwierdzające do użytkowników lub wysyłać do siebie powiadomienia (na przykład, że nowy użytkownik zarejestrował się). Pomocnik WebMail ułatwia wysyłanie wiadomości e-mail.

Aby korzystać z WebMail pomocnika, musisz mieć dostęp do serwera SMTP. (SMTP to skrót od Simple Mail Transfer Protocol). Serwer SMTP to serwer poczty e-mail, który przekazuje tylko wiadomości do serwera adresata — jest to wychodząca strona poczty e-mail. Jeśli używasz dostawcy hostingu dla witryny internetowej, prawdopodobnie konfigurują Cię za pomocą poczty e-mail i mogą poinformować o nazwie serwera SMTP. Jeśli pracujesz w sieci firmowej, administrator lub dział IT zazwyczaj może podać informacje o serwerze SMTP, którego można użyć. Jeśli pracujesz w domu, możesz nawet przetestować przy użyciu zwykłego dostawcy poczty e-mail, który może podać nazwę serwera SMTP. Zazwyczaj potrzebne są następujące elementy:

  • Nazwa serwera SMTP.
  • Numer portu. To prawie zawsze 25. Jednak usługodawca isp może wymagać użycia portu 587. Jeśli używasz protokołu SECURE Sockets Layer (SSL) do obsługi poczty e-mail, może być potrzebny inny port. Sprawdź u dostawcy poczty e-mail.
  • Poświadczenia (nazwa użytkownika, hasło).

W tej procedurze utworzysz dwie strony. Pierwsza strona ma formularz, który umożliwia użytkownikom wprowadzenie opisu, tak jakby wypełniali formularz pomocy technicznej. Pierwsza strona przesyła swoje informacje na drugą stronę. Na drugiej stronie kod wyodrębnia informacje użytkownika i wysyła wiadomość e-mail. Zostanie również wyświetlony komunikat potwierdzający odebranie raportu o problemie.

[Zrzut ekranu przedstawia komunikat potwierdzający odebranie raportu o problemie.]

Uwaga

Aby ten przykład był prosty, kod inicjuje WebMail pomocnika bezpośrednio na stronie, na której jest używany. Jednak w przypadku rzeczywistych witryn internetowych lepiej jest umieścić kod inicjowania, taki jak ten w pliku globalnym, aby zainicjować WebMail pomocnika dla wszystkich plików w witrynie internetowej. Aby uzyskać więcej informacji, zobacz Dostosowywanie zachowania Site-Wide dla ASP.NET Stron sieci Web.

  1. Utwórz nową witrynę internetową.

  2. Dodaj nową stronę o nazwie EmailRequest.cshtml i dodaj następującą znaczniki:

    <!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>
    

    Zwróć uwagę, że action atrybut elementu formularza został ustawiony na ProcessRequest.cshtml. Oznacza to, że formularz zostanie przesłany do tej strony zamiast z powrotem do bieżącej strony.

  3. Dodaj nową stronę o nazwie ProcessRequest.cshtml do witryny internetowej i dodaj następujący kod i znaczniki:

    @{
        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>
    

    W kodzie uzyskasz wartości pól formularza, które zostały przesłane do strony. Następnie wywołaj metodę WebMail pomocnika Send , aby utworzyć i wysłać wiadomość e-mail. W takim przypadku wartości do użycia składają się z tekstu, który łączy się z wartościami przesłanymi z formularza.

    Kod tej strony znajduje się wewnątrz try/catch bloku. Jeśli z jakiegoś powodu próba wysłania wiadomości e-mail nie zadziała (na przykład ustawienia nie są prawidłowe), kod w przebiegach catch bloków i ustawia zmienną errorMessage na błąd, który wystąpił. (Aby uzyskać więcej informacji na temat try/catch bloków lub tagów <text> , zobacz Wprowadzenie do ASP.NET programowania stron internetowych przy użyciu składni Razor).

    W treści strony, jeśli errorMessage zmienna jest pusta (wartość domyślna), użytkownik zobaczy wiadomość, że wiadomość e-mail została wysłana. Jeśli zmienna errorMessage ma wartość true, użytkownik zobaczy komunikat informujący o problemie z wysłaniem komunikatu.

    Zwróć uwagę, że w części strony, która wyświetla komunikat o błędzie, jest dodatkowy test: if(debuggingFlag). Jest to zmienna, którą można ustawić na wartość true, jeśli masz problemy z wysyłaniem wiadomości e-mail. Jeśli debuggingFlag wartość ma wartość true, a jeśli wystąpił problem podczas wysyłania wiadomości e-mail, zostanie wyświetlony dodatkowy komunikat o błędzie pokazujący, co ASP.NET zgłoszono podczas próby wysłania wiadomości e-mail. Należy jednak pamiętać, że komunikaty o błędach, które ASP.NET zgłaszają, gdy nie można wysłać wiadomości e-mail, mogą być ogólne. Jeśli na przykład ASP.NET nie może skontaktować się z serwerem SMTP (na przykład z powodu błędu w nazwie serwera), błąd to Failure sending mail.

    Uwaga

    Ważne Po wyświetleniu komunikatu o błędzie z obiektu wyjątku (ex w kodzie ) nie przekazuj tego komunikatu do użytkowników. Obiekty wyjątków często zawierają informacje, których użytkownicy nie powinni widzieć i które mogą nawet stanowić lukę w zabezpieczeniach. Dlatego ten kod zawiera zmienną debuggingFlag używaną jako przełącznik do wyświetlania komunikatu o błędzie i dlaczego zmienna jest domyślnie ustawiona na wartość false. Należy ustawić dla tej zmiennej wartość true (i w związku z tym wyświetlić komunikat o błędzie) tylko wtedy, gdy masz problem z wysyłaniem wiadomości e-mail i musisz debugować. Po usunięciu jakichkolwiek problemów ustaw wartość debuggingFlag false.

    Zmodyfikuj następujące ustawienia związane z pocztą e-mail w kodzie:

    • Ustaw your-SMTP-host nazwę serwera SMTP, do którego masz dostęp.

    • Ustaw your-user-name-here wartość na nazwę użytkownika dla konta serwera SMTP.

    • Ustaw your-account-password hasło dla konta serwera SMTP.

    • Ustaw your-email-address-here na własny adres e-mail. Jest to adres e-mail, z którego jest wysyłana wiadomość. (Niektórzy dostawcy poczty e-mail nie pozwalają określić innego From adresu i będą używać nazwy użytkownika jako From adresu).

      Porada

      Konfigurowanie ustawień Email

      Czasami może być wyzwaniem upewnienie się, że masz odpowiednie ustawienia dla serwera SMTP, numeru portu itd. Oto kilka wskazówek:

      • Nazwa serwera SMTP jest często podobna do smtp.provider.com lub smtp.provider.net. Jeśli jednak opublikujesz witrynę u dostawcy hostingu, nazwa serwera SMTP w tym momencie może mieć wartość localhost. Dzieje się tak, ponieważ po opublikowaniu i uruchomieniu witryny na serwerze dostawcy serwer poczty e-mail może być lokalny z perspektywy aplikacji. Ta zmiana nazw serwerów może oznaczać, że konieczna może być zmiana nazwy serwera SMTP w ramach procesu publikowania.
      • Numer portu to zwykle 25. Jednak niektórzy dostawcy wymagają użycia portu 587 lub innego portu.
      • Upewnij się, że używasz odpowiednich poświadczeń. Jeśli witryna została opublikowana u dostawcy hostingu, użyj poświadczeń wskazanych specjalnie przez dostawcę poczty e-mail. Mogą one różnić się od poświadczeń używanych do publikowania.
      • Czasami w ogóle nie są potrzebne poświadczenia. Jeśli wysyłasz wiadomości e-mail przy użyciu osobistego usługodawcy internetowy, twój dostawca poczty e-mail może już znać twoje poświadczenia. Po opublikowaniu może być konieczne użycie innych poświadczeń niż podczas testowania na komputerze lokalnym.
      • Jeśli dostawca poczty e-mail używa szyfrowania, musisz ustawić wartość WebMail.EnableSsltrue.
  4. Uruchom stronę EmailRequest.cshtml w przeglądarce. (Przed uruchomieniem strony upewnij się, że strona jest zaznaczona w obszarze roboczym Pliki ).

  5. Wprowadź nazwę i opis problemu, a następnie kliknij przycisk Prześlij . Nastąpi przekierowanie do strony ProcessRequest.cshtml , która potwierdza twoją wiadomość i która wysyła wiadomość e-mail.

    [Zrzut ekranu przedstawiający stronę Żądania procesu.]

Wysyłanie pliku przy użyciu Email

Możesz również wysyłać pliki dołączone do wiadomości e-mail. W tej procedurze utworzysz plik tekstowy i dwie strony HTML. Użyjesz pliku tekstowego jako załącznika wiadomości e-mail.

  1. W witrynie internetowej dodaj nowy plik tekstowy i nadaj mu nazwę MyFile.txt.

  2. Skopiuj następujący tekst i wklej go w pliku:

    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. Utwórz stronę o nazwie SendFile.cshtml i dodaj następujące znaczniki:

    <!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. Utwórz stronę o nazwie ProcessFile.cshtml i dodaj następujące znaczniki:

    @{
        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. Zmodyfikuj następujące ustawienia związane z pocztą e-mail w kodzie z przykładu:

    • Ustaw your-SMTP-host nazwę serwera SMTP, do którego masz dostęp.
    • Ustaw your-user-name-here wartość na nazwę użytkownika dla konta serwera SMTP.
    • Ustaw your-email-address-here na własny adres e-mail. Jest to adres e-mail, z którego jest wysyłana wiadomość.
    • Ustaw your-account-password hasło dla konta serwera SMTP.
    • Ustaw target-email-address-here na własny adres e-mail. (Tak jak wcześniej zwykle wysyłasz wiadomość e-mail do kogoś innego, ale na potrzeby testowania możesz wysłać ją do siebie).
  6. Uruchom stronę SendFile.cshtml w przeglądarce.

  7. Wprowadź nazwę, wiersz tematu i nazwę pliku tekstowego do dołączenia (MyFile.txt).

  8. Kliknij przycisk Submit. Tak jak wcześniej nastąpi przekierowanie do strony ProcessFile.cshtml , która potwierdza wiadomość i która wysyła wiadomość e-mail z dołączonym plikiem.

Dodatkowe zasoby