2014-04-09 95 views
-1

发送电子邮件我有这样的代码片段发送一封电子邮件,但我每次EXCUTE它的时候,我得到这个例外通过谷歌

等待操作期限届满

public static void CreateTimeoutTestMessage(string server) 
    { 
     string to = "[email protected]"; 
     string from = "[email protected]"; 
     string subject = "Using the new SMTP client."; 
     string body = @"Using this new feature, you can send an e-mail message from an application very easily."; 
     MailMessage message = new MailMessage(from, to, subject, body); 
     SmtpClient client = new SmtpClient(server, 587); 
     client.EnableSsl = true; 
     client.Credentials=new NetworkCredential("[email protected]", "XXXXXXXXX"); 
     Console.WriteLine("Changing time out from {0} to 100.", client.Timeout); 
     client.Timeout = 100; 
     // Credentials are necessary if the server requires the client 
     // to authenticate before it will send e-mail on the client's behalf. 
     //client.Credentials = CredentialCache.DefaultNetworkCredentials; 

     try 
     { 
      client.Send(message); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Exception caught in CreateTimeoutTestMessage(): {0}", 
        ex.ToString()); 
     } 

     Console.ReadLine(); 
    } 
+6

提示:您正尝试通过Gmail的SMTP服务器发送邮件,而不提供您尝试发送的帐户的凭据。您还没有为GMail的SMTP服务器(它的'587' IIRC)指定正确的端口..您应该在这里查看类似的问题以获得您需要的答案。 –

+0

请阅读手册:https://support.google.com/mail/answer/78775?hl=zh-CN –

+0

我添加了帐户和gmail端口的凭据,但仍然收到相同的错误。 –

回答

0

当然你获得超时 - 您为超时指定了100毫秒。这很短。联系服务器并发送邮件可能需要超过100ms。尝试一下10000ms十秒。

我知道它在您复制并粘贴的MSDN sample中,但它太短。这是最好的删除下列行:

Console.WriteLine("Changing time out from {0} to 100.", client.Timeout); 
client.Timeout = 100; 

请试试这个(从here上心):

... 
    MailMessage message = new MailMessage(from, to, subject, body); 
    SmtpClient client = new SmtpClient(server, 587); 
    client.EnableSsl = true; 
    client.UseDefaultCredentials = false; // <--- NEW 
    client.Credentials = new NetworkCredential("[email protected]", "XXXXXXXXX"); 

这可能等待身份验证。

+0

仍然无法正常工作..请任何其他帮助 –

+0

那么它现在等待100秒(这是'超时'的默认值)? –

+0

是的,它等待100秒 –

0

如果您有:

SmtpClient client = new SmtpClient(server, 587); 

把它分解成:

SmtpClient client = new SmtpClient(); 
client.Host = "smtp.gmail.com"; 
client.Port = 587; 

因为我没有看到你所定义的服务器,如果你想使用Gmail,你可以只要宣布它是这样的主机,看看这是否让你更接近你的目标。

另外一个方面,Gmail的SMTP不允许你改变发送地址,以防止网络钓鱼,所以如果你打算允许输入改变变量,它不会工作,Gmail默认为电子邮件在证书中提供

+0

当我的CreateTimeoutTestMessage函数我设置字符串server =“smtp.gmail .com“ 我看不出将客户分成两部分的用处。 –

+0

就像我说的我没有看到服务器的定义,所以我必须确保主机实际上正在设置。 –