How to send a mail through mvc-3 asp.net using c#?
I have to send a forgot password so how can I do this?
My code is below.
Model code..
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; }
}
}
Controller code..
public ActionResult ForgotPassword()
{
return View();
}
[HttpPost]
public ActionResult ForgotPassword(string user_email_address)
{
SqlConnection conn = new SqlConnection(@"Data Source=.SQLEXPRESS;AttachDbFilename=E:MVC3TelerikLoginTelerikLoginApp_DataLogin.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("<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c0a1a2a380a7ada1a9aceea3afad">[email protected]</a>");
msg.To.Add(user_email_address);
msg.Subject = "Password";
msg.Body = "Test1";
msg.Priority = MailPriority.High;
SmtpClient client = new SmtpClient();
client.Credentials = new NetworkCredential("<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bedfdcddfed9d3dfd7d290ddd1d3">[email protected]</a>", "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();
}
Here I fetched the password of user from database through entered email address..
View code..
<% 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"/>
<%} %>
It gives me an error on these line
client.Send(msg);
Error messege is:
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
How to solve it?
thanks in advance
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Import the System.Net.Mail namespace.
The code will look similar to this:
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("<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="87eafee2eae6eeebc7e0eae6eeeba9e4e8ea">[email protected]</a>");
mail.To.Add("<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="40322523253029252e3400272d21292c6e232f2d">[email protected]</a>");
mail.Subject = "Password recovery";
mail.Body = "Recovering the password";
smtpServer.Send(mail);
P.S. You have a SQL injection vulnerability in the sample code. Use a SqlCommand object with parameters instead of String.Format().
Using SqlDataReader would be a lot more efficient to check for a record instead of populating a DataSet.
Method 2
Have a look at MvcMailer
MvcMailer provides you with an ActionMailer style email sending NuGet Package for ASP.NET MVC 3/4. So, you can produce professional looking emails composed of your MVC master pages and views with ViewBag.
Method 3
you can use this…
public void SendEmail(string address, string subject, string message)
{
string email = "<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d0fda9bfa5a2fdb9b4fd90b7bdb1b9bcfeb3bfbd">[email protected]</a>";
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);
}
Method 4
i am using this for sending email, in 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);
Method 5
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("<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="014c796e6d68726841666c60686d2f626e6c">[email protected]</a> ", "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("<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7c31041310150f153c1b111d1510521f1311">[email protected]</a> ", " 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("<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="14596c7b787d677d547379757d783a777b79">[email protected]</a> ", "Administrator");
m.To.Add(to);
SmtpClient smtp = new SmtpClient
{
Host = "pod51014.outlook.com",
Port = 587,
Credentials = new System.Net.NetworkCredential("<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7835001714110b11381f15191114561b1715">[email protected]</a> ", "Dut324232"),
EnableSsl = true
};
try
{
smtp.Send(m);
feedback = "Check your email for PIN";
}
catch (Exception e)
{
feedback = "Message not sent" + e.Message;
}
return feedback;
}
}
}
Method 6
Use code from following Link to Send Email in mvc3:
Method 7
It look like you are trying to send emails through GMail’s SMTP service, which this SO question already covers: Sending email in .NET through Gmail
The only thing that looks missing in your code is that you’ve set client.UseDefaultCredentials = true, I think you want to set this to false and provide your own credentials. I’ve never tried using GMail to send through emails, but I’m guessing you’ll need to use a GMail account as your credentials in order to authenticate properly.
Method 8
You should turn on the SMTP service in Window 7 :
- go to Control Panel > Programs
- click “Turn window features ON or OFF”
- click Internet Information Service and click OK
Method 9
when use smtp for gmail, remember put
smtpClient.UseDefaultCredentials = false;
before
smtpClient.Credentials = loginInfo;
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0