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.
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.
Vytvořte nový web.
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.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íkaSend
, 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 vcatch
bloku se spustí a nastavíerrorMessage
proměnnou na chybu, ke které došlo. (Další informace otry/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ů. PokuddebuggingFlag
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 mail
se 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ěnnoudebuggingFlag
, 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, nastavtedebuggingFlag
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 jinouFrom
adresu a jakoFrom
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
nebosmtp.provider.net
. Pokud ale web publikujete u poskytovatele hostingu, název serveru SMTP v tomto okamžiku může býtlocalhost
. 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
natrue
.
- Název serveru SMTP je často podobný
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 .)
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.
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.
Na webu přidejte nový textový soubor a pojmenujte ho MyFile.txt.
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.
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>
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>
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ě.)
- Nastavte
V prohlížeči spusťte stránku SendFile.cshtml .
Zadejte své jméno, řádek předmětu a název textového souboru, který chcete připojit (MyFile.txt).
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.