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

时间:2008-11-18 10:19:14

标签: c# authentication smtp

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

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

6 个答案:

答案 0 :(得分:145)

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);
        }
    }
}

您可以使用上述代码。

答案 1 :(得分:82)

确保在致电SmtpClient.Credentials后设置SmtpClient.UseDefaultCredentials = false

订单非常重要,因为设置SmtpClient.UseDefaultCredentials = false会将SmtpClient.Credentials重置为空。

答案 2 :(得分:6)

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

答案 3 :(得分:2)

要通过TLS / SSL发送消息,您需要将SmtpClient类的Ssl设置为true。

string to = "jane@contoso.com";
string from = "ben@contoso.com";
MailMessage message = new MailMessage(from, to);
message.Subject = "Using the new SMTP client.";
message.Body = @"Using this new feature, you can send an e-mail message from an application very easily.";
SmtpClient client = new SmtpClient(server);
// Credentials are necessary if the server requires the client 
// to authenticate before it will send e-mail on the client's behalf.
client.UseDefaultCredentials = true;
client.EnableSsl = true;
client.Send(message);

答案 4 :(得分:1)

你如何发送信息?

System.Net.Mail命名空间中的类(可能是您应该使用的)完全支持身份验证,可以在Web.config中指定,也可以使用SmtpClient.Credentials属性。

答案 5 :(得分:0)

在我的情况下甚至在完成上述所有操作之后。我不得不将我的项目从.net 3.5升级到.net 4,以对我们的内部Exchange 2010邮件服务器进行授权。