2010-04-14 64 views
8

Possible Duplicate:
GMail SMTP via C# .Net errors on all portsGửi email qua GMail trong .NET

Tôi nhận được lỗi sau khi tôi cố gắng gửi email trong chương trình C# của mình. Tôi đang sử dụng Visual Studio 2008 trên windows 7. Tôi sẽ dán mã của tôi đầu tiên và sau đó là lỗi:

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(); 

      } 

     } 
    } 

Và được thông báo lỗi như sau:

The operation has timed out. 

Tại sao nó luôn thời gian ra ngoài? Tôi chắc chắn rằng tôi có địa chỉ máy chủ smtp chính xác và số cổng cho gmail vì tôi đã định cấu hình triển vọng của mình với cùng một cách. Bất kỳ trợ giúp hoặc ý tưởng?

Sau khi thay đổi cổng thành 587, lỗi như sau. Tôi chỉ vô hiệu hóa tường lửa của tôi để xem đó có phải là vấn đề không và nó KHÔNG. Các lỗi mới (đối với cổng 587):

Thats lỗi cho tôi khi tôi thay đổi cổng để 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 

Cảm ơn, VP

+1

Không có điều nào như C# .NET. C# là ngôn ngữ lập trình, .NET là nền tảng. –

+13

Cảm ơn bạn. Bạn có thời gian để tập trung vào câu hỏi thực sự của tôi ở đây không? – zack

+0

Tôi nghĩ Scott đúng, gmail dường như phản hồi cổng 25 và 587. –

Trả lời

5

của Cảng của bạn ... Gmail yêu cầu cảng 587.

Nếu điều đó không hiệu quả, tôi chỉ có thể cung cấp cho bạn Lớp email của tôi.

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: Thêm phần này vào mã của bạn: email_client.UseDefaultCredentials = false;

+0

lemme đổi thành 587 ngay bây giờ và kiểm tra xem nó có hoạt động không. – zack

+0

Tôi đồng ý rằng cổng cần được cập nhật thành 587, tôi đã bỏ lỡ điều đó trong phản hồi ban đầu của mình. Tôi vẫn sẽ đưa mọi thứ ra tệp web.config nếu nó thực sự là một ứng dụng web. http://mail.google.com/support/bin/answer.py?hl=vi&answer=13287 –

+0

có lỗi khó chịu khi tôi thay đổi cổng thành 587. Máy chủ cho biết máy chủ đã chủ động từ chối kết nối. Tôi đã gửi đầy đủ lỗi cho bạn thông qua trang web của bạn .. vui lòng kiểm tra xem nó ra .. Cảm ơn, VP – zack

0

Có thể là tường lửa hoặc thứ gì đó. Tôi thấy rằng cách tốt nhất để dùng thử là chỉ cần kết nối với máy chủ theo cách thủ công.

Chỉ cần mở một dấu nhắc lệnh và viết:
telnet your.mail.server 25

này thường mang đến cho bạn một câu trả lời tương tự như "220 your.mail.server ESMTP".

Nếu bạn đang sử dụng Vista o Win7, bạn có thể phải bật ứng dụng Telnet tích hợp trước (đi tới "Chương trình và tính năng" và chọn "Bật hoặc tắt tính năng Windows" và chỉ cần chọn ứng dụng Telnet)

+0

telnet smtp.gmail.com 25 không hoạt động tuy nhiên telnet smtp.gmail.com 465 không hoạt động và mang lại cho tôi một màn hình màu đen trên dấu nhắc lệnh như thể chờ đợi cho một số đầu vào..port 587 giống như cổng 25 không hoạt động cho telnet .. Cảm ơn, VP – zack

+0

Tôi cũng nhận được cổng 465, nhưng 25 và 587 hoạt động tốt cho tôi. Vì vậy, tôi nghĩ rằng đó là một cơ hội cao mà bạn đã có một bức tường lửa của một số loại hoặc một số chương trình bảo mật khác trong cách chặn cổng nhưng nơi 465 đã được mở. –

0

Cố gắng đặt địa chỉ email đầy đủ trong tên người dùng NetworkCredential

+0

Tôi đã thử tất cả các kết hợp ... không hoạt động ... vẫn cung cấp cho tôi lỗi – zack

+1

Điều này hợp lệ nếu bạn đang sử dụng GAFYD - gmail thông thường có thể không yêu cầu điều này, nhưng nếu bạn có miền được lưu trữ, bạn cần [email protected] – Nate

2

Vì bạn đang tham chiếu System.Web Tôi cho rằng đây là một ứng dụng web, mặc dù tôi không rõ ràng về điều đó từ mô tả của bạn. Nếu đây là trong thực tế, một ứng dụng web, hãy chắc chắn rằng file web.config của bạn có các mục sau đây:

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

Điều này ngăn cản bạn khỏi phải ghi rõ thông tin này trong lớp email_log_files bạn

+0

Vui lòng xem bài đăng đã chỉnh sửa của tôi. Tôi vẫn có lỗi mặc dù đổi cổng thành 587. Vui lòng xem và cho tôi biết nếu có bất kỳ điều gì xảy ra với bạn. Cảm ơn, VP – zack

+0

Bạn đã thử giải pháp được chấp nhận đã được cung cấp trong bài đăng "Stackingflow" stackoverflow do bzlm cung cấp? http://stackoverflow.com/questions/1082216/gmail-smtp-via-c-net-errors-on-all-ports Xem những gì được trả về khi bạn chạy lệnh telnet đó: telnet smtp.gmail. com 587 –

+0

Nó xuất hiện như vậy: http://stackoverflow.com/questions/2640507/sending-email-via-gmail-in-net/2640554#2640554 (xem bình luận) – bzlm

1

Không chắc nếu điều này sẽ hữu ích, nhưng bạn đã kiểm tra xem IP của bạn có đang không chặn các email được gửi từ IP của bạn không? Tôi đã từng có một vấn đề tương tự, cuối cùng tôi đã kéo tóc ra toàn bộ cuối tuần vì không có gì.

Vì vậy, nó đáng để kiểm tra chỉ để loại bỏ điều đó. Chúc may mắn.

+0

Bật Android Hotspot của tôi đã giải quyết được sự cố này. Cảm ơn bạn. – Thomas

Các vấn đề liên quan