Sdílet prostřednictvím


Odesílání Email z webu ASP.NET Web Pages (Razor)

, autor: Tom FitzMacken

Tento článek vysvětluje, jak odeslat e-mailovou zprávu z webu při použití ASP.NET Webové stránky (Razor).

Naučíte se:

  • Jak odeslat e-mailovou zprávu z webu.
  • Jak připojit soubor k e-mailové zprávě.

Toto je funkce ASP.NET představená v článku:

  • Pomocná rutina WebMail .

Verze softwaru použité v kurzu

  • ASP.NET Webové stránky (Razor) 3

Tento kurz funguje také s webovými stránkami ASP.NET 2.

Odesílání Email zpráv z webu

Existují nejrůznější důvody, proč možná budete muset posílat e-maily ze svého webu. Můžete posílat potvrzovací zprávy uživatelům nebo sami sobě (například že se zaregistroval nový uživatel). Tato WebMail pomocná rutina usnadňuje posílání e-mailů.

Pokud chcete pomocnou rutinu WebMail použít, musíte mít přístup k serveru SMTP. (SMTP je zkratka pro Simple Mail Transfer Protocol.) Server SMTP je e-mailový server, který předává zprávy jenom na server příjemce – je to odchozí strana e-mailu. Pokud pro svůj web používáte poskytovatele hostingu, pravděpodobně vám nastavil e-mail a může vám říct, jaký je název vašeho serveru SMTP. Pokud pracujete v podnikové síti, může vám informace o serveru SMTP, které můžete použít, obvykle poskytnout správce nebo vaše IT oddělení. Pokud pracujete doma, možná budete moct testovat pomocí svého běžného poskytovatele e-mailu, který vám řekne název serveru SMTP. Obvykle potřebujete:

  • Název serveru SMTP.
  • Číslo portu To je téměř vždy 25. Váš isp však může vyžadovat, abyste použili port 587. Pokud pro e-mail používáte protokol SSL (Secure Sockets Layer), možná budete potřebovat jiný port. Obraťte se na svého poskytovatele e-mailu.
  • Přihlašovací údaje (uživatelské jméno, heslo)

V tomto postupu vytvoříte dvě stránky. První stránka obsahuje formulář, který uživatelům umožňuje zadat popis, jako by vyplňovali formulář technické podpory. První stránka odešle své informace na druhou stránku. Na druhé stránce kód extrahuje informace o uživateli a odešle e-mailovou zprávu. Zobrazí se také zpráva potvrzující přijetí hlášení problému.

[Snímek obrazovky ukazuje zprávu potvrzující přijetí hlášení problému.]

Poznámka

