Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending email via GMail in .NET [duplicate]

Tags:

.net

email

smtp

Possible Duplicate:
GMail SMTP via C# .Net errors on all ports

I am getting the following error when I try to send an email in my C# program. I am using Visual Studio 2008 on windows 7. I would paste my code first and then the error:

class email_log_files
    {

          private string login_username = "my_gmail_id";
          private string login_password = "my_gmail_password";

          public void send_email()
          {
              string src_address = "[email protected]";
              string dest_address = "[email protected]";


              try
              {
                  MailMessage email_msg = new MailMessage();

                  SmtpClient email_client = new SmtpClient();
                  email_msg.From = new MailAddress(src_address);
                  email_msg.Sender = new MailAddress(src_address);
                  email_msg.ReplyTo = new MailAddress(src_address);
                  email_msg.To.Add(dest_address);
                  email_msg.Subject = "Test";
                  email_msg.Body = "Body of the message";
                  NetworkCredential credentials = new NetworkCredential(login_username, login_password);


                  email_client.Credentials = credentials;
                  email_client.Host = "smtp.gmail.com";
                  email_client.Port = 465;
                  email_client.EnableSsl = true;


                  email_client.Send(email_msg);
                  Console.WriteLine("Message Sent Successfully!!");
                  Console.ReadLine();

            }

        }
    }

And the error message is as follows:

The operation has timed out.

Why is it always timing out? I am sure that I have the correct smtp server address and port number for gmail as I have configured my outlook with the same. Any help or ideas?

After changing the port to 587 the error is as follows. I just disabled my firewall to see if that was the problem and it was NOT. The new error (for port 587):

Thats the error for me when I change the port to 587:

Failure sending mail.

System.Net.WebException: Unable to connect to the remote server ---> System.Net.
Sockets.SocketException: No connection could be made because the target machine
actively refused it 74.125.113.109:587

   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddre
ss socketAddress)

   at System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)

   at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Sock
et s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state,
IAsyncResult asyncResult, Int32 timeout, Exception& exception)
   --- End of inner exception stack trace ---

   at System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object ow
ner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket
6, Int32 timeout)

   at System.Net.PooledStream.Activate(Object owningObject, Boolean async, Int32
 timeout, GeneralAsyncDelegate asyncCallback)

   at System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate
 asyncCallback)

   at System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncD
elegate asyncCallback, Int32 creationTimeout)

   at System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)

   at System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port)

   at System.Net.Mail.SmtpClient.GetConnection()

   at System.Net.Mail.SmtpClient.Send(MailMessage message)
System

System.Collections.ListDictionaryInternal

Thanks, VP

like image 235
zack Avatar asked Apr 14 '10 19:04

zack


3 Answers

Its your Port... Gmail requires port 587.

If that doesn't work, I can just give you my Email Class.

EDIT:

   private static void SendEmailMessageGmail(System.Net.Mail.MailMessage message)
    {
        message.IsBodyHtml = true;
        message.BodyEncoding = Encoding.UTF8;
        System.Net.NetworkCredential cred = new System.Net.NetworkCredential(EmailUsername, EmailPassword);
        SmtpClient smtp = new SmtpClient("smtp.gmail.com");
        smtp.UseDefaultCredentials = false;
        smtp.EnableSsl = true;
        smtp.Credentials = cred;
        smtp.Port = 587;
        smtp.Send(message);
    }

EDIT: Add this to your code: email_client.UseDefaultCredentials = false;

like image 82
SpoiledTechie.com Avatar answered Oct 19 '22 04:10

SpoiledTechie.com


Since you are referencing System.Web I assume this is a web application, although I'm not quite clear on that from your description. If this is in fact a web application, be sure that your web.config file has the following entry:

  <system.net>
    <mailSettings>
      <smtp>
        <network host="smtp.gmail.com" port="465" userName="<UID>" password="<PW>"/>
      </smtp>
    </mailSettings>
  </system.net>

This prevents you from having to specify this information within your email_log_files class

like image 2
Robert Williams Avatar answered Oct 19 '22 04:10

Robert Williams


Not sure if this is going to be useful, but have you checked that your IP is not blocking emails from being sent from your IP? I once had a similar problem, I ended up pulling my hair out the whole weekend for nothing.

So, it's worth a check just to eliminate that. Good luck.

like image 1
Helen Neely Avatar answered Oct 19 '22 03:10

Helen Neely