我试图发送一封简单的测试电子邮件来检查邮件类在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答案也可能是一个很好的参考。