.NETでSmtpClientオブジェクトのユーザー名とパスワードを設定するにはどうすればよいですか?


160

コンストラクタのさまざまなバージョンが表示されます。1つはweb.configの情報を使用し、1つはホストを指定し、もう1つはホストとポートを指定します。しかし、どうすればユーザー名とパスワードをweb.configとは異なるものに設定できますか?内部のSMTPが一部の高セキュリティクライアントによってブロックされ、それらのSMTPサーバーを使用したいという問題があります。web.configの代わりにコードからこれを行う方法はありますか?

この場合、たとえば、データベースから何も利用できない場合、web.config資格情報をどのように使用しますか?

public static void CreateTestMessage1(string server, int port)
{
    string to = "jane@contoso.com";
    string from = "ben@contoso.com";
    string subject = "Using the new SMTP client.";
    string body = @"Using this new feature, you can send an e-mail message from an application very easily.";
    MailMessage message = new MailMessage(from, to, subject, body);
    SmtpClient client = new SmtpClient(server, port);
    // Credentials are necessary if the server requires the client 
    // to authenticate before it will send e-mail on the client's behalf.
    client.Credentials = CredentialCache.DefaultNetworkCredentials;

    try {
        client.Send(message);
    }
    catch (Exception ex) {
        Console.WriteLine("Exception caught in CreateTestMessage1(): {0}", 
                    ex.ToString());
    }              
}

回答:


301

SmtpClientはコードで使用できます。

SmtpClient mailer = new SmtpClient();
mailer.Host = "mail.youroutgoingsmtpserver.com";
mailer.Credentials = new System.Net.NetworkCredential("yourusername", "yourpassword");

設定しない場合、デフォルトでweb.configの設定が使用されますか?
CloudMeta 2010年

3
@pipelinecache Ryanは正しい、資格情報が提供されない場合、web.configの<system.net> <mailSettings>を参照します
Tomas

1
UseDefaultCredentialstrueに設定されている場合はデフォルトが使用されると思います。それ以外の場合は、最初にCredentialsプロパティを調べ、次にweb.configを調べます。何も設定されていない場合は、メールが匿名で送信されます。
TheGateKeeper 2013年

1
c#コードでユーザー名とパスワードをハードコードしても安全ですか?
kudlatiger 2017年

3
警告: 'UseDefaultCredentials = false'を設定する場合、変更は既存の資格情報セットを無効にするため、資格情報を設定する前に行う必要があります。
WhoIsRich 2017

26

使用する NetworkCredential

はい、この2行をコードに追加してください。

var credentials = new System.Net.NetworkCredential("username", "password");

client.Credentials = credentials;

4
なぜ1行ではないのですか?
JSON

7
SmtpClient MyMail = new SmtpClient();
            MailMessage MyMsg = new MailMessage();
            MyMail.Host = "mail.eraygan.com";
            MyMsg.Priority = MailPriority.High;
            MyMsg.To.Add(new MailAddress(Mail));
            MyMsg.Subject = Subject;
            MyMsg.SubjectEncoding = Encoding.UTF8;
            MyMsg.IsBodyHtml = true;
            MyMsg.From = new MailAddress("username", "displayname");
            MyMsg.BodyEncoding = Encoding.UTF8;
            MyMsg.Body = Body;
            MyMail.UseDefaultCredentials = false;
            NetworkCredential MyCredentials = new NetworkCredential("username", "password");
            MyMail.Credentials = MyCredentials;
            MyMail.Send(MyMsg);

4
あなたは答えに関連のあるコードだけを投稿してみてください
ジョニー5

1
@ johnny5コンテキストは世界で最大の犯罪ではありません
Shiv

@shivあなたは正しいですが、コンテキストは答えの説明を書くことになりますが、これもここにはありません。
ジョニー2018年

1
@ johnny5他の上位の回答には説明がありません-コードは自己文書化されているため、例はかなり自明です。
Shiv

@Shiv上位の回答は関連するコードのみを投稿するため、自己文書化されています。私の元のコメントはこの回答と同じくらい多くの賛成票を持っています。理由のため、この質問に答えるのに2行しか必要ないのに、なぜ15行のコードをふるいにかけなければならないのかわかりません。それを賛成する。そうでなければ、これらはポイントがコメントについて議論に私は他のFOUNDが有用であった2年前なされていない
ジョニー5

-2

すべてのクライアントが認証済みのSMTPアカウントを使用しているわけではないため、web.configファイルでアプリキーの値が指定されている場合にのみ、SMTPアカウントを使用しました。

VBコードは次のとおりです。

sSMTPUser = ConfigurationManager.AppSettings("SMTPUser")
sSMTPPassword = ConfigurationManager.AppSettings("SMTPPassword")

If sSMTPUser.Trim.Length > 0 AndAlso sSMTPPassword.Trim.Length > 0 Then
    NetClient.Credentials = New System.Net.NetworkCredential(sSMTPUser, sSMTPPassword)

    sUsingCredentialMesg = "(Using Authenticated Account) " 'used for logging purposes
End If

NetClient.Send(Message)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.