为什么我使用谷歌smtp无法发送电子邮件?

时间:2011-04-28 13:05:16

标签: c# email smtp gmail

您好 我有以下程序使用“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按任意键继续。 。

4 个答案:

答案 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# 应用程序的访问权限