2012-05-31 1 views
0

Я знаю, что есть различные потоки, связанные с этой проблемой, но я не смог принять ни один из ответов на этот поток и заставить его работать на моем сервере.C# mailer - 550 Доступ запрещен - Недействительное имя HELO

Так что попробуй посмотреть, может ли кто-нибудь помочь мне здесь. 99% сообщений отправляются правильно, а некоторые из них фактически возвращаются с этой ошибкой.

Мой код выглядит следующим образом

 MailMessage mm = new MailMessage(Settings.EmailCustomerService, to, subject, body); 
     mm.SubjectEncoding = Encoding.UTF8; 
     mm.BodyEncoding = Encoding.UTF8; 
     mm.IsBodyHtml = true; 

     MailAddress add = new MailAddress(Settings.EmailCustomerService, "Customer Service"); 
     mm.From = add; 

     try 
     { 
      SmtpClient client = new SmtpClient(Settings.EmailSMTP); 

      client.UseDefaultCredentials = false; 
      client.Credentials = new NetworkCredential(Settings.EmailUser, Settings.EmailPwd); 

      System.Threading.ParameterizedThreadStart threadStart = new System.Threading.ParameterizedThreadStart(SendInThread); 
      threadStart.Invoke(new SendInThreadParams 
      { 
       client = client, 
       Message = mm 
      }); 
     } 
     finally 
     { 
      mm = null; 
     } 

На самом деле код полномочий был добавлен позже, но мой код был хорошо работать даже без него. Просто случается, что 1% электронной почты никогда не попадают к получателям, и добавление этих двух строк для учетных данных не имеет значения.

Настройки.EmailUser - это просто пользователь на сервере, на котором работает SMTP, но я НЕ прикрепляю его к никуда.

Держу пари, что это проблема.

Сервер SMTP Relay настроен на использование 127.0.0.1 и полное доменное имя это просто название машины (что-то вроде «MACHINE1» ... ничего с именем domain.com)

ошибка я получаю это

Reporting-MTA: DNS; Machine1
Received-С-MTA: DNS; Machine1
Прибытие-Date: Wed, 30 мая 2012 23:08:36 -0700
Конечный получатель: rfc822; [email protected]
Действие: не удалось
Статус: 5.5.0
Диагностическое-код: SMTP; 550 Доступ запрещен - Неверное имя HELO (см RFC2821 4.1.1.1)

вернуться сообщение по электронной почте назад был:

> This is an automatically generated Delivery Status Notification. 
    Delivery to the following recipients failed. 
    [email protected] 

Благодаря передовой ...

+0

Какова идея с 'threadStart'? Надеюсь, вы не думаете, что это должно начаться. – leppie

+0

Я бы не стал сосредотачиваться на том, как отправляется электронное письмо. Моя текущая проблема - возврат 550 HELO. Я получаю 1% отправленных писем. –

+0

@ Разработчик: для тех 1% вы проверили, как вы отправляете команду HELO? Попробуйте проверить через Wireshark. Лучше всего предположить, что SMTP-сервер не распознает параметр. –

ответ

1

В дополнение к привязанности сообщение/доставка-статус, то DSN, как правило, имеют возвращенное сообщение. Для этой проблемы вы также должны размещать заголовки возвращаемого сообщения и DSN.

Мне кажется, что ваш сервер принял это сообщение, но имеет ошибку, передающую его дальше. Если ваш сервер отклонил его, ваш код вывел бы исключение. Таким образом, ваш сервер Machine1 принял его, попытался передать его на адрес электронной почты, но email.net отклонил его. Затем Machine1 сгенерировал DSN (уведомление о статусе доставки, в вашем случае - отчет о недоставке).

Другими словами, это ошибка конфигурации с почтовым сервером, а не проблема с кодом. Почти наверняка проблема заключается в том, что сервер электронной почты не настроен с полным доменным именем, как вы заявляли.

В качестве проблемы с конфигурацией он относится к ServerFault.

+0

Из того, что я вижу, текущее FQDN установлено на виртуальном SMTP-сервере (работает в диспетчере IIS6), когда я выбираю Properties, Delivery, Advanced .. и там у меня есть значение «Machine1». См. Отредактированный вопрос Если я нажму кнопку «Проверить DNS», сообщение сообщит, что оно действительно. Эта настройка уже была на месте. –

+1

Я провел некоторое исследование ... пытаясь узнать полное доменное имя сервера, и где-то я прочитал, что это комбинация имени HOST и PRIMARY DNS SUFFIX. Имя хоста - «Machine1», но DNS-суффикс - «...» (пустой). Это проблема? Полное доменное имя –

+0

означает «Полностью квалифицированное доменное имя». Акцент делается на ПОЛНОСТЬЮ. «Machine1» является «неквалифицированным», поскольку ему не хватает домена. Вы должны разместить свой домен электронной почты в этом месте, а не «Machine1». – Ben

0

Основываясь на ответе BEN, я понял, что у меня отсутствует ОСНОВНАЯ БЕЗОПАСНОСТЬ DNF SUFFIX.

В основном для того, чтобы выяснить ваше полное доменное имя, вам нужно просто: 1) Откройте командную строку 2) Введите "IPCONFIG/все"

Прочитайте HOST NAME + PRIMARY DNS суффикса.

Мой DNS SUFFIX была пуста, поэтому я пошел и добавил по этой ссылке
http://www.simpledns.com/kb.aspx?kbid=1227

А потом перезагрузил машину.

Теперь код работает как шарм. Спасибо, BEN !!!

+0

Не могли бы вы привести пример DNS-суффикса? Например, имя компьютера - VMI1234, MX = mail.somedomain.com. –

Смежные вопросы