您好 我有以下程序使用“smtp.gmail.com:587”发送电子邮件
namespace TestMailServer
{
class Program
{
static void Main(string[] args)
{
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
mail.From = new MailAddress("myTest@gmail.com");
mail.To.Add("myTest2@gmail.com");
mail.Subject = "Test Mail";
mail.Body = "This is for testing SMTP mail";
SmtpServer.Port = 587;
SmtpServer.Credentials = new System.Net.NetworkCredential("myTest@gmail.com", "myPassword");
SmtpServer.EnableSsl = true;
SmtpServer.Send(mail);
Console.WriteLine("Send out");
}
}
}
myTest@gmail.com,myTest2 @gmail.com确实存在且myTest@gmail.com的密码是myPassword。为什么我收到以下错误:
未处理的例外情况: System.Net.Mail.SmtpException:The SMTP服务器需要安全 连接或客户端不是 认证。服务器响应 是:5.5.1需要身份验证。 了解更多信息 System.Net.Mail.MailCommand.CheckResponse(SmtpStatusCode statusCode,String response)at System.Net.Mail.MailCommand.Send(SmtpConnection conn,Byte [] command,String from)
在 System.Net.Mail.SmtpTransport.SendMail(MailAddress sender,MailAddressCollection 收件人,String deliveryNotify, SmtpFailedRecipientException&安培; 例外) System.Net.Mail.SmtpClient.Send(MAILMESSAGE 消息) TestMailServer.Program.Main(字符串[] ar:)在D:\ visual studio中 2010 \项目\ TestMailServer \ TestMailServer \的Program.cs:行 26按任意键继续。 。
答案 0 :(得分:5)
我不确定是什么原因导致了您的问题。以下是我用于通过Gmail帐户成功发送电子邮件的一些代码:
const string from = "...";
var fromAddr = new MailAddress(from, "Bug Tracker");
var toAddr = new MailAddress("...@...", "...");
var client = new SmtpClient {
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Timeout = 30 * 1000,
Credentials = new NetworkCredential(fromAddr.Address, "...")
};
using (var msg = new MailMessage(fromAddr, toAddr)) {
msg.Subject = "...";
msg.Body = string.Format("username: {0}\nversion: {1}\n\n{2}", Environment.UserName, Assembly.GetExecutingAssembly().GetName().Version.ToString(3), cbtext);
client.Send(msg);
}
答案 1 :(得分:2)
我有Ferruccio发布的代码,最近停止了工作。我将设置移动到我的网站的.config文件中,它又开始工作了:
<system.net>
<mailSettings>
<smtp from="fromEmail" deliveryMethod="Network">
<network defaultCredentials="false" enableSsl="true" host="smtp.gmail.com" port="587"
userName="fromEmail" password="password"/>
</smtp>
</mailSettings>
</system.net>
答案 2 :(得分:1)
据我记得,默认情况下UseDefaultCredentialsProperty设置为true。这可能会导致您获得的身份验证错误。尝试将上一个答案中的这些行添加到您的代码中
SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;
SmtpServer.UseDefaultCredentials = false;
如果没有明确设置DeliveryMethod属性,我会遇到几个奇怪的异常。
答案 3 :(得分:0)
一直在为同样的错误而苦苦挣扎。使用 smtp.gmail.com,除非经过身份验证,否则谷歌会阻止任何登录发件人电子邮件的尝试。登录您的电子邮件帐户并对发送的验证邮件进行操作。这将授予对您的 C# 应用程序的访问权限