Предупреждение: mail () [function.mail]: SMTP-ответ сервера: 553 Мы не передаем нелокальную почту, извините - PullRequest
3 голосов
/ 25 июля 2011

Следующий скрипт отправляет электронное письмо с использованием функции mail.Но я не могу отправить электронное письмо. При нажатии submit отображается:

Warning: mail() [function.mail]: SMTP server response: 553 We do not relay non-local mail, sorry. in E:\xampp\htdocs\feedback.php on line 19
mail sent successfully

СЦЕНАРИЙ

<?php 
if( isset( $_REQUEST['email'] ) ) {
    $email = $_REQUEST['email'];
    $subject = $_REQUEST['subject'];
    $message = $_REQUEST['message'];
    mail("me@gmail.com" , $subject , $message , "From:".$email );
    echo "mail sent successfully";
}  else {
     echo "<form method = 'post' action = 'feedback.php'>
     Email of sender : <input name = 'email' type = 'text' /> <br/>
     Subject : <input name = 'subject' type = 'text'/> <br/>
     Enter your feedback here : <textarea name = 'message' rows = 15 cols = 40 > </textarea> <br/>
     <input type = 'submit'/>
     </form>";
   }
?>

Я использую Apacheкак php сервер

Также скажите, почему мы должны писать $subject, $message, то есть со знаком $ в аргументе mail, так как мы объявили $email, $message и т. Д., Чуть выше.Почему мы не можем просто написать сообщение, электронную почту, .. без знака доллара?

Ответы [ 7 ]

10 голосов
/ 19 сентября 2016

Resolvendo: в меню Xampp,
Перейдите в mercury admin -> Меню конфигурации -> MercuryS SMTP Server -> Контроль соединения.В этом окне снимите флажок.См. Ниже:

enter image description here

Затем в файле php.ini:

[функция почты] SMTP = 127.0.0.1 <------------------ изменить localhost на ip local </p>

smtp_port = 25

5 голосов
/ 25 июля 2011

Предупреждение: mail () [function.mail]: SMTP-ответ сервера: 553 Мы не ретранслируем нелокальную почту, извините. в E: \ xampp \ htdocs \ feedback.php в строке 19 почта успешно отправлена ​​

Это означает, что ваш сервер не настроен должным образом. Он должен иметь возможность отправлять почту через какой-нибудь смарт-хост, который позволяет ретранслировать данные из вашей системы. На реальном сервере это может быть MTA, работающий на localhost .

Также скажите, почему мы должны написать $ subject, $ message, т.е. со знаком $ в аргументе mail, поскольку мы объявили $ email, $ message и т. Д. Чуть выше. Почему мы не можем просто написать сообщение, электронную почту, .. без знака доллара?

Это потому, что переменные имеют префикс $ в PHP.

4 голосов
/ 25 июля 2011
  1. Вы используете XAMPP, который по умолчанию поставляется с Mercury, который по умолчанию не настроен на отправку почты на другой сервер. Это в основном там для отладки. Инструкции существуют для его настройки, но Windows + Apache, как мне кажется, лучше всего использовать в качестве среды отладки.

  2. Все переменные PHP имеют $ перед ними. Это называется sigil. Это то, что отличает их, скажем, от констант, определений классов и функций. Если вы хотите присвоить значение, а затем отправить его в функцию, вам нужно использовать переменные. Вы можете использовать define, чтобы установить константу, если она достаточно важна, но, поверьте мне, такие ситуации встречаются редко, и вам следует избегать их.

Вы также можете сделать это:

mail("me@gmail.com" , 
      $_REQUEST['subject'] , 
      $_REQUEST['message'] , 
      "From:".$_REQUEST['email'] );
1 голос
/ 25 июля 2011

Следующий скрипт отправляет электронную почту, используя функцию mail. Но я не могу отправить электронное письмо. При нажатии на кнопку «Отправить» отображается:

SMTP-сервер запрещает отправку почты через него, если он не с локальной машины / домена.

Это сделано для того, чтобы спаммеры не использовали SMTP-сервер для отправки почты. (разомкнутое реле).

_Скажите также, почему мы должны написать $ subject, $ message, т.е. со знаком $ в аргументе mail, поскольку мы объявили $ email, $ message и т. Д. Чуть выше. Почему мы не можем просто написать сообщение, электронную почту, .. без знака доллара _?

Вам не нужно использовать переменные.

mail('me@gmail.com' , 'subject', 'test', 'From: someone@example.com');

отлично .

Вы могли бы также сделать:

mail("me@gmail.com" , $_REQUEST['subject'] , $_REQUEST['message'] , "From:".$_REQUEST['email'] );
0 голосов
/ 08 марта 2019

Если вы используете установку Windows + Xampp: Это связано с тем, что служба mercury уже запущена и она не может отправлять электронную почту за пределы локального хоста. Перейти к панели управления xammp и остановить службу ртути. Надеюсь, это поможет.

0 голосов
/ 08 августа 2013

Эта проблема связана с конфигурацией вашего сервера.Теперь дневной сервер перестает открывать ретрансляцию сообщений, и метод, который мы используем в ядре PHP для отправки почты, является методом открытой ретрансляции. Остановка открытой ретрансляции уменьшает количество спама.Вот почему вы получаете это сообщение об ошибке, попробуйте использовать почтовую библиотеку, например, swift mail, для отправки писем с вашего SMTP

0 голосов
/ 25 июля 2011

Ответ прост: ваш SMTP-сервер не поддерживает ретранслируемые сообщения.Возможно, вам придется настроить или войти в систему для ретрансляции на работу.Хотя я сделал что-то подобное прежде, чем я не могу дать образец пока.Попробуйте выполнить поиск «Вход в SMTP в PHP»

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