Php mail error что это: PHP mail под Windows / Хабр

PHP mail под Windows / Хабр

В этой статье я хочу рассказать об отправке почты из php скриптов под Windows.

Америку я, конечно, не открою, но надеюсь, что кому-то эта статья будет полезна или просто сэкономит время.

С точки зрения php программиста отправка почты выполняется с помощью стандартной функции mail(). И вот тут у многих начинающих разработчиков возникает проблема. Скрипт, прекрасно работающий на сервере хостера, выдает ошибки на локальном компьютере.

Обычно эти ошибки имеют примерно такое описание:
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in E:\www\simplemail\mailer.php on line ......

Дело в том, что функция mail сама по себе почту не отправляет, она просто вызывает программу sendmail, которая в дистрибутив web сервера и php интерпретатора

не входит (и не должна).

Sendmail, в свою очередь, для отправки почты использует SMTP сервер.

Таким образом, чтобы php скрипт мог отправлять почту нужно установить и настроить sendmail и SMTP сервер.

Версию sendmail для Windows можно скачать здесь.

Установка и настройка выполняется в три этапа.

1) Распаковываем архив на тот же диск, где установлен php. Например, я создал папку C:\wamp\sendmail.

2) Вносим изменения в файл php.ini:

[mail function]
SMTP =
sendmail_from =
sendmail_path = "C:\wamp\sendmail\sendmail.exe -t"

Как видите, нужно только указать путь к sendmail чтобы php мог ее найти.

3) Настраиваем sendmail. Все настройки находятся в файле sendmail.ini (расположен в папке с sendmail).

Но перед тем как приступать к настройке пару слов об

SMTP сервере. Вам совсем не обязательно устанавливать сервер на вашем компьютере. Многие почтовые сервисы предоставляют бесплатный доступ к своим серверам.

Ниже я покажу пример настройки sendmail для работы с SMTP сервером mail.ru, но, естественно, вы выбрать любой другой.

Итак, открываем sendmail.ini и устанавливаем следующие параметры:

smtp_server=smtp.mail.ru; адрес SMTP сервера
smtp_port=25; порт SMTP сервера

default_domain=mail.ru; домен по-умолчанию

error_logfile=error.log; файл в который будет записываться лог ошибок

debug_logfile=debug.log; очень полезная на этапе отладки опция. Протоколируются все операции, которые выполняет sendmail

[email protected]; имя вашего аккаунта
auth_password=account_password; ваш пароль

; следующие три опции используются если перед авторизацией на SMTP сервере требуется авторизация на POP3 сервере

pop3_server=pop.mail.ru
pop3_username=account_name@mail. ru
pop3_password=account_password

; параметр для команды MAIL FROM
[email protected]

hostname=mail.ru

Теперь не забудьте перезапустить web сервер, чтобы изменения вступили в силу.

Чтобы протестировать работу почты напишем простенький скрипт:

01 <html xmlns="http://www.w3.org/1999/xhtml">
02 <head>
03 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
04 <title>Simple Mail</title>
05 </head>
06 <body>
07 <?php
08 $addr = $_POST['addr'];
09 $theme = $_POST['theme'];
10 $text = $_POST['text'];
11 if (isset($addr) && isset($theme) && isset($text)
12 		&& $addr != "" && $theme != "" && $text != "") {
13 	if (mail($addr, $theme, $text, "From: [email protected]")) {
14 		echo "<h4>Сообщение отправлено</h4>";
15 	}
16 	else {
17 		echo "<h4>При отправке сообщения возникла ошибка</h4>";
18 	}
19 }
20 ?>
21 <form action="mailer.
php" method="post"> 22 <p> 23 <label for="addr">eMail:</label> 24 <input type="text" name="addr" size="30" /> 25 </p> 26 <p> 27 <label for="theme">Тема письма:</label> 28 <input type="text" name="theme" size="30" /> 29 </p> 30 <p> 31 <label for="text">Текст письма:</label> 32 <textarea rows="10" cols="20" name="text"></textarea> 33 </p> 34 <p> 35 <input type="submit" value="Отправить" /> 36 </p> 37 </form> 38 </body> 39 </html>

Он создает форму с тремя полями для ввода адреса, темы и содержания письма. Нажатие на кнопку «Отправить» отправит запрос этому же скрипту (строка 21).

Если данные введены, то будет вызвана функция mail (строка 13), которая и отправит письмо. В случае успешной отправки функция возвращает true, в противном случае — false.

Как видите, ничего сложного в настойке почты нет.

Удачи!

Источник: кросспостинг из моего блога – www.simplecoding.org.

