无法通过SMTP Gmail发送电子邮件

时间:2019-10-25 14:27:59

标签: c# smtp gmail smtpclient

在C#中,我尝试使用Gmail发送电子邮件。这是我的代码:

MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");

mail.From = new MailAddress("myemail@gmail.com");
mail.To.Add("myemailto@gmail.com");
mail.Subject = "Test Mail";
mail.Body = "This is for testing SMTP mail from GMAIL";

SmtpServer.Port = 465;
SmtpServer.Credentials = new System.Net.NetworkCredential("myemail@gmail.com", "mypsw");
SmtpServer.UseDefaultCredentials = false;
SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;
SmtpServer.EnableSsl = true;

SmtpServer.Send(mail);

我收到错误消息:

  

{System.Net.Mail.SmtpException:发送邮件失败。 ---> System.IO.IOException:无法从传输连接中读取数据:连接已关闭。
  在System.Net.Mail.SmtpReplyReaderFactory.ProcessRead(字节[]缓冲区,Int32偏移量,Int32读取,布尔值readLine)

2 个答案:

答案 0 :(得分:1)

某处有答案,但我不记得在哪里,所以我将在下面为您编写代码。如果有人找到答案,请发表评论,我会指出。

var smtpClient = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587, // Port 
    EnableSsl = true,
    Credentials = new NetworkCredential("yourmail@gmail.com", "yourpw")
};

MailMessage msg = new MailMessage();
msg.IsBodyHtml = true;
msg.Subject = "Subject";

msg.From = new MailAddress("yourmail@gmail.com");


msg.Body = "Body here";
msg.Bcc.Add(li[i].Value);
smtpClient.Send(msg);

答案 1 :(得分:0)

来自EnableSsl属性的文档:

  

SmtpClient类仅支持RFC 3207中定义的用于通过传输层安全的安全SMTP的SMTP服务扩展。在此模式下,SMTP会话在未加密的通道上开始,然后客户端向服务器发出STARTTLS命令切换到使用SSL的安全通信。有关更多信息,请参见Internet工程任务组(IETF)发布的RFC 3207。   另一种连接方法是在发送任何协议命令之前先建立SSL会话。这种连接方法有时称为SMTP / SSL,基于SSL的SMTP或SMTPS,默认情况下使用端口465。当前不支持使用SSL的替代连接方法。

长话短说,其他Web来源的说法是,端口465希望在建立连接时协商SSL(SmtpClient不支持),而587会在初始非安全对话框(受SmtpClient支持)之后使用STARTTLS。