我在使用C#winform应用程序中的smtp和gmail发送邮件时遇到问题。 没有附件发送成功但是当添加附件时,应用程序被抛出到System.Net.Mail.SmtpException并且它的消息是“操作已经超时”。 有什么问题?!
SmtpClient smtpClient = new SmtpClient();
Attachment att=new System.Net.Mail.Attachment("Path");
smtpClient.EnableSsl = true;
smtpClient.Port = 25;
smtpClient.Timeout = 20000;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.UseDefaultCredentials = false;
smtpClient.Host = "smtp.gmail.com";
smtpClient.Credentials = new System.Net.NetworkCredential
(from@gmail.com, "password" );
System.Net.Mail.MailAddress from = new System.Net.Mail.MailAddress(from@gmail.com,
from,
System.Text.Encoding.UTF8);
System.Net.Mail.MailAddress to = new System.Net.Mail.MailAddress("to@gmail.com");
MailMessage message = new MailMessage(from, to);
message.Body = "some text";
message.BodyEncoding = System.Text.Encoding.UTF8;
message.Subject = "Subject";
message.SubjectEncoding = System.Text.Encoding.UTF8;
message.Bcc.Add(bcc@gmail.com);
message.Attachments.Add(att);
try
{
smtpClient.Send(message);
}
catch (System.Net.Mail.SmtpException ex)
{
MessageBox.Show(ex.Message); // The operation has timed out
}
修改
我在gmail和yahoo都有这个问题!
答案 0 :(得分:0)
我没有看到您的代码中存在任何重大缺陷,我认为GMail
前一段时间将其附件大小限制提升为50Mb
...无论如何,我建议您继续进行以下修改:
尽可能增加您的超时时间,如果您处理的是非常大的附件,就可以解决您的问题:smtpClient.Timeout = Int32.MaxValue;
。
尝试使用不同的服务器端口。也许你有其他应用程序(例如Outlook
)使用端口25
进行通信,这会产生冲突。切换到465
。如果不起作用,请尝试使用587
。
尝试使用其他帐户进行测试。