При отправке электронной почты через SMTP-сервер из веб-приложения ASP.NET я испытываю загадочную (для меня) ошибку. Я получаю известную ошибку "невозможно передать по адресу xxx@yyy.zzz". Что для меня загадочно, так это то, что когда я вырезал и вставлял тот же самый код, который отправляет электронное письмо в обычное приложение .NET Windows Forms, отправлял электронное письмо с этим приложением, все это прекрасно работало. Это заставило меня подумать, что, возможно, проблема в том, что приложение ASP.NET работает как NETWORK SERVICE, в то время как приложение Windows Forms работает под учетной записью пользователя домена, но оказывается, что у меня есть другое приложение ASP.NET, отправляющее электронную почту через ту же SMTP-сервер работает под NETWORK SERVER на том же IIS, и это приложение не испытывает этой проблемы.
Я также пытался отправлять электронные письма через SMTP-сервер вручную, используя telnet SMTP-сервер на порту 25 и вручную запуская SMTP-протокол, и все это прекрасно работает. SMTP-сервер не настроен на какую-либо аутентификацию или SSL.
Еще одним загадочным фактом является то, что приложение ASP.NET может отправлять электронные письма с адреса в том же домене на адрес электронной почты в том же домене, но не на любой адрес за пределами домена. Но приложение Windows Forms, использующее точно такой же код, может отправлять электронные письма с любого адреса на любой адрес как внутри, так и за пределами домена.
Итак, подведем итог:
- Приложение ASP.NET может отправлять
электронные письма с адресов в пределах
домен по адресам внутри домена,
но не по адресам за пределами
домен.
- Приложение Windows Forms работает
тот же код на том же компьютере
можно отправлять электронные письма с любого адреса
ЛЮБОЙ адрес.
- Другое приложение ASP.NET на
тот же IIS работает под тем же
аккаунт (NETWORK SERVICE) можно отправить
электронная почта, использующая тот же SMTP-сервер
с ЛЮБОГО адреса на ЛЮБОЙ адрес.
- Нет настроенной аутентификации
на SMTP-сервере.
- Как приложение ASP.NET, так и
Приложение Windows Forms использует
класс System.Net.Mail.SmtpClient
отправить
System.Net.Mail.MailMessage.
Код, который отправляет массаж по электронной почте:
private void button1_Click(object sender, EventArgs e)
{
MailMessage mesasge = new MailMessage(txtFrom.Text, txtTo.Text, "Test mail", txtBody.Text);
SmtpClient client = new SmtpClient();
if (!(string.IsNullOrEmpty(txtUserName.Text))) //Is false since txtUserName.Text is empty
client.Credentials = new System.Net.NetworkCredential(txtUserName.Text, txtPassword.Text);
client.EnableSsl = false;
client.Host = txtServer.Text;
client.Port = 25;
try
{
client.Send(mesasge);
}
catch (Exception ex)
{
txtResponse.Text = ex.Message;
}
}
Насколько я понимаю, это должно зависеть от конфигурации, а не от проблем кодирования. У кого-нибудь есть идея, в чем может быть проблема, и, возможно, как это можно решить? Thanx!