gpt4 book ai didi

c# - 如何使用 SmtpClient 和 DefaultNetworkCredentials 将邮件发送到只允许经过身份验证的发件人的分发列表?

转载 作者:行者123 更新时间:2023-11-30 12:14:25 27 4
gpt4 key购买 nike

我正在尝试通过我们的内部 Exchange 2007 服务器(使用 SMTP)从计算机向同一域中的所有客户端发送来自 C# 控制台应用程序的自动电子邮件,但我遇到了一个问题,分发列表只允许经过身份验证发件人。基本上我发送的邮件被 Exchange 拒绝了:

#550 5.7.1 RESOLVER.RST.AuthRequired;需要身份验证 ##rfc822;AuthTESTGroup@example.com

我正在使用 System.Net.Mail.SmtpClient 并将 Credentials 属性设置为 System.Net.CredentialCache.DefaultNetworkCredentials,但在某处,凭据运行此程序的帐户(我是具有有效邮箱的有效域用户)未正确传递到 Exchange。

我正在使用 System.Net.CredentialCache.DefaultNetworkCredentials 因为我不想硬编码用户名或密码(在代码本身或任何类型的配置文件中);我希望进程使用 Windows 身份验证通过我们的 SMTP 服务器进行身份验证。

这是我用来重现问题的测试程序(域名已匿名化):

using System;
using System.Net.Mail;

namespace ConsoleApplication1
{
class Program
{
static void Main()
{
var smtpClient = new SmtpClient
{
Host = "MAIL",
Port = 25,
DeliveryMethod = SmtpDeliveryMethod.Network,
Credentials = System.Net.CredentialCache.DefaultNetworkCredentials
};

var mailMessage = new MailMessage
{
Body = "Testing",
From = new MailAddress(Environment.UserName + "@example.com"),
Subject = "Testing",
Priority = MailPriority.Normal
};

mailMessage.To.Add("AuthTESTGroup@example.com");

smtpClient.Send(mailMessage);
}
}
}

每当我以自己的身份运行此程序时(同样,我是域中的有效用户,在 Exchange 服务器上有一个现有邮箱),我会收到来自 Exchange 的无法送达的退回邮件以及响应:

#550 5.7.1 RESOLVER.RST.AuthRequired;需要身份验证 ##rfc822;AuthTESTGroup@example.com

我与我们的 Exchange 服务器管理员交谈,他从 Exchange 服务器的事件日志中看到以下错误:

Account For Which Logon Failed:
Security ID: NULL SID
Account Name:
Account Domain:

Failure Information:
Failure Reason: Unknown user name or bad password.
Status: 0xc000006d
Sub Status: 0xC0000064

显然,状态代码和子状态代码转换为:

0xc000006d 这是由于错误的用户名或身份验证信息造成的。通常记录为状态代码,子状态为 0xc0000064

0xC0000064 用户名不存在

再说一次,即使我将 SmtpClient.Credentials 设置为 System.Net,我的 Windows 凭据似乎也没有传递到 Exchange 服务器.CredentialCache.DefaultNetworkCredentials

有什么想法吗?

提前致谢!

最佳答案

你需要传递用户名,密码

这是我将如何做的代码片段...请记住,这是您需要进行必要更改以适合您的用例的代码片段

MailClient = new SmtpClient();
MailClient.Credentials = new System.Net.NetworkCredential(username, password);

下面是另一个示例,但使用了服务器变量。这可能是您需要做的,请尝试让我知道服务器,例如您可以将其作为您的 domain.com例子 : //SmtpClient client = new SmtpClient("smtp.contoso.com");//这将是服务器 //client.Credentials = CredentialCache.DefaultNetworkCredentials;

    public static void CreateBccTestMessage(string server)
{
MailAddress from = new MailAddress("ben@contoso.com", "Ben Miller");
MailAddress to = new MailAddress("jane@contoso.com", "Jane Clayton");
MailMessage message = new MailMessage(from, to);
message.Subject = "Using the SmtpClient class.";
message.Body = @"Using this feature, you can send an e-mail message from an application very easily.";
MailAddress bcc = new MailAddress("manager1@contoso.com");
message.Bcc.Add(bcc);
SmtpClient client = new SmtpClient(server);
client.Credentials = CredentialCache.DefaultNetworkCredentials;
Console.WriteLine("Sending an e-mail message to {0} and {1}.",
to.DisplayName, message.Bcc.ToString());
try
{
client.Send(message);
}
catch (Exception ex)
{
Console.WriteLine("Exception caught in CreateBccTestMessage(): {0}",
ex.ToString());
}
}

关于c# - 如何使用 SmtpClient 和 DefaultNetworkCredentials 将邮件发送到只允许经过身份验证的发件人的分发列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9537339/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com