Reputation: 82
How can I send an activation email when new users register in my website using asp.net c#? I have tried the steps described this link but I have faced this error:
System.IO.IOException: Unable to read data from the transport connection: net_io_connectionclosed.
Is there any solution to this or any other way to send an email?
this is my code
using (MailMessage mm = new MailMessage("[email protected]", txtEmail.Text))
{
mm.Subject = "Account Activation";
string body = "Hello " + txtUsername.Text.Trim() + ",";
body += "<br /><br />Please click the following link to activate your account";
body += "<br /><a href = '" + Request.Url.AbsoluteUri.Replace("CS.aspx", "CS_Activation.aspx?ActivationCode=" + activationCode) + "'>Click here to activate your account.</a>";
body += "<br /><br />Thanks";
mm.Body = body;
mm.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
NetworkCredential NetworkCred = new NetworkCredential("[email protected]", "<password>");
smtp.UseDefaultCredentials = true;
smtp.Credentials = NetworkCred;
smtp.Port = 587;
smtp.Send(mm);
}
The proposed duplicate did not solve the problem. I am already using port 587.
Upvotes: 1
Views: 319
Reputation: 45
Try this, it works perfectly and you only have to change the fields that are before the var smtp = newSMTPCient.
using System.Net;
using System.Net.Mail;
var fromAddress = new MailAddress("[email protected]", "From Name");
var toAddress = new MailAddress("[email protected]", "To Name");
const string fromPassword = "fromPassword";
const string subject = "Subject";
const string body = "Body";
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
})
{
smtp.Send(message);
}
Upvotes: 1
Reputation: 3319
See the code below:
public static class email_utility
{
public static async Task<bool> send_email(this string body, string subject, string email, int try_count)
{
return await Task.Run(() =>
{
var cli = new SmtpClient();
using (var message = new MailMessage(config.sender_email, email))
{
message.Subject = subject;
message.SubjectEncoding = UTF8Encoding.UTF8;
message.Body = body;
message.BodyEncoding = UTF8Encoding.UTF8;
message.DeliveryNotificationOptions = DeliveryNotificationOptions.Never;
for (var count = 0; count < try_count; ++count)
{
try
{
lock (config.sender_email)
{
cli.Send(message);
return true;
}
}
catch (SmtpFailedRecipientsException)
{
return false;
}
catch (SmtpException)
{
Thread.Sleep(config.send_timeout);
}
}
return false;
}
});
}
}
Upvotes: 1