如何在.NET中为SmtpClient对象设置用户名和密码?

Met*_*uru 148 c# smtpclient

我看到构造函数的不同版本,一个使用来自web.config的信息,一个指定主机,一个指定主机和端口.但是如何将用户名和密码设置为与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());
    }              
}
Run Code Online (Sandbox Code Playgroud)

小智 282

SmtpClient可以由代码使用:

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

  • @pipelinecache Ryan是对的,如果没有提供凭据,它将查看web.config中的<system.net> <mailSettings> (2认同)
  • 我相信如果 `UseDefaultCredentials` 设置为 true,它将使用默认值,否则它将首先查看 `Credentials` 属性,然后查看 web.config。如果没有设置,它将匿名发送电子邮件。 (2认同)
  • 警告:如果您设置“ UseDefaultCredentials = false”,则必须在设置凭据之前执行此操作,因为更改会使所有现有凭据集为空。 (2认同)

Gab*_*abe 25

使用 NetworkCredential

是的,只需将这两行添加到您的代码中即可.

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

client.Credentials = credentials;
Run Code Online (Sandbox Code Playgroud)

  • 为什么不只一行? (2认同)

小智 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);
Run Code Online (Sandbox Code Playgroud)

  • 你应该尝试只将相关代码发布到答案中 (4认同)
  • @johnny5 上下文不是世界上最大的犯罪 (2认同)