开发者

Sending email via GMail in .NET [duplicate]

This question already has answers here: Closed 12 years ago.

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 = "my_gmail_id@gmail.com";
              string dest_address = "my_destination_id@xyz.edu";


              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, S开发者_如何学JAVAocket 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


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;


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


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.


Might be a firewall or something. I find that the best way to try it out is to just connect to the server manually.

Just open a command prompt and write:
telnet your.mail.server 25

This usually gives you a response similar to "220 your.mail.server ESMTP".

If you're on Vista o Win7 you might have to enable the built-in Telnet client first (go to "Programs and Features" and select "Turn Windows features on or off" and just select the Telnet client)


Try to put full email address in NetworkCredential username

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