如何修复发送电子邮件时'No connection could be made because the target machine actively refused it'错误



我试图发送一封简单的测试电子邮件来检查邮件类在C#中的工作方式,但在尝试调用smtp.send(message);时,我收到了以下错误:SocketException: No connection could be made because the target machine actively refused it 173.194.207.109:587我四处查看了wireshark中的数据包(尽管无可否认,我不知道这些数据包的含义),每次我尝试发送电子邮件时,谷歌似乎都会发回一个[RST,ACK]数据包。有没有进一步诊断的方法?

var fromAddress = new MailAddress("FROM@gmail.com", "FROM NAME");
var toAddress = new MailAddress("TO@gmail.com", "TO NAME");
const string fromPassword = "password";
const string subject = "Subject";
const string body = "Body";
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
})
{
smtp.Send(message);
}    

看起来您可能想要更改port值,因为您有EnableSsl = true,

如果使用SSL,请连接到端口465上的smtp.gmail.com。(如果使用TLS,请连接端口587。)使用谷歌用户名和密码登录以进行身份验证,从而连接SSL或TLS。参考

尝试:

var fromAddress = new MailAddress("FROM@gmail.com", "FROM NAME");
var toAddress = new MailAddress("TO@gmail.com", "TO NAME");
const string fromPassword = "password";
const string subject = "Subject";
const string body = "Body";
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 465, //or try: port = 587, or port = 25
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
})
{
smtp.Send(message);
}

这个StackOverflow答案也可能是一个很好的参考。

相关内容

最新更新