web-dev-qa-db-ja.com

Asp.net Mvc-3から電子メールを送信する方法は?

C#を使用してmvc-3 asp.netを介してメールを送信する方法は?

忘れたパスワードを送信する必要があるので、どうすればよいですか?私のコードは以下です。

モデルコード.

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace TelerikLogin.Models.ViewModels
{
    public class ForgotPassword
    {
        public int user_id { get; set; }
        public string user_login_name { get; set; }
        public string user_password { get; set; }

        [Required]
        [Display(Name="Email Address : ")]
        public string user_email_address { get; set; }
    }
}

コントローラーコード..

  public ActionResult ForgotPassword()
        {
            return View();
        }

        [HttpPost]
        public ActionResult ForgotPassword(string user_email_address)
        {
            SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=E:\MVC3\TelerikLogin\TelerikLogin\App_Data\Login.mdf;Integrated Security=True;User Instance=True");

            DataTable dt1 = new DataTable();

            string strQuery = string.Format("SELECT user_password FROM [user_master] WHERE user_email_address='{0}'",user_email_address);
            conn.Open();
            SqlDataAdapter da1 = new SqlDataAdapter(strQuery, conn);
            da1.Fill(dt1);
            conn.Close();

            if (dt1.Rows.Count > 0)
            {

MailMessage msg = new MailMessage();

            msg.From = new MailAddress("[email protected]");
            msg.To.Add(user_email_address);
            msg.Subject = "Password";
            msg.Body = "Test1";
            msg.Priority = MailPriority.High;

            SmtpClient client = new SmtpClient();




            client.Credentials = new NetworkCredential("[email protected]", "dip", "smtp.gmail.com");
            client.Host = "smtp.gmail.com";
            client.Port = 587;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.EnableSsl = true;
            client.UseDefaultCredentials = true;

            client.Send(msg);


               return RedirectToAction("About", "Home");
            }
            return View();
        }

ここで、入力したメールアドレスを使用してデータベースからユーザーのパスワードを取得しました。

コードを表示..

<% using (Html.BeginForm("ForgotPassword", "Account", FormMethod.Post))
   { %>

   <%: Html.LabelFor(m => m.user_email_address) %>
   <%: Html.TextBox("user_email_address")%>
      <%: Html.ValidationSummary(true) %>

<input type="submit" value="Submit"/>

   <%} %>

これらの行にエラーが表示されます

 client.Send(msg);

エラーメッセージ:

The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Must issue a STARTTLS command first. x1sm1264662igc.16

解決方法は?前もって感謝します

36
Dip

_System.Net.Mail_名前空間をインポートします。

コードは次のようになります。

_MailMessage mail = new MailMessage();

SmtpClient smtpServer = new SmtpClient("smtp.gmail.com");
smtpServer.Credentials = new System.Net.NetworkCredential("userName", "password");
smtpServer.Port = 587; // Gmail works on this port

mail.From = new MailAddress("[email protected]");
mail.To.Add("[email protected]");
mail.Subject = "Password recovery";
mail.Body = "Recovering the password";

smtpServer.Send(mail);
_

追伸サンプルコードにSQLインジェクションの脆弱性があります。 String.Format()の代わりに、パラメータを持つSqlCommandオブジェクトを使用します。

SqlDataReaderを使用する方が、DataSetにデータを入力する代わりに、レコードをチェックする方がはるかに効率的です。

69
Dmitry S.

MvcMailer をご覧ください

MvcMailerは、ASP.NET MVC 3/4用のNuGetパッケージを送信するActionMailerスタイルの電子メールを提供します。そのため、ViewBagを使用して、MVCマスターページとビューで構成されるプロ並みの電子メールを作成できます。

16
Dhaust

これを使用できます...

    public void SendEmail(string address, string subject, string message)
    {
        string email = "[email protected]";
        string password = "put-your-GMAIL-password-here";

        var loginInfo = new NetworkCredential(email, password);
        var msg = new MailMessage();
        var smtpClient = new SmtpClient("smtp.gmail.com", 587);

        msg.From = new MailAddress(email);
        msg.To.Add(new MailAddress(address));
        msg.Subject = subject;
        msg.Body = message;
        msg.IsBodyHtml = true;

        smtpClient.EnableSsl = true;
        smtpClient.UseDefaultCredentials = false;
        smtpClient.Credentials = loginInfo;
        smtpClient.Send(msg);
    }
