I am storing the email of the user in session
var v = //login query
Session["LoggedUserEmail"] = v.email.ToString();
Then after login I want to send an email to the current logged in user and for that purpose I am passing Session["LoggedUserEmail"] in Msg.To.Add but its not working.
This is what I am doing
public void Execute(IJobExecutionContext context)
{
System.Net.Mail.MailMessage Msg = new System.Net.Mail.MailMessage();
Msg.From = new MailAddress("abc#gmail.com");
Msg.To.Add(Session["LoggedUserEmail"].ToString());
Msg.Subject = "Email";
Msg.Body = "Hi";
Msg.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.Port = 587;
smtp.Credentials = new System.Net.NetworkCredential("abc#gmail.com", "xxxxxxx");
smtp.EnableSsl = true;
smtp.Send(Msg);
Response.Write("Email Sent");
}
Am I doing something wrong? if yes, then is there any other way to get the job done?
I am using quartz.net and implemented IJob interface in my mvc controller.
The job executes on a different thread than the one that schedules it. You must pass in any data you need by using the JobDataMap when creating/scheduling the job.
Related
I would like to implement the functionality that on my page there is an area where users can enter their email with a question and automatically that email reaches a certain email account (mine). So far it always comes from the same person and not from the person who puts your email in that field
[HttpPost]
public async Task<IActionResult> EnviarMail(MandarMailViewModel model)
{
if (ModelState.IsValid)
{
try
{
Email email = new Email()
{
From = model.From,
Subject = model.Subject,
Body = model.Body
};
MailMessage mm = new MailMessage();
mm.To.Add(my email);
mm.Subject = email.Subject;
mm.Body = email.Body;
mm.IsBodyHtml = false;
mm.From = new MailAddress(email.From);
SmtpClient smtp = new SmtpClient("smtp.gmail.com");
smtp.Port = 587;
smtp.UseDefaultCredentials = false;
smtp.EnableSsl = true;
smtp.Credentials = new System.Net.NetworkCredential(my email, my password);
await smtp.SendMailAsync(mm);
return RedirectToAction("EnvioExitoso");
}catch(Exception error)
{
ViewBag["Error"] = error.Message;
}
}
return View(model);
}
This is the line that specifies the account that is sending the email:
smtp.Credentials = new System.Net.NetworkCredential(my email, my password);
If you want the sender email address to be the visitors address, you have to ask them to put their passwords as well to authenticate their accounts, but regardless that most people will not give their passwords, this is not how you should do it!
Below is the recommended way:
Create an email account just for sending emails from your page e.g. noreply#domain.com
Create another email just to recieve the emails coming from the page e.g. support#domian.com
Keep the users email address in the CC so they receive a copy of the email and feel confident that the message was received on your side as well, and on the other side you can see that address in the CC as well.
Where should I call the revalee method to send mail email at background? What I am trying to achieve is to send email to the client if the expiration date is coming. I have follow the link: http://www.codeproject.com/Articles/738753/Scheduling-tasks-with-Revalee-and-MVC
My actionmethod is as follows:
public ActionResult SendExpirationMessage(int VehicleID)
{
// Validate the incoming request to ensure that this web app requested this callback
if (!RevaleeRegistrar.ValidateCallback(this.Request))
{
// Return a '401 Unauthorized' response to the Revalee service if the callback doesn't validate
return new HttpStatusCodeResult(HttpStatusCode.Unauthorized);
}
ApplicationDbContext db = new ApplicationDbContext();
var user = db.UserVehicleViewModels.Find(VehicleID);
var span = user.TaxDate.AddYears(1).Subtract(DateTime.Now);
int days = span.Days;
if (days >= 7)
{
System.Net.Mail.MailMessage m = new System.Net.Mail.MailMessage(
new System.Net.Mail.MailAddress("abc#abc.com", "Web Registration"),
new System.Net.Mail.MailAddress(user.Email));
m.Subject = "Tax Notification";
m.Body = string.Format("Dear {0} <BR/>This is an email to notify you about the due tax date of your vehicle, please pay tax on time. Thank you\" title=\"User Email Confirm\"></a>",
user.UserName);
m.IsBodyHtml = true;
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.gmail.com");
smtp.Credentials = new System.Net.NetworkCredential("abc#abc.com", "password");
smtp.EnableSsl = true;
smtp.Send(m);
}
the helper method is:
private void ScheduleExpirationMessage(int VehicleID)
{
// The server address where the Revalee service is installed
string revaleeServiceHost = "192.168.1.4";
// The callback will occur 27 days from now
DateTimeOffset callbackTime = DateTimeOffset.Now.AddMinutes(1.0);
// The url that will be called back, including userId
Uri callbackUrl = new Uri(
string.Format("http://localhost/UserVehicle/SendExpirationMessage/{0}", VehicleID));
// Register the callback request with the Revalee service
RevaleeRegistrar.ScheduleCallback(revaleeServiceHost, callbackTime, callbackUrl);
}
This is my code try to send mailif you have any idea to solve this help me guys
enter code here
public ActionResult ContactForm(Contact cnt)
{
BlogApplicationEntities db = new BlogApplicationEntities();
if (ModelState.IsValid)
{
try
{
MailMessage msg = new MailMessage();
SmtpClient smtp = new SmtpClient();
msg.To.Add(new MailAddress("send to mail address"));
msg.Subject = "Contact Us";
msg.Body += "\nFirst Name=" + cnt.FirstName;
msg.Body += "Last Name=" + cnt.LastName;
msg.Body += "Email=" + cnt.Email;
msg.From = new MailAddress("mailaddress", "Jhon");
msg.Body += "Comments=" + cnt.Comment;
msg.IsBodyHtml = true;
smtp.Credentials = new System.Net.NetworkCredential("network mail address", "**password**");
smtp.Host = "https://smtp.gmail.com";
smtp.EnableSsl = true;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.UseDefaultCredentials = false;
smtp.Port = 587;
smtp.Send(msg);
msg.Dispose();
db.Contacts.Add(cnt);
db.SaveChanges();
return View("Success");
}
catch (Exception)
{
return View("Error");
}
}
return View();
}
When the below line is executed:
smtp.Send(msg);
Its throws an error :
'The remote name couldn't be resolved: https://smtp.gmail.com'
What can I do to solve this, can someone help me?
Change https://smtp.gmail.com, to smtp.gmail.com, and you need to validate a proper gmail account. Follow examples showed in this post.
You need to change your SMTP host to smtp.gmail.com:
public ActionResult ContactForm(Contact cnt)
{
BlogApplicationEntities db = new BlogApplicationEntities();
if (ModelState.IsValid)
{
try
{
MailMessage msg = new MailMessage();
SmtpClient smtp = new SmtpClient();
msg.To.Add(new MailAddress("ibrahimtirampaci#hotmail.com"));
msg.Subject = "Contact Us";
msg.Body += "\nFirst Name=" + cnt.FirstName;
msg.Body += "Last Name=" + cnt.LastName;
msg.Body += "Email=" + cnt.Email;
msg.From = new MailAddress("ibrahimtirampaci#hotmail.com", "İbrahim");
msg.Body += "Comments=" + cnt.Comment;
msg.IsBodyHtml = true;
smtp.Credentials = new System.Net.NetworkCredential("ibrahimtirampaci#hotmail.com", "2117542ibo");
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.UseDefaultCredentials = false;
smtp.Port = 587;
smtp.Send(msg);
msg.Dispose();
db.Contacts.Add(cnt);
db.SaveChanges();
return View("Success");
}
catch (Exception)
{
return View("Error");
}
}
return View();
}
Host names don't include the transport protocol, but when you specify EnableSsl=true, you're setting the transport protocol to SSL. One side note, make sure that you're using a gmail account for your network credentials if you're sending from gmail.
I changed the smtp to smtp.Host = "smtp.gmail.com" but now Its throws an error : The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required.
I think my problem is null Credentials.
I am trying to send send email through below action method
[HttpPost]
public ActionResult ForgotPassword1()
{
dbAlKhaleejEntities _context = new dbAlKhaleejEntities();
var email = Request["Email"];
var email_adress = _context.CUSTOMERs.First(em => email == em.CUSTOMER_EMAIL);
var mailto = email_adress.CUSTOMER_EMAIL;
MailMessage msg = new MailMessage();
SmtpClient client = new SmtpClient("smtp.gmail.com");
client.Credentials = new NetworkCredential("umairliaquat63#gmail.com", "abc");
client.Host = "smtp.gmail.com";
client.Port = 587;
msg.From = new MailAddress("umairliaquat63#gmail.com");
msg.To.Add(mailto);
msg.Subject = "Password recovery";
msg.Body = "Test Recovering the password";
msg.IsBodyHtml = true;
msg.Priority = MailPriority.High;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.EnableSsl = true;
client.UseDefaultCredentials = false;
client.Send(msg);
return RedirectToAction("forgetPassword");
}
but at line "client.Send(msg)" , it is throwing exception "The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required". How I should solve this problem
As far as I know you don't need write your own code cause SmtpClient can use your configuration:
<system.net>
<mailSettings>
<smtp from="It's me <its#my.email>">
<network host="smtp.ip.or.domain" port="527" defaultCredentials="false" userName="noreply" password="12345" enableSsl="true"/>
</smtp>
</mailSettings>
</system.net>
Verify your mail settings twice. In addition, the SMTP server can reject connections for IP's from a black list, or not from a white list. The SMTP server can detect your mail as a spam.
You can use your own local SMTP or specialized servises to mass mailings.
Try this snippet :
using (var client = new SmtpClient(SmtpServerHost, SmtpPort)
{
Credentials = new NetworkCredential(NetworkCredentialUserName, Password),
EnableSsl = this.enableSSL
}
)
{
MailMessage msg = new MailMessage();
msg.From = new MailAddress(FromMailingAddress);
msg.Subject = this.Subject;
}
I have one problem about receive email. Now, I write Contact page in my project. If some user wanna send email, he/she write email adress and message and click Send buttom. My code send from berdankoca#gmail.com to berdankoca#gmail.com. I couldn't understand why it didn't sent from email area to berdankoca#gmail.com
My Code
[HttpPost]
public ActionResult About(string name, string email, string message)
{
MailMessage mailMessage = new MailMessage();
mailMessage.From = new MailAddress(email);
mailMessage.To.Add(new MailAddress("berdankoca#gmail.com"));
mailMessage.Subject = "Deneme";
mailMessage.SubjectEncoding = System.Text.Encoding.Default;
mailMessage.Body = message;
mailMessage.BodyEncoding = System.Text.Encoding.Default;
SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
client.Credentials = new System.Net.NetworkCredential("berdankoca#gmail.com", "xxxx");
client.EnableSsl = true;
client.Send(mailMessage);
return View();
}
I hope I can explain. Thanks for all replies.