SMTP异常“发送邮件失败”

本文关键字:失败 异常 SMTP | 更新日期: 2023-09-27 18:09:53

我创建了用于发送电子邮件的控制台应用程序

    public static void sendEmail(string email, string body)
    {
        if (String.IsNullOrEmpty(email))
            return;
        try
        {
            MailMessage mail = new MailMessage();
            mail.To.Add(email);
            mail.From = new MailAddress("test@gmail.com");
            mail.Subject = "sub";
            mail.Body = body;
            mail.IsBodyHtml = true;
            SmtpClient smtp = new SmtpClient();
            smtp.Host = "smtp.gmail.com"; //Or Your SMTP Server Address
            smtp.Credentials = new System.Net.NetworkCredential("test@gmail.com", "admin@1234"); // ***use valid credentials***
            smtp.Port = 587;
            //Or your Smtp Email ID and Password
            smtp.EnableSsl = true;
            smtp.Send(mail);
        }
        catch (Exception ex)
        {
        }
    }

我正在使用正确的凭证我的gmail帐户。

GMail帐户是否有任何设置我需要做?

SMTP异常“发送邮件失败”

很可能你实际上得到了这个错误,它只是以某种方式被你在控制台应用程序中抑制了。

SMTP服务器需要安全连接或客户端未通过身份验证。服务器的响应是:5.5.1 Authentication Required.

更改这段代码并添加额外的一行。重要的是要放在凭证之前。

smtp.Host = "smtp.gmail.com"; //Or Your SMTP Server Address
// ** HERE! **
smtp.UseDefaultCredentials = false;
// ***********
smtp.Credentials = new System.Net.NetworkCredential("test@gmail.com", "admin@1234"); // ***use valid credentials***
smtp.Port = 587;

你还需要到这里启用不太安全的应用。

https://www.google.com/settings/security/lesssecureapps

或者如果你的账户有两步认证,你需要设置一个应用特定的密码,然后在你的代码中使用该密码,而不是你的主账户密码。

我刚刚在我的两步帐户上测试并验证了这一点。这里是我从LINQPad复制的整个方法,以防有帮助(当然删除了细节)。

var fromAddress = new MailAddress("myaccount@gmail.com", "My Name");
var toAddress = new MailAddress("test.address@email.com", "Mr Test");
const string fromPassword = "tbhagpfpcxwhkczd";
const string subject = "test";
const string body = "HEY, LISTEN!";
var smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword),
    Timeout = 20000
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}
编辑:

使用附件:

using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    Attachment attachment = new Attachment(filePath);
    message.Attachments.Add(attachment);
    smtp.Send(message);
}

根据我使用c# SMTP Client的经验,在代码中有一定的步骤要遵循(参见下面的代码片段)

smtpClient.Host = "smtp.gmail.com";
smtpClient.Port = 587;
smtpClient.EnableSsl = true;
smtpClient.UseDefaultCredentials = false;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.Credentials = new NetworkCredential("account@gmail.com", "secretPassword");
smtpClient.Send(mail);