Aby byl tento příklad jednoduchý, inicializuje WebMail kód pomocníka přímo na stránce, kde ji používáte. U skutečných webů je ale lepší vložit inicializační kód podobný tomuto do globálního souboru, abyste inicializovali WebMail pomocníka pro všechny soubory na webu. Další informace najdete v tématu Přizpůsobení chování Site-Wide pro webové stránky ASP.NET.

  1. Vytvořte nový web.

  2. Přidejte novou stránku s názvem EmailRequest.cshtml a přidejte následující kód:

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

    Všimněte si, že action atribut elementu form byl nastaven na ProcessRequest.cshtml. To znamená, že formulář se odešle na tuto stránku, nikoli zpět na aktuální stránku.

  3. Na web přidejte novou stránku s názvem ProcessRequest.cshtml a přidejte následující kód a kód:

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

    V kódu získáte hodnoty polí formuláře, které byly odeslány na stránku. Pak zavoláte metodu WebMail pomocníka Send , která vytvoří a odešle e-mailovou zprávu. V tomto případě se hodnoty, které se mají použít, skládají z textu, který zřetězení s hodnotami odeslanými z formuláře.

    Kód této stránky je uvnitř try/catch bloku. Pokud pokus o odeslání e-mailu z nějakého důvodu nefunguje (například nastavení není správné), kód v catch bloku se spustí a nastaví errorMessage proměnnou na chybu, ke které došlo. (Další informace o try/catch blocích nebo <text> značce najdete v tématu Úvod do ASP.NET programování webových stránek pomocí syntaxe Razor.)

    Pokud errorMessage je proměnná prázdná (výchozí) v textu stránky, zobrazí se uživateli zpráva, že e-mailová zpráva byla odeslána. Pokud je proměnná errorMessage nastavená na hodnotu true, uživateli se zobrazí zpráva, že při odesílání zprávy došlo k potížím.

    Všimněte si, že v části stránky, která zobrazuje chybovou zprávu, je další test: if(debuggingFlag). Jedná se o proměnnou, kterou můžete nastavit na true, pokud máte potíže s odesíláním e-mailů. Pokud debuggingFlag je hodnota true a při odesílání e-mailu dojde k potížím, zobrazí se další chybová zpráva s informacemi o tom, co ASP.NET při pokusu o odeslání e-mailové zprávy nahlásili. Spravedlivé upozornění: Chybové zprávy, které ASP.NET hlásí, když nemůže odeslat e-mailovou zprávu, můžou být obecné. Pokud například ASP.NET nemůže kontaktovat server SMTP (například proto, že jste udělali chybu v názvu serveru), jedná Failure sending mailse o chybu .

    Poznámka

    Důležité Pokud obdržíte chybovou zprávu z objektu výjimky (ex v kódu), nepředávejte tuto zprávu uživatelům rutinně. Objekty výjimek často obsahují informace, které by se uživatelům neměly zobrazovat a které můžou být dokonce ohrožení zabezpečení. To je důvod, proč tento kód obsahuje proměnnou debuggingFlag , která se používá jako přepínač k zobrazení chybové zprávy, a proč je proměnná ve výchozím nastavení nastavená na false. Tuto proměnnou byste měli nastavit na true (a proto zobrazit chybovou zprávu) jenom v případě, že máte potíže s odesíláním e-mailů a potřebujete provést ladění. Jakmile opravíte všechny problémy, nastavte debuggingFlag hodnotu false.

    V kódu upravte následující nastavení související s e-mailem:

    • Nastavte your-SMTP-host na název serveru SMTP, ke kterému máte přístup.

    • Nastavte your-user-name-here uživatelské jméno pro účet serveru SMTP.

    • Nastavte your-account-password heslo pro účet serveru SMTP.

    • Nastavte your-email-address-here si vlastní e-mailovou adresu. Toto je e-mailová adresa, ze které se zpráva odesílá. (Někteří poskytovatelé e-mailu vám nedovolí zadat jinou From adresu a jako From adresu použijí vaše uživatelské jméno.)

      Tip

      Konfigurace nastavení Email

      Někdy může být náročné zajistit, abyste měli správné nastavení pro server SMTP, číslo portu atd. Tady je několik tipů:

      • Název serveru SMTP je často podobný smtp.provider.com nebo smtp.provider.net. Pokud ale web publikujete u poskytovatele hostingu, název serveru SMTP v tomto okamžiku může být localhost. Je to proto, že po publikování a spuštění webu na serveru poskytovatele může být e-mailový server z hlediska vaší aplikace místní. Tato změna názvů serverů může znamenat, že v rámci procesu publikování budete muset změnit název serveru SMTP.
      • Číslo portu je obvykle 25. Někteří poskytovatelé ale vyžadují, abyste používali port 587 nebo jiný port.
      • Ujistěte se, že používáte správné přihlašovací údaje. Pokud jste web publikovali u poskytovatele hostingu, použijte přihlašovací údaje, které poskytovatel výslovně uvedl, jsou určené pro e-mail. Můžou se lišit od přihlašovacích údajů, které používáte k publikování.
      • Někdy přihlašovací údaje nepotřebujete vůbec. Pokud posíláte e-mail pomocí svého osobního poskytovatele internetových služeb, může váš poskytovatel e-mailu už znát vaše přihlašovací údaje. Po publikování možná budete muset použít jiné přihlašovací údaje než při testování na místním počítači.
      • Pokud váš poskytovatel e-mailu používá šifrování, musíte nastavit WebMail.EnableSsl na true.
  4. V prohlížeči spusťte stránku EmailRequest.cshtml . (Před spuštěním se ujistěte, že je stránka vybraná v pracovním prostoru Soubory .)

  5. Zadejte své jméno a popis problému a klikněte na tlačítko Odeslat . Budete přesměrováni na stránku ProcessRequest.cshtml , která potvrdí vaši zprávu a která vám pošle e-mailovou zprávu.

    [Snímek obrazovky se stránkou Žádost o zpracování.]

Odeslání souboru pomocí Email

Můžete taky posílat soubory, které jsou připojené k e-mailovým zprávům. V tomto postupu vytvoříte textový soubor a dvě stránky HTML. Textový soubor použijete jako přílohu e-mailu.

  1. Na webu přidejte nový textový soubor a pojmenujte ho MyFile.txt.

  2. Zkopírujte následující text a vložte ho do souboru:

    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. Vytvořte stránku s názvem SendFile.cshtml a přidejte následující kód:

    <!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. Vytvořte stránku s názvem ProcessFile.cshtml a přidejte následující kód:

    @{
        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. Upravte následující nastavení související s e-mailem v kódu z příkladu:

    • Nastavte your-SMTP-host na název serveru SMTP, ke kterému máte přístup.
    • Nastavte your-user-name-here uživatelské jméno pro účet serveru SMTP.
    • Nastavte your-email-address-here si vlastní e-mailovou adresu. Toto je e-mailová adresa, ze které se zpráva odesílá.
    • Nastavte your-account-password heslo pro účet serveru SMTP.
    • Nastavte target-email-address-here si vlastní e-mailovou adresu. (Stejně jako předtím byste normálně poslali e-mail někomu jinému, ale pro účely testování si ho můžete poslat sami sobě.)
  6. V prohlížeči spusťte stránku SendFile.cshtml .

  7. Zadejte své jméno, řádek předmětu a název textového souboru, který chcete připojit (MyFile.txt).

  8. Klikněte na tlačítko Submit. Stejně jako předtím budete přesměrováni na stránku ProcessFile.cshtml , která potvrdí vaši zprávu a která vám pošle e-mailovou zprávu s připojeným souborem.

Další materiály