web-dev-qa-db-ja.com

C#でSMTPを認証するにはどうすればよいですか

SMTPを使用してメッセージを送信する新しいASP.NET Webアプリケーションを作成します。問題は、smtpがメッセージの送信者から認証されなかったことです。

プログラムでSMTPを認証するにはどうすればよいですか? C#には、ユーザー名とパスワードを入力するための属性を持つクラスがありますか?

70
ecleel
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("[email protected]"); 

        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("[email protected]"); 

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

上記のコードを使用できます。

146
Arief

必ずSmtpClient.CredentialsafterSmtpClient.UseDefaultCredentials = falseを呼び出して設定してください。

SmtpClient.UseDefaultCredentials = falseを設定するとSmtpClient.Credentialsがnullにリセットされるため、順序は重要です。

83
Joe King

メッセージを送信する前に Credentials プロパティを設定します。

6
OJ.

TLS/SSLを介してメッセージを送信するには、SmtpClientクラスのSslをtrueに設定する必要があります。

string to = "[email protected]";
string from = "[email protected]";
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);
2
Jason Dang

メッセージはどのように送信しますか?

System.Net.Mail名前空間内のクラス(おそらく使用するものです)は、Web.configで指定されるか、SmtpClient.Credentialsプロパティを使用して、認証を完全にサポートします。

1
Tor Haugen

私の場合、上記のすべてを実行した後でもです。内部交換2010メールサーバーに対して認証するには、プロジェクトを.net 3.5から.net 4にアップグレードする必要がありました。

0
YoniXw