6

web.configでメールの詳細を設定しますが、メールは送信されません。

  <appSettings>
    <add key="webpages:Version" value="1.0.0.0" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    <add key="smtpServer" value="smtp.live.com" />
    <add key="EnableSsl" value = "true"/>
    <add key="smtpPort" value="587" />
    <add key="smtpUser" value="MyEmail@live.co.uk" />
    <add key="smtpPass" value="mypasswordgoeshere" />
    <add key="adminEmail" value="no-reply@no-reply.com" />
  </appSettings>

私は次のクラスを使用しています

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net.Mail;
using System.Net;
using System.Configuration;

namespace MVCcars.Utils
{
  public static class MailClient
  {
    private static readonly SmtpClient Client;
    static MailClient()
    {
      Client = new SmtpClient
      {
        Host =
          ConfigurationManager.AppSettings["SmtpServer"],
        Port =
          Convert.ToInt32(
            ConfigurationManager.AppSettings["SmtpPort"]),
        DeliveryMethod = SmtpDeliveryMethod.Network

      };
      Client.UseDefaultCredentials = false;
      Client.Credentials = new NetworkCredential(
      ConfigurationManager.AppSettings["SmtpUser"],
      ConfigurationManager.AppSettings["SmtpPass"]);
    }


    private static bool SendMessage(string from, string to,
      string subject, string body)
    {
      MailMessage mm = null;
      bool isSent = false;
      try
      {
        // Create our message
        mm = new MailMessage(from, to, subject, body);
        mm.DeliveryNotificationOptions =
        DeliveryNotificationOptions.OnFailure;
        // Send it
        Client.Send(mm);
        isSent = true;
      }
      // Catch any errors, these should be logged and
      // dealt with later
      catch (Exception ex)
      {
        // If you wish to log email errors,
        // add it here...
        var exMsg = ex.Message;
      }
      finally
      {
        mm.Dispose();
      }
      return isSent;
    }


    public static bool SendWelcome(string email)
    {
      string body = "Put welcome email content here...";
      return SendMessage(
        ConfigurationManager.AppSettings["adminEmail"],
          email, "Welcome message", body);
    }
  }
}

これはアカウントコントローラーです。

[HttpPost]
public ActionResult Register(RegisterModel model)
{
    if (ModelState.IsValid)
    {
        // Attempt to register the user
        MembershipCreateStatus createStatus;
        Membership.CreateUser(model.UserName,
          model.Password, model.Email, null, null,
          true, null, out createStatus);
        if (createStatus ==
            MembershipCreateStatus.Success)
        {
          // Send welcome email
          MailClient.SendWelcome(model.Email);
          FormsAuthentication.SetAuthCookie(
            model.UserName,
            false /* createPersistentCookie */);
          return RedirectToAction("create", "Customer");
        }
        else
        {
          ModelState.AddModelError("",
            ErrorCodeToString(createStatus));
        }
    }
    // If we got this far, something failed,
    // redisplay form
    return View(model);   
}

web.configのアプリ設定はenableSslに適していますか?アドバイスを歓迎します

4

2 に答える 2

21

.NET で SmtpClient を操作するさらに簡単な方法は、system.net 構成設定を使用することです。これにより、すべてのプロパティを設定するコードを記述しなくても、作成された SmtpClient のデフォルトを設定できます。このようにして、コードを変更せずにセットアップ全体を簡単に変更できます。

  <system.net>
    <mailSettings>
      <smtp from="no-reply@no-reply.com">
        <network host="smtp.live.com" password="mypasswordgoeshere" port="587" userName="MyEmail@live.co.uk"  enableSsl="true"/>
      </smtp>
    </mailSettings>
  </system.net>

そして、コードで

 System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
 smtp.Send(mailMessage);

編集これが私が以下に投稿した元のコードです:

static MailClient() 
{ 
     Client = new SmtpClient 
     { 
         Host = ConfigurationManager.AppSettings["SmtpServer"], 
         Port = Convert.ToInt32(ConfigurationManager.AppSettings["SmtpPort"]), 
         DeliveryMethod = SmtpDeliveryMethod.Network,
         EnableSsl = bool.Parse(ConfigurationManager.AppSettings["EnableSsl"])

     };
  .....
 } 
于 2012-04-05T04:07:28.277 に答える
2

上記のNickBorkの回答に加えて、aspページにいくつかの変更を加えて、

MailSettingsGroup

。このリンクが お役に立てば幸いです。それほど新しいものではないMailSettingsSectionGroupの使用方法

于 2012-04-05T04:38:24.393 に答える