Bayan
Bayan

Reputation: 82

Asp.net sending email

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

Answers (2)

Juan Pablo Melgarejo
Juan Pablo Melgarejo

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

Riad Baghbanli
Riad Baghbanli

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

Related Questions