не удалось подключиться к почтовому серверу через порт «localhost» 25 как исправить?

У вас не установлен SMTP шлюз для отправки email. Если xampp используете, нужно найти в php.ini

блок [mail function]  и изменить примерно на такое:

SMTP=smtp.gmail.com
smtp_port=587
sendmail_from = ВАШАПОЧТА[email protected]
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"

И C:\xampp\sendmail\sendmail.ini нужно примерно такие настройки написать:

[sendmail]
smtp_server=smtp.gmail.com
smtp_port=587
error_logfile=error.log
debug_logfile=debug.log
auth_username=ВАШАПОЧТА[email protected]
auth_password=ПАРОЛЬОТGMAIL
force_sender=ВАШАПОЧТА[email protected]

и потом нужно будет перезагрузить xampp.

Еще нет желания заморачиваться с smtp, можно поставить php библиотеку для отправки email, в конфиге вписать данные от gmail. com и отправлять email с локального сайта и с хостинга.

https://github.com/PHPMailer/PHPMailer

Виталий Клемчук

3 years ago

Начало выдавать это, как решить

Обнаружена ошибка PHP

Серьезность: Предупреждение

Сообщение: mail (): SMTP-ответ сервера: 530 5.7.0 Сначала необходимо выполнить команду STARTTLS. q29sm10359628ljc.8 — gsmtp

Имя файла: библиотеки / Email.php

Номер строки: 1902

Backtrace:

Файл: C: \ xampp1 \ htdocs \ kinomonster \ application \ library \ DX_Auth.php 
Строка: 180 
Функция: отправить

Файл: C: \ xampp1 \ htdocs \ kinomonster \ application \ library \ DX_Auth.php 
Строка: 991 
Функция: _email

Файл: C: \ xampp1 \ htdocs \ kinomonster \ application \ controllers \ Auth.php 
Строка: 140 
Функция: зарегистрировать

Файл: C: \ xampp1 \ htdocs \ kinomonster \ index.php 
Строка: 315 
Функция: require_once

student_bB50Cz3p

3 years ago

Попробуй раскомментровать(убрать ; ) extension=php_openssl в C:\xampp\php\php. ini 

student_cX4p_FA9

3 years ago

Вылезла практически таже ошибка

Обнаружена ошибка PHP
Серьезность: Предупреждение

Сообщение: mail (): SMTP-ответ сервера: 530 5.7.0 Сначала необходимо выполнить команду STARTTLS. w22sm10204152ljd.42 — gsmtp

Имя файла: библиотеки / Email.php

Номер строки: 1902

Backtrace:

Файл: C: \ xampp1 \ htdocs \ kinomonster \ application \ library \ DX_Auth.php 
Строка: 180 
Функция: отправить

Файл: C: \ xampp1 \ htdocs \ kinomonster \ application \ library \ DX_Auth.php 
Строка: 991 
Функция: _email

Файл: C: \ xampp1 \ htdocs \ kinomonster \ application \ controllers \ Auth.php 
Строка: 140 
Функция: зарегистрировать

Файл: C: \ xampp1 \ htdocs \ kinomonster \ index.php 
Строка: 315 
Функция: require_once

student_bB50Cz3p

3 years ago

Такое можно попробовать написать, где задаются настройки подключения к gmail:

ssl://smtp.gmail.com

student_cX4p_FA9

3 years ago

Извини, а можешь сказать где именно ?

student_bB50Cz3p

3 years ago

Кто нибудь ещё может мне помочь?

student_bB50Cz3p

3 years ago

PHPMailer не может создать экземпляр почтовой функции

от Lakshmi S Panicker | 20 ноября 2019 г.

Вы застряли с сообщением «PHPMailer не может создать экземпляр почтовой функции»?

PHPMailer помогает безопасно и легко отправлять электронные письма с веб-сервера. Однако часто возникают ошибки из-за неправильной настройки функции mail(), отсутствия локального почтового сервера и т.п.

В Bobcares мы часто получаем запросы на исправление этой ошибки в рамках наших служб управления сервером.

Сегодня давайте подробно рассмотрим эту ошибку и посмотрим, как наши инженеры службы поддержки легко исправляют PHPMailer.

 

Почему

PHPMailer не может создать экземпляр почтовой функции ?

Как мы все знаем, PHPMailer — популярный код для отправки электронной почты с PHP. И многие проекты с открытым исходным кодом, такие как WordPress, Drupal и т. д., используют их.

PHPMailer автоматически проверяет адреса электронной почты и защищает от атак путем внедрения заголовков.

