Aracılığıyla paylaş


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.

[Sorun raporunun alındığını onaylayan bir iletiyi gösteren ekran görüntüsü.]

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.

  1. Yeni bir web sitesi oluşturun.

  2. 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.

  3. 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), bloktaki catch kod çalışır ve değişkeni oluşan hataya ayarlar errorMessage . (Bloklar veya etiket hakkında try/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ğunda debuggingFlag 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 olur Failure 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şkeni debuggingFlag 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ın debuggingFlag .

    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 olarak From 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.netgibi smtp.provider.com bir addır. Ancak, sitenizi bir barındırma sağlayıcısında yayımlarsanız, bu noktada SMTP sunucu adı olabilir localhost. 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.EnableSsltruegerekir.
  4. 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.)

  5. 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.

    [İşlem İsteği sayfasını gösteren ekran görüntüsü.]

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.

  1. Web sitesine yeni bir metin dosyası ekleyin ve MyFile.txtolarak adlandırın.

  2. 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.

  3. 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>
    
  4. 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>
    
  5. Ö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.)
  6. SendFile.cshtml sayfasını tarayıcıda çalıştırın.

  7. Adınızı, konu satırınızı ve eklenecek metin dosyasının adını girin (MyFile.txt).

  8. 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.

Ek Kaynaklar