mail (): SMTP-ответ сервера: 503 Этот почтовый сервер требует проверки подлинности при попытке отправки на нелокальный адрес электронной почты

1

Совсем недавно и случайно я узнал, что я не могу отправлять электронные письма в зарубежные источники за пределами моего сервера (я тестировал его с локальными адресами электронной почты, установленными на том же сервере). Это мой код, и я не могу отправить (например) gmail или yahoo.

$receiver = $emailadr;
$subj     = 'Auth';
$msg      = 'Thank you!';
$header = 'From: [email protected]' . "\r\n" . 
'Reply-To: [email protected]' . "\r\n" . 
'X-Mailer: PHP/' . phpversion() . "\r\n" . 'Content-type: text/html; charset=iso-8859-1';
mail($receiver, $subj, $msg, $header);

Когда (попытка) отправляется, возникает следующее:

: mail(): ответ SMTP-сервера: 503 Этот почтовый сервер требует аутентификации при попытке отправить на нелокальный адрес электронной почты. Проверьте настройки почтового клиента или обратитесь к администратору, чтобы убедиться, что домен или адрес определены для этого сервера.

Я использую Plesk 12.5

  • 0
    Итак, вы знаете, в чем проблема. Как вы ожидаете, что мы поможем вам?
  • 0
    Кажется довольно очевидным для меня. Что вы хотите, чтобы мы сделали с этим?
Теги:
email
plesk

2 ответа

3

Сообщение об ошибке достаточно ясно. This mail server requires authentication

Вы можете создать пользователя почты в Plesk и использовать следующий класс PHP для отправки почты с аутентификацией:

http://phpmailer.worxware.com/index.php?pg=tutorial#2

Также вы можете попробовать некоторые службы облачной почты, такие как http://sendgrid.com/, у них есть хорошая библиотека PHP API.

0

Похож на проблему почтового сервера. Ваши коды находятся на общем хостинге? Возможно, у вас есть антиспамовая конфигурация (надеюсь). Вы должны убедиться, что ваш адрес отправителя существует. Для тестирования также полезно, если вы отправляете сообщение самому себе (если вы этого еще не сделали), у него больше шансов на работу, а затем вы можете проверить заголовки писем.

На среднем настроенном сервере электронной почты существует четыре способа почтовой связи: (я предполагаю, что ваш сервер работает на somedomain.com и предоставляет @somedomain.com почту)

  • Входящие: письма от not- @somedomain.com до @somedomain.com. Эти письма обычно просто принимаются.
  • Исходящие: письма от @somedomain.com до not- @somedomain.com. Там письма принимаются, если исходный IP-адрес находится в локальной сети (или на веб-сервере). Это то, что вы хотите
  • Внутренний: сообщения от @somedomain.com до @somedomain.com. Это еще один вариант для вас, если вы отправите сообщение самому себе. Здесь у вас есть самое высокое изменение, которое приходит по почте
  • Реле: сообщения от not- @somedomain.com до not- @somedomain.com. Это то, что ваш сервер думает, что вы делаете. Обычно ретрансляционная почта запрещена, за исключением пользователей, прошедших проверку подлинности, поскольку она обычно спама (и того, что она сообщает вам в сообщении об ошибке). К сожалению, стандартная функция sendmail PHP не поддерживает аутентификацию. Из-за этого вам нужно добавить адрес отправителя в белый список почтового сервера или (проще :) изменить его на принятый внутренний адрес, который изменяет вашу почту на исходящую или внутреннюю, в зависимости от адреса получателя.
  • 0
    так что это письмо не должно существовать?
  • 1
    @ MRXI Я не понимаю вопроса. PHP отправляет почту с помощью команды sendmail на сервере. На сервере есть почтовый сервер, и этот почтовый сервер возвращает ответ «503 Этот почтовый сервер требует аутентификации при попытке отправки на нелокальный адрес электронной почты». Сообщение сообщает вам (в свободном переводе), что сообщение не принято, поскольку адрес отправителя и / или получателя не принят. Оба адреса являются частью вашей команды PHP
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню