繁体   English   中英

SmtpClient - 操作超时

[英]SmtpClient - The operation has timed out

我正在尝试使用 C# 创建一个小应用程序来发送电子邮件,但即使使用端口 587 (GMail) TLS 或 465 (GMail SSL) 我也无法让它工作。 我不确定是什么导致了我的问题,我应该编辑我的 app.config 文件吗? 这是我的代码:

try
{
  SmtpClient client = new SmtpClient("smtp.gmail.com", 465);
  client.EnableSsl = true;
  client.Timeout = 10000;
  client.DeliveryMethod = SmtpDeliveryMethod.Network;
  client.UseDefaultCredentials = false;
  client.Credentials = new NetworkCredential("myemailid", "mypwd");

  MailMessage msg = new MailMessage();
  msg.To.Add(txtTo.Text);
  msg.From = new MailAddress("myemailid");
  msg.Subject = txtSub.Text;
  msg.Body = txtMsg.Text;

  client.Send(msg);
  MessageBox.Show("sent");
}
catch (Exception ex) 
{
    MessageBox.Show(ex.Message);
}

端口 25 和 465 导致问题。 将端口更改为 587 对我有用。

Dim myCredential As System.Net.NetworkCredential
myCredential = New System.Net.NetworkCredential("emailid", "pwd")
smtp.Host = "server"
smtp.Port = 587
smtp.EnableSsl = True
smtp.UseDefaultCredentials = False
smtp.Credentials = myCredential
smtp.Send(mm)

如果您收到超时异常,则意味着 SmtpClient 无法连接到 SMTP 服务器或在发送过程中的某个时刻丢失了连接。

这可能是由于您端的防火墙阻止了到服务器的传出连接或阻止了端口 465 上的传出连接。

我遇到了同样的问题,以管理员为我排序的方式运行它

  1. 在防火墙设置中允许端口 25、465、587。

  2. 我可以通过 System.Net.Mail.SmtpClient 或 MailKit.Net.Smtp.SmtpClient 发送邮件

    在一些邮件服务中,例如aruba.it , System.Net.Mail.SmtpClient 根本不起作用。

以下是使用 MailKit.Net.Smtp.SmtpClient 的代码部分

using MailKit.Security;
using MimeKit;
using MailKit.Net.Smtp;
using MimeKit.Text;
using System;
using System.Net.Mail;
...
// create email message
var email = new MimeMessage();
email.From.Add(MailboxAddress.Parse("notifiche@articolo75.it"));
//email.From.Add(MailboxAddress.Parse("yourmail@gmail.com"));// if you want to use gmail service, enable this line.
email.To.Add(MailboxAddress.Parse(destinatario));
email.Subject = oggetto;
email.Body = new TextPart(TextFormat.Html) { Text = "<h1>Example HTML Message Body</h1>" };
if (password.Length > 0)
{
    msg += "Password : " + password;
}

if (link.Length > 0)
    email.Body = new TextPart(TextFormat.Html) { Text = messaggio + "<a href=\"" + link + "\"" + ">Clicca qui</a>" + msg }; 
else
    email.Body = new TextPart(TextFormat.Html) { Text = messaggio }; 

// send email
var smtp = new MailKit.Net.Smtp.SmtpClient();
smtp.Connect("smtps.aruba.it", 465, SecureSocketOptions.SslOnConnect); 
smtp.Authenticate("notifiche@articolo75.it", "password");
//smtp.Connect("smtp.gmail.com", 587, SecureSocketOptions.StartTls);// if you want to use gmail service, enable this line.
//smtp.Authenticate("yourmail@gmail.com", "password");// if you want to use gmail service, enable this line.
smtp.Send(email);
smtp.Disconnect(true);

以下是使用 System.Net.Mail.SmtpClient 的代码部分

using System;
using System.Net.Mail;
...
try
{
    MailMessage mail = new MailMessage();
    mail.IsBodyHtml = true;
    mail.From = new MailAddress(strFromMail);
    mail.To.Add(new MailAddress(strToMail));
    mail.Subject = oggetto;
    mail.Body = messaggio;

    System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("smtp.gmail.com", 25/* or 587 */);
    System.Net.NetworkCredential basicCredential1 = new System.Net.NetworkCredential(strFromMail, "password");
    client.EnableSsl = true;
    client.UseDefaultCredentials = false;
    client.Credentials = basicCredential1;
    
    client.Send(mail);
}
catch (Exception ex)
{
    MessageBox.Show("Error sending email \n"+ex.ToString());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM