ASP.NET Web Sayfaları (Razor) Sitesinden Email Gönderme
yazan: Tom FitzMacken
Bu makalede, ASP.NET Web Sayfaları (Razor) kullanırken web sitesinden nasıl e-posta iletisi gönderebileceğiniz açıklanır.
Öğrenecekleriniz:
- Web sitenizden e-posta iletisi gönderme.
- E-posta iletisine dosya ekleme.
Bu, makalede sunulan ASP.NET özelliğidir:
- Yardımcı
WebMail
.Öğreticide kullanılan yazılım sürümleri
- ASP.NET Web Sayfaları (Razor) 3
Bu öğretici ASP.NET Web Sayfaları 2 ile de çalışır.
Web Sitenizden Email İleti Gönderme
Web sitenizden e-posta göndermeniz gerekebilecek birçok neden vardır. Kullanıcılara onay iletileri gönderebilir veya kendinize bildirim gönderebilirsiniz (örneğin, yeni bir kullanıcının kaydolduğunu). Yardımcı WebMail
, e-posta göndermenizi kolaylaştırır.
Yardımcıyı WebMail
kullanmak için smtp sunucusuna erişiminiz olmalıdır. (SMTP, Basit Posta Aktarım Protokolü anlamına gelir.) SMTP sunucusu, iletileri yalnızca alıcının sunucusuna ileten bir e-posta sunucusudur; e-postanın giden tarafıdır. Web siteniz için bir barındırma sağlayıcısı kullanıyorsanız, büyük olasılıkla sizi e-posta ile ayarlarlar ve SMTP sunucu adınızın ne olduğunu söyleyebilirler. Şirket ağı içinde çalışıyorsanız, bir yönetici veya BT departmanınız genellikle kullanabileceğiniz bir SMTP sunucusu hakkında bilgi verebilir. Evde çalışıyorsanız, size SMTP sunucusunun adını söyleyebilecek sıradan e-posta sağlayıcınızı kullanarak test edebilirsiniz. Genellikle aşağıdakilere ihtiyacınız vardır:
- SMTP sunucusunun adı.
- Bağlantı noktası numarası. Bu neredeyse her zaman 25'tir. Ancak, ISS'niz 587 numaralı bağlantı noktasını kullanmanızı gerektirebilir. E-posta için güvenli yuva katmanı (SSL) kullanıyorsanız farklı bir bağlantı noktasına ihtiyacınız olabilir. E-posta sağlayıcınıza danışın.
- Kimlik bilgileri (kullanıcı adı, parola).
Bu yordamda iki sayfa oluşturursunuz. İlk sayfada, kullanıcıların teknik destek formu dolduruyor gibi bir açıklama girmesini sağlayan bir form vardır. İlk sayfa, bilgilerini ikinci bir sayfaya gönderir. İkinci sayfada kod kullanıcının bilgilerini ayıklar ve bir e-posta iletisi gönderir. Ayrıca, sorun raporunun alındığını onaylayan bir ileti görüntüler.
Not
Bu örneği basit tutmak için kod, yardımcıyı WebMail
doğrudan kullandığınız sayfada başlatır. Ancak, gerçek web siteleri için bunun gibi bir başlatma kodunu genel bir dosyaya koymak daha iyi bir fikirdir, böylece web sitenizdeki tüm dosyalar için yardımcıyı WebMail
başlatırsınız. Daha fazla bilgi için bkz . ASP.NET Web Sayfaları için Site-Wide Davranışını Özelleştirme.
Yeni bir web sitesi oluşturun.
EmailRequest.cshtml adlı yeni bir sayfa ekleyin ve aşağıdaki işaretlemeyi ekleyin:
<!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>
Form öğesinin
action
özniteliğinin ProcessRequest.cshtml olarak ayarlandığına dikkat edin. Bu, formun geçerli sayfaya geri dönmek yerine o sayfaya gönderileceği anlamına gelir.Web sitesine ProcessRequest.cshtml adlı yeni bir sayfa ekleyin ve aşağıdaki kodu ve işaretlemeyi ekleyin:
@{ 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>
Kodda, sayfaya gönderilen form alanlarının değerlerini alırsınız. Ardından, e-posta iletisini oluşturmak ve göndermek için yardımcının
Send
yöntemini çağırırsınızWebMail
. Bu durumda, kullanılacak değerler, formdan gönderilen değerlerle birleştirirsiniz metinden oluşur.Bu sayfanın kodu bir
try/catch
bloğun içinde. Herhangi bir nedenle e-posta gönderme girişimi işe yaramazsa (örneğin, ayarlar doğru değilse), bloktakicatch
kod çalışır ve değişkeni oluşan hataya ayarlarerrorMessage
. (Bloklar veya etiket hakkındatry/catch
daha fazla bilgi için bkz. Razor Söz Dizimi Kullanarak ASP.NET Web Sayfaları Programlamaya Giriş.)<text>
Sayfanın gövdesinde değişken boşsa
errorMessage
(varsayılan), kullanıcı e-posta iletisinin gönderildiğini belirten bir ileti görür.errorMessage
Değişken true olarak ayarlanırsa, kullanıcı iletiyi gönderirken bir sorun olduğunu belirten bir ileti görür.Sayfanın hata iletisi görüntüleyen bölümünde ek bir test olduğuna dikkat edin:
if(debuggingFlag)
. Bu, e-posta gönderirken sorun yaşıyorsanız true olarak ayarlayabileceğiniz bir değişkendir. Doğru olduğundadebuggingFlag
ve e-posta gönderirken bir sorun varsa, e-posta iletisini göndermeye çalışırken bildirilen ASP.NET gösteren ek bir hata iletisi görüntülenir. Yine de adil bir uyarı: E-posta iletisi gönderemediğinde ASP.NET hata iletileri genel olabilir. Örneğin, ASP.NET SMTP sunucusuyla iletişim kuramıyorsa (örneğin, sunucu adında bir hata yaptığınızdan), hata olurFailure sending mail
.Not
Önemli Bir özel durum nesnesinden (
ex
kodda) hata iletisi aldığınızda, bu iletiyi kullanıcılara düzenli olarak iletmeyin . Özel durum nesneleri genellikle kullanıcıların görmemesi gereken ve hatta bir güvenlik açığı olabilecek bilgiler içerir. Bu nedenle bu kod, hata iletisini görüntülemek için anahtar olarak kullanılan değişkenidebuggingFlag
ve varsayılan olarak değişkenin false olarak ayarlanmasını içerir. Yalnızca e-posta gönderirken sorun yaşıyorsanız ve hata ayıklamanız gerekiyorsa bu değişkeni true olarak ayarlamanız (ve bu nedenle hata iletisini görüntülemeniz) gerekir. Herhangi bir sorunu düzeltdikten sonra false olarak geri ayarlayındebuggingFlag
.Kodda aşağıdaki e-postayla ilgili ayarları değiştirin:
Erişiminiz olan SMTP sunucusunun adına ayarlayın
your-SMTP-host
.SMTP sunucu hesabınızın kullanıcı adı olarak ayarlayın
your-user-name-here
.SMTP sunucu hesabınızın parolası olarak ayarlayın
your-account-password
.Kendi e-posta adresinize ayarlayın
your-email-address-here
. Bu, iletinin gönderildiği e-posta adresidir. (Bazı e-posta sağlayıcıları farklıFrom
bir adres belirtmenize izin vermez ve adres olarakFrom
kullanıcı adınızı kullanır.)İpucu
Email Ayarlarını Yapılandırma
Bazen SMTP sunucusu, bağlantı noktası numarası vb. için doğru ayarlara sahip olduğunuzdan emin olmak zor olabilir. İşte birkaç ipucu:
- SMTP sunucusu adı genellikle veya
smtp.provider.net
gibismtp.provider.com
bir addır. Ancak, sitenizi bir barındırma sağlayıcısında yayımlarsanız, bu noktada SMTP sunucu adı olabilirlocalhost
. Bunun nedeni, siz yayımladıktan ve siteniz sağlayıcının sunucusunda çalıştırıldıktan sonra, e-posta sunucusunun uygulamanızın perspektifinden yerel olmasıdır. Sunucu adlarındaki bu değişiklik, yayımlama işleminizin bir parçası olarak SMTP sunucu adını değiştirmeniz gerekebileceği anlamına gelebilir. - Bağlantı noktası numarası genellikle 25'tir. Ancak, bazı sağlayıcılar 587 numaralı bağlantı noktasını veya başka bir bağlantı noktasını kullanmanızı gerektirir.
- Doğru kimlik bilgilerini kullandığınızdan emin olun. Sitenizi bir barındırma sağlayıcısında yayımladıysanız, sağlayıcının özellikle e-posta için olduğunu belirttiği kimlik bilgilerini kullanın. Bunlar, yayımlamak için kullandığınız kimlik bilgilerinden farklı olabilir.
- Bazen kimlik bilgilerine hiç ihtiyacınız olmaz. Kişisel ISS'nizi kullanarak e-posta gönderiyorsanız, e-posta sağlayıcınız kimlik bilgilerinizi zaten biliyor olabilir. Yayımladıktan sonra, yerel bilgisayarınızda test ettiğinizden farklı kimlik bilgileri kullanmanız gerekebilir.
- E-posta sağlayıcınız şifreleme kullanıyorsa olarak ayarlamanız
WebMail.EnableSsl
true
gerekir.
- SMTP sunucusu adı genellikle veya
EmailRequest.cshtml sayfasını tarayıcıda çalıştırın. (Sayfayı çalıştırmadan önce Dosyalar çalışma alanında seçili olduğundan emin olun.)
Adınızı ve sorun açıklamanızı girin ve gönder düğmesine tıklayın. İletinizi onaylayan ve size e-posta iletisi gönderen ProcessRequest.cshtml sayfasına yönlendirilirsiniz.
Email Kullanarak Dosya Gönderme
E-posta iletilerine eklenmiş dosyaları da gönderebilirsiniz. Bu yordamda, bir metin dosyası ve iki HTML sayfası oluşturursunuz. Metin dosyasını e-posta eki olarak kullanacaksınız.
Web sitesine yeni bir metin dosyası ekleyin ve MyFile.txtolarak adlandırın.
Aşağıdaki metni kopyalayın ve dosyaya yapıştırın:
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.
SendFile.cshtml adlı bir sayfa oluşturun ve aşağıdaki işaretlemeyi ekleyin:
<!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>
ProcessFile.cshtml adlı bir sayfa oluşturun ve aşağıdaki işaretlemeyi ekleyin:
@{ 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>
Örnekteki kodda aşağıdaki e-postayla ilgili ayarları değiştirin:
- Erişiminiz olan bir SMTP sunucusunun adına ayarlayın
your-SMTP-host
. - SMTP sunucu hesabınızın kullanıcı adı olarak ayarlayın
your-user-name-here
. - Kendi e-posta adresinize ayarlayın
your-email-address-here
. Bu, iletinin gönderildiği e-posta adresidir. - SMTP sunucu hesabınızın parolası olarak ayarlayın
your-account-password
. - Kendi e-posta adresinize ayarlayın
target-email-address-here
. (Daha önce olduğu gibi normalde başka birine e-posta gönderirsiniz, ancak test etmek için bunu kendinize gönderebilirsiniz.)
- Erişiminiz olan bir SMTP sunucusunun adına ayarlayın
SendFile.cshtml sayfasını tarayıcıda çalıştırın.
Adınızı, konu satırınızı ve eklenecek metin dosyasının adını girin (MyFile.txt).
Submit
düğmesine tıklayın. Daha önce olduğu gibi, iletinizi onaylayan ve ekli dosyayı içeren bir e-posta iletisi gönderen ProcessFile.cshtml sayfasına yönlendirilirsiniz.