Это в основном кросс-пост от моего StackOverflow вопрос чтобы увидеть, смогу ли я получить перспективу на стороне сервера.
Я пытаюсь отправить автоматические электронные письма из консольного приложения C # с компьютеров клиентам, находящимся в одном домене, через наш внутренний сервер Exchange 2007 (с использованием SMTP), но у меня возникает проблема со списками рассылки, которые разрешают только аутентифицированных отправителей. В основном письма, которые я отправляю, отклоняются Exchange с помощью:
#550 5.7.1 RESOLVER.RST.AuthRequired; authentication required ##rfc822;AuthTESTGroup@example.com
я использую System.Net.Mail.SmtpClient
и установив для свойства Credentials значение System.Net.CredentialCache.DefaultNetworkCredentials
(который должен проходить через учетные данные Windows текущего пользователя, запускающего процесс), но где-то по ходу дела учетные данные учетной записи, в которой запущена эта программа (я, действительный пользователь домена с действующим почтовым ящиком), не передаются в Exchange правильно.
я использую System.Net.CredentialCache.DefaultNetworkCredentials
потому что я не хочу жестко закодировать имя пользователя или пароль (ни в самом коде, ни в каком-либо файле конфигурации); Я хочу, чтобы процесс аутентифицировался на нашем SMTP-сервере с использованием аутентификации Windows.
Вот тестовая программа, которую я использовал для воспроизведения проблемы (доменные имена анонимизированы):
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; authentication required ##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 This is either due to a bad username or authentication information. Usually logged as status code with 0xc0000064 as substatus
0xC0000064 user name does not exist
Итак, опять же, это как если бы где-то по ходу дела мои учетные данные Windows не передаются на сервер Exchange, даже если я устанавливаю SmtpClient.Credentials
к System.Net.CredentialCache.DefaultNetworkCredentials
Любые идеи?
Или возможно каким-то образом настроить списки рассылки в Exchange 2007, чтобы требовать аутентифицированных отправителей, кроме случаев, когда этот отправитель находится в том же домене? (Я предполагаю, что у Exchange нет возможности гарантировать, что почта отправляется через SMTP, но я очень мало знаю об администрировании Exchange)
Заранее спасибо!
Попробуйте установить smtpClient.UseDefaultCredentials = true.
Значение по умолчанию для этого свойства - false. Я не знаю наверняка, решит ли это вашу проблему, но, похоже, попробовать это легко.
Ниже приведены настройки SMTP в Google.
SmtpServer.Port = 587;
SmtpServer.Credentials = new System.Net.NetworkCredential("username", "password");
SmtpServer.EnableSsl = true;
Вместо SMTP вы можете использовать CDOSYS, Collaboration Data Objects (CDO) для библиотеки Windows 2000 (Cdosys.dll). Библиотека Cdosys.dll также известна как CDOSYS. Перейди по ссылке : Электронная почта C # CDO
С давних пор я вспоминаю, что вход в систему SMTP должен был быть включен для каждой учетной записи в Exchange, поэтому, хотя вы можете подключиться к Exchange с использованием собственного протокола (на основе RPC?), Ваша учетная запись может быть не настроена для разрешения доступа SMTP.