Предупреждение: mail () : ответ SMTP-сервера: 553 Мы не передаем нелокальную почту, извините. а также

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

 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 

SCRIPT

 <?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 ie с знаком $ в аргументе mail, так как мы объявили $email , $message и т. Д. Только выше. Почему мы не можем просто написать сообщение, электронную почту, … без знака доллара?

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

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

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

 mail("me@gmail.com" , $_REQUEST['subject'] , $_REQUEST['message'] , "From:".$_REQUEST['email'] ); 

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

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

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

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

Resolvendo: в меню Xampp, в Mercury – admin, в Mercury, меню Configuration – … SMTP Server. В окне установите флажок check check check. Смотрите ниже:

введите описание изображения здесь

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

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

smtp_port = 25

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

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

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

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

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

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

отлично.

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

 mail("me@gmail.com" , $_REQUEST['subject'] , $_REQUEST['message'] , "From:".$_REQUEST['email'] ); 

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

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