Разработчики часто предпочитают отправлять почту из своего кода. И mail() — единственная функция PHP, поддерживающая это.

Но иногда неправильная установка PHP не может правильно вызвать функцию mail(). Это вызовет ошибки функции почты.

Аналогично, в некоторых случаях отсутствие локального почтового сервера также вызывает эту ошибку.

 

Как исправить «PHPMailer не может создать экземпляр функции почты»?

До сих пор мы подробно обсуждали ошибку. Теперь давайте посмотрим на некоторые из его главных исправлений.

Существуют альтернативные способы легко устранить эту ошибку.

 

1. Использование SMTP для отправки электронной почты

Как мы уже говорили, если установка PHP не настроена для правильного вызова функции mail(), это вызовет ошибку.

Таким образом, в таких случаях лучше использовать isSMTP() и отправлять электронную почту напрямую через SMTP.

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

 

2. Установите локальный почтовый сервер

Функция PHP mail() обычно отправляет почту через локальный почтовый сервер.

Таким образом, использование SMTP не устранит ошибку, если на локальном хосте не установлен почтовый сервер.

Поэтому необходимо установить локальный почтовый сервер. Например, мы можем установить PostFix на сервер с помощью приведенной ниже команды.

 sudo apt-get install postfix 

 

3. Другие решения

Функция PHP mail() работает с Sendmail 9Двоичный файл 0006 на платформах Linux, BSD и macOS.

Поэтому важно убедиться, что sendmail_path указывает на двоичный файл Sendmail, который обычно имеет вид /usr/sbin/sendmail  в php.ini .

Точно так же иногда, когда мы пытаемся отправить большие электронные письма, он возвращает ошибку « Не удалось создать экземпляр почтовой функции » вместе с сообщением « Невозможно отправить сообщение: слишком большой » в журнале ошибок PHP.

Это означает, что агент по пересылке почты отказывается доставлять эти электронные письма.

Итак, нам нужно настроить MTA, чтобы разрешить вложения большего размера для устранения ошибки.

 

[Все еще испытываете трудности с исправлением ошибки PHPMailer? — Мы вам поможем.]

 

Заключение

Короче говоря, PHPMailer не смог создать экземпляр функции mailuration из-за неправильной настройки mail. функция, отсутствие локального почтового сервера и т.д. В сегодняшней статье мы подробно обсудили эту ошибку и увидели некоторые из основных исправлений, внесенных нашими инженерами службы поддержки.

ПРЕДОТВРАТИТЕ СБОЙ СЕРВЕРА!

Никогда больше не теряйте клиентов из-за низкой скорости сервера! Позвольте нам помочь вам.

Наши специалисты по серверам будут контролировать и обслуживать ваш сервер 24/7, чтобы он оставался молниеносно быстрым и безопасным.

НАЧАТЬ

var google_conversion_label = «owonCMyG5nEQ0aD71QM»;

Отправка почты не работает на php 7.

4 или выше — Wappler General

andrea.falco

#1

Привет.
Я сменил версию php с 7.3 на 7.4 на сервере и перестала работать контактная форма с помощью «почтовика/отправить почту».
Не работает и с версией 8.0.
Чтобы использовать его, мне пришлось восстановить версию 7.3, указанную как «устаревшую».

Сервер сообщает об ошибке 500.
Любая идея решить эту проблему?

Теодор

#2

Андреа Фалько

#3

Я уже активировал отладку.
Это ответы:

403 Запрещено

У вас нет прав доступа к /dmxConnect/api/contatti/contactform.php на этом сервере.

Кроме того, 400 неверный запрос произошла ошибка при попытке использовать ErrorDocument для обработки запроса.

500 — внутренняя ошибка сервера

Сервер обнаружил внутреннюю ошибку или неправильной конфигурации и не смог завершить ваш запрос.

Пожалуйста, свяжитесь с администратором сервера, чтобы сообщить время возникновения ошибки и обо всем, что вы могли бы сделать, что, возможно, вызвал ошибку.

Дополнительные сведения об этой ошибке могут быть доступны в журнале ошибок сервера.