10
Yasser
    Using Systems.Net.Mail;
// POST: /Account/Register
//Here's a simple Mail(MVC4)

        public async Task<ActionResult> Register(RegisterViewModel model)
        {
            Mail email= new Mail();
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser() { UserName = model.UserName, Email = model.Email };
                var result = await UserManager.CreateAsync(user, model.Password);
                if (result.Succeeded)
                {
                    email.to = new MailAddress(model.Email);
                    email.body = "Hello " + model.Firstname + " your account has been created <br/> Username: " + model.UserName + " <br/>Password: " + model.Password.ToString() + " <br/> change it on first loggin";
                    ViewBag.Feed = email.reg();


                    await SignInAsync(user, isPersistent: false);


                     return RedirectToAction("Index", "Home");

                }
                else
                {
                    AddErrors(result);
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }




//Business Logic(this Is you Email Class)




Using Systems.Net.Mail;


 public class Mail

    {
        public MailAddress to { get; set; }
        public MailAddress from { get; set; }
        public string sub { get; set; }
        public string body { get; set; }




        public string reg()
        {
            string feed = "Registration Successful";
            var m = new System.Net.Mail.MailMessage()
            {
                Subject = "",
                Body = body,
                IsBodyHtml = true
            };
            m.From = new MailAddress("[email protected]  ", "Administrator");
            m.To.Add(to);
            SmtpClient smtp = new SmtpClient
            {
                Host = "pod51014.Outlook.com",
                //Host = "smtp-mail.Outlook.com",
                Port = 587,
                Credentials = new System.Net.NetworkCredential("[email protected] ", " Dut324232"),
                EnableSsl = true
            };

            try
            {
                smtp.Send(m);
                // feed = "";
            }
            catch (Exception e)
            {

            }

            return feed;

        }
        public string fogot()
        {
            string feedback = "";

            var m = new System.Net.Mail.MailMessage()
            {
                Subject = "Reset Password PIN",
                Body = body,
                IsBodyHtml = true
            };
            m.From = new MailAddress("[email protected] ", "Administrator");
            m.To.Add(to);
            SmtpClient smtp = new SmtpClient
            {
                Host = "pod51014.Outlook.com",
                Port = 587,
                Credentials = new System.Net.NetworkCredential("[email protected] ", "Dut324232"),
                EnableSsl = true
            };

            try
            {
                smtp.Send(m);
                feedback = "Check your email for PIN";
            }
            catch (Exception e)
            {
                feedback = "Message not sent" + e.Message;
            }
            return feedback;

        }

    }
}
1
Sqalo

aSP.net MVC3で、メールを送信するためにこれを使用しています

System.Web.Helpers.WebMail.SmtpServer = smtp_server;
            System.Web.Helpers.WebMail.SmtpPort = smtp_port;
            System.Web.Helpers.WebMail.EnableSsl = true;
            System.Web.Helpers.WebMail.From = "fromaddress";
            StringBuilder sb = new StringBuilder();
            sb.Append("<table><tr><td>");            
            sb.Append(msg);                     
            sb.Append("</td></tr></table>");
            string body = sb.ToString();
            string To = toemail;
            System.Web.Helpers.WebMail.Send(To,subject, body);

次のリンクのコードを使用して、mvc3でメールを送信します。

http://weblogs.asp.net/gunnarpeipman/archive/2010/10/20/asp-net-mvc-3-beta-using-webmail-helper-to-send-e-mail.aspx

0
ankit rajput

GMailのSMTPサービスを介してメールを送信しようとしているようです。このSOの質問は既に説明しています: Gmailを介して.NETでメールを送信

コードで欠落しているように見える唯一のものは、client.UseDefaultCredentials = trueを設定したことです。これをfalseに設定し、独自の資格情報を提供する必要があると思います。 GMailを使用してメールを送信しようとしたことは一度もありませんが、正しく認証するにはGMailアカウントを資格情報として使用する必要があると思います。

0
Peter Monks

Window 7でSMTPサービスをオンにする必要があります。

  • [コントロールパネル]> [プログラム]に移動します
  • 「ウィンドウ機能をオンまたはオフにする」をクリックします
  • [インターネットインフォメーションサービス]をクリックし、[OK]をクリックします
0
Arslan Sunny

gmailにsmtpを使用する場合は、忘れずに

smtpClient.UseDefaultCredentials = false;

smtpClient.Credentials = loginInfo;
0
Pham