Устранение неполадок «Почтовый ящик недоступен. Ответ сервера:« Отказано в доступе - недопустимое имя HELO »при отправке электронной почты с SmtpClient - PullRequest
10 голосов
/ 01 июля 2010

Я пытался отправить электронное письмо по C #. Я использовал Googled для различных примеров и взял кусочки от каждого и от стандартного кода, который, скорее всего, будет использовать каждый.

string to = "receiver@domain.com";
string from = "sender@domain.com";
string subject = "Hello World!";
string body =  "Hello Body!";
MailMessage message = new MailMessage(from, to, subject, body);
SmtpClient client = new SmtpClient("smtp.domain.com");
client.Credentials = new NetworkCredential("test@domain.com", "password");
client.Send(message);

Тем не менее, я получаю сообщение об ошибке

System.Net.Mail.SmtpException: почтовый ящик недоступен. Ответ сервера был: Доступ запрещен - Неверное имя HELO (см. RFC2821 4.1.1.1)

Итак, что мне теперь делать? SmtpClient должен быть особенным и работать только на определенных SMTP-серверах?

Ответы [ 4 ]

7 голосов
/ 01 июля 2010

Кажется, ваша пара имя пользователя / пароль не аутентифицируется успешно с вашим SMTP-сервером.

РЕДАКТИРОВАТЬ

Я думаю, я нашел, что здесь не так.Я исправил вашу версию ниже.

string to = "receiver@domain.com";

//It seems, your mail server demands to use the same email-id in SENDER as with which you're authenticating. 
//string from = "sender@domain.com";
string from = "test@domain.com";

string subject = "Hello World!";
string body =  "Hello Body!";
MailMessage message = new MailMessage(from, to, subject, body);
SmtpClient client = new SmtpClient("smtp.domain.com");
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("test@domain.com", "password");
client.Send(message);
3 голосов
/ 01 июля 2010

Вы пытались установить свои учетные данные для аутентификации в сети. Конфиг?

  <system.net>
    <mailSettings>
      <smtp from="test@foo.com">
        <network host="smtpserver1" port="25" userName="username" password="secret" defaultCredentials="true" />
      </smtp>
    </mailSettings>
  </system.net>

и ваш код

MailMessage message = new MailMessage();
message.From = new MailAddress("sender@foo.bar.com");
message.To.Add(new MailAddress("recipient1@foo.bar.com"));
message.To.Add(new MailAddress("recipient2@foo.bar.com"));
message.To.Add(new MailAddress("recipient3@foo.bar.com"));
message.CC.Add(new MailAddress("carboncopy@foo.bar.com"));
message.Subject = "This is my subject";
message.Body = "This is the content";
SmtpClient client = new SmtpClient();
client.Send(message);
2 голосов
/ 01 июля 2010

Попробуйте это:

string to = "receiver@domain.com";
string from = "sender@domain.com";
string subject = "Hello World!";
string body =  "Hello Body!";
MailMessage message = new MailMessage(from, to, subject, body);
SmtpClient client = new SmtpClient("smtp.domain.com");
// explicitly declare that you will be providing the credentials:
client.UseDefaultCredentials = false;
// drop the @domain stuff from your user name: (The API already knows the domain
// from the construction of the SmtpClient instance
client.Credentials = new NetworkCredential("test", "password");
client.Send(message);
0 голосов
/ 15 августа 2017

В моем случае это был неправильный порт.Конфигурация, предоставленная хостингом, не работала ни по SSL (465), ни по SSL (25).Я использовал MS Outlook, чтобы «взломать» конфигурацию, а затем скопировал в мое приложение.Это был 587 SSL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...