И это ответ журнала сервера:
[клиент 79.24.41.57] ModSecurity: доступ запрещен с кодом 403 (фаза 3). Требуется совпадение «validateByteRange 0–31» с «ARGS:input1». [файл «/etc/httpd/conf/modsecurity.d/rules/comodo_free/30_Apps_OtherApps.conf»] [строка «6649»] [id «243420»] [rev «4»] [msg «COMODO WAF: уязвимость раскрытия информации в Eclipse Jetty до 9.2.9.v20150224 (CVE-2015-2080)||www.eumeda.net|F|2 »] [серьезность «CRITICAL»] [тег «CWAF»] [тег «OtherApps»] [имя хоста «www.eumeda.net»] [uri «/dmxConnect/api/contatti/contactform.php»] [unique_id «YuOS79- dhMjrST-OkXrcVgAAAAg», ссылка: https://www.eumeda.net/it/contatti_logged.php

s.alpaslan

#4

@andrea.falco
Можете ли вы повторить попытку с отключенным mod_security? (в настройках вашего хостинга)

andrea.falco

#5

Отключение mod_security на сервере останавливает проверку формы

Apple

#6

Просто для ясности, у вас здесь 2 проблемы

  • Один из них mod_security один
  • Другой выдает «500 Internal Server Error»

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

andrea.falco

#7

Это не может быть проблемой отсутствия почтового расширения PHP, потому что оно работает на PHP 7. 3. Что-то касается обновленной безопасности, которая останавливает выполнение PHPMailer.php в dmxConnectLib

Apple

#8

Путь разрешения:

  1. В целях тестирования отключите mod_security
  2. Посмотрите, какая ошибка стоит за 500 Internal Server Error (она должна сообщить вам об ошибке, если вы следовали инструкциям Теодора):
    Отладка ошибок подключения к серверу
  3. Опубликуйте ошибку здесь или, если вы можете исправить ее, не стесняйтесь сделать это
  4. Повторно включить mod_security
  5. Исправить проблему mod_security

1 Нравится

с.альпаслан

#9

@andrea. falco ,
да, @Apple очень хорошо объяснила, что нужно делать.
С помощью этого метода можно будет точно обнаружить ошибку. @Teodor может иметь другую идею.

Андреа Фалько

#10

Это код ошибки
{«код»:0,»файл»:»D:\home\z08352-linux01.winp013.arubabusiness.it\irq10.net\dmxConnectLib\PHPMailer\PHPMailer\PHPMailer.php», «линия»: 1797, «сообщение»: «Вызов неопределенной функции PHPMailer\PHPMailer\escapeshellcmd()», «трассировка»: «#0 D:\home\z08352-linux01.winp013.arubabusiness.it\irq10.net\dmxConnectLib\PHPMailer\ PHPMailer\PHPMailer.php(1893): PHPMailer\PHPMailer\PHPMailer::isShellSafe()\n#1 D:\home\z08352-linux01.winp013.arubabusiness.it\irq10.net\dmxConnectLib\PHPMailer\PHPMailer\PHPMailer. php(1650): PHPMailer\PHPMailer\PHPMailer->mailSend()\n#2 D:\home\z08352-linux01. winp013.arubabusiness.it\irq10.net\dmxConnectLib\PHPMailer\PHPMailer\PHPMailer.php(1486) : PHPMailer\PHPMailer\PHPMailer->postSend()\n#3 D:\home\z08352-linux01.winp013.arubabusiness.it\irq10.net\dmxConnectLib\modules\mail.php(133): PHPMailer\PHPMailer\PHPMailer ->send()\n#4 D:\home\z08352-linux01.winp013.arubabusiness.it\irq10.net\dmxConnectLib\lib\App.php(197): modules\mail->send()\n#5 D:\home\z08352-linux01.winp013.arubabusiness.it\irq10.net\dmxConnectLib\lib\App.php(169): lib\App-> execSteps()\n#6 D:\home\z08352-linux01.winp013.arubabusiness.it\irq10.net\dmxConnectLib\lib\App.php(137): lib\App->execSteps()\n#7 D :\home\z08352-linux01.winp013.arubabusiness.it\irq10.net\dmxConnectLib\lib\App.php(126): lib\App->exec()\n#8 D:\home\z08352-linux01. winp013.arubabusiness.it\irq10.net\dmxConnectLib\lib\App.php(104): lib\App->exec()\n#9 D:\home\z08352-linux01.winp013.arubabusiness.it\irq10. net\dmxConnect\api\utenti\modulocontatti.php(8): lib\App->define()\n#10 {main}»}

Теодор

#11

Какой хостинг вы используете? Кажется, по какой-то причине функция https://www.php.net/manual/en/function.escapeshellcmd.php может быть отключена вашим хостинг-провайдером.

Андреа Фалько

#12

Хостинг Windows с PHP 8.0. 901:25 Все работало нормально до конца прошлого лета.
Я надеялся на тикет к хост провайдеру, но они ответили, что на сервере ничего не менялось

Теодор

№13

Как именно настроен ваш почтовик?

Андреа Фалько

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *