如何在C#中进行SMTP身份验证

ecl*_*eel 71 c# authentication smtp

我创建了使用SMTP发送消息的新ASP.NET Web应用程序.问题是smtp没有通过谁发送消息进行身份验证.

如何在程序中对SMTP进行身份验证?C#有一个具有输入用户名和密码属性的类吗?

Ari*_*ief 150

using System.Net;
using System.Net.Mail;

using(SmtpClient smtpClient = new SmtpClient())
{
    var basicCredential = new NetworkCredential("username", "password"); 
    using(MailMessage message = new MailMessage())
    {
        MailAddress fromAddress = new MailAddress("from@yourdomain.com"); 

        smtpClient.Host = "mail.mydomain.com";
        smtpClient.UseDefaultCredentials = false;
        smtpClient.Credentials = basicCredential;

        message.From = fromAddress;
        message.Subject = "your subject";
        // Set IsBodyHtml to true means you can send HTML email.
        message.IsBodyHtml = true;
        message.Body = "<h1>your message body</h1>";
        message.To.Add("to@anydomain.com"); 

        try
        {
            smtpClient.Send(message);
        }
        catch(Exception ex)
        {
            //Error, could not send the message
            Response.Write(ex.Message);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用上面的代码.

  • 它们是您的电子邮件地址和密码,mail.mydomain.com是您的SMTP服务器(例如smtp.gmail.com). (5认同)
  • 用户名和密码从哪里来?什么是 mail.mydomain.com ?那是他的 DNS 名称吗? (2认同)
  • 您应该将 MailMessage 对象包装在 using 语句中(或在完成后对其调用 Dispose),对吗? (2认同)

Joe*_*ing 84

确保SmtpClient.Credentials 通话设置SmtpClient.UseDefaultCredentials = false.

顺序很重要,因为设置SmtpClient.UseDefaultCredentials = false将重置SmtpClient.Credentials为null.


OJ.*_*OJ. 6

在发送消息之前设置Credentials属性.