Настройка php mail: Грамотная настройка сервера отправки почты для скриптов PHP, настройка функции mail()
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
[email protected]
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.
Настройка MSMTP для отправки писем PHP mail() через сервисы Gmail и Yandex
Для начала необходимо установить msmtp:
Centos 6.5 — 7 установка выполняется так:
yum install msmtp
Ubuntu/Debian установка при помощи apt-get:
apt-get install msmtp
Настраиваем:
vi ~/.msmtprc
или
nano ~/.msmtprc
Заполняем файл .msmtprc.
Для Yandex:
account yandex logfile /var/log/msmtp.log host smtp.yandex.ru port 587 from [email protected] keepbcc on auth on user [email protected] password PAss tls on tls_starttls on
Для Yahoo:
account yahoo tls on tls_starttls off tls_certcheck off auth on host smtp.mail.yahoo.com user usr from [email protected] password yourYahooPass
Для Gmail:
account gmail tls on tls_certcheck off auth on host smtp.gmail.com port 587 user [email protected] from [email protected] password yourgmailPass
И устанавливаем права на файл:
chmod 600 ~/.msmtprc
Для проверки функционирования, сделаем тестовое письмо:
echo -e "From: [email protected] \n\ To: [email protected] \n\ Subject: Hello World \n\ \n\ This email was sent using MSMTP via mail.com.ru." >> sample_email.txt
Попробуем его отправить:
cat sample_email.txt | msmtp --debug -a gmail [email protected]
Обратите внимание, что необходимо выбрать аккаунт указав параметр -a gmail, если ввели более одного в файл .msmtprc
Можно также проверить отправку почты так:
echo "hello from mail.com.ru." | msmtp --debug -a default [email protected]
cp -p ~/.msmtprc /etc/.msmtp_php chown www-data:www-data /etc/.msmtp_php
Устанавливаем права для Apache т.к. он может быть запущен от имени другого пользователя, например apache:apache
Редактируем php.ini:
nano /etc/php5/php.ini
или
nano /etc/php.ini
И редактируем sendmail_path =
sendmail_path = "/usr/bin/msmtp -C /etc/.msmtp_php --logfile /var/log/msmtp.log -a gmail -t"
Создаём лог файл
touch /var/log/msmtp.log chown www-data:www-data /var/log/msmtp.log
и перезагружаем Apache:
service httpd restart
Php mail под windows (настройка sendmail на 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
[email protected]
pop3_password=account_password
; параметр для команды MAIL FROM[email protected]
hostname=mail.ru
Теперь не забудьте перезапустить web сервер, чтобы изменения вступили в силу.
Php mail под windows (настройка sendmail на windows)
Установка и настройка sendmail под Ubuntu
При отправке сообщения через форму обратной связи появляется ошибка с текстом «Произошла ошибка при попытке отправить почту. Could not instantiate mail function.» Возникать она может при отсутствии на хостинге агента sendmail или модуля php-mail.
На нормальных хостинговых площадках отправка почты через sendmail настроена по умолчанию, поэтому стоит поискать причины появления этой ошибки в настройках CMS или коде сайта. В моем случае веб-сервер настраивался мной и причина оказалась в отсутствии вышеуказанного агента и модуля. Вот как они устанавливаются в Ububntu:
1. Устанавливаем модуль php-mail если он еще не стоит:
sudo apt-get install php-mail
2. Устанавливаем sendmail:
$ sudo apt-get install sendmail
$ sudo sendmailconfig
Ответьте на вопросы, которые будут заданы. Ниже перечислены основные файлы, в которые будут внесены изменения:
/etc/mail.sendmail.conf /etc/cron.d/sendmail /etc/mail/sendmail.mc
3. Если все в порядке, правим «php.ini»
nano /etc/php5/apache2/php.ini
Находим закомментированую строку «;sendmail_path = » (поиск в nano ctrl+w). Заменяем на строку следующего содержания:
sendmail_path = /usr/sbin/sendmail -t -i
4. Делаем рестарт Apache
sudo service apache2 restart
5. Проверить работоспособность sendmail можно двумя командами:
$ /usr/sbin/sendmail [email protected]В течении минуты на указанный электронный адрес должно прийти письмо. Если этого не произошло, то следует посмотреть логи отправки в каталоге «/var/log/syslog». Если в логах появилось сообщение: «Connected time out», значит или firewall не пропускает пакеты через порт 25, или ионтернет-провайдер. Проверить это можно командой telnet:
telnet smtp.mail.ru 25
Если результатом работы команды стало так же «Connected time out», то разбирайтесь, где блокируется порт 25.
Конфигурация
smtp для php mail
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
PHP: Почтовые функции — Руководство
Как упоминалось ранее, для пользователей Windows существует опция поддельного sendmail. Немного более подробное описание того, как это сделать:
Если у вас есть тестовый сервер под управлением Windows и какой-то комбо WAMP (XXAMP, WAMP Server и т. Д.), Вы заметите, что команда PHP sendmail (mail () ) не работает. Windows просто не предоставляет инструкцию sendmail …
Но есть простой трюк, чтобы заставить это работать;
1) Загрузите (или воспользуйтесь прикрепленным файлом) sendmail.zip с http://glob.com.au/sendmail/
2) Разархивируйте это в папку на вашем диске c: (желательно использовать простой путь, например c: \ wamp \ sendmail — длинные имена файлов могут вызвать проблемы )
3) Отредактируйте файл PHP.INI (примечание: пользователи WAMP должны получить доступ к своему файлу php.ini из меню WAMP). Перейдите в раздел [функция почты] и измените его как таковое:
[функция почты]
; Только для Win32.
; SMTP =; Только для Win32.
; sendmail_from =; Только для Unix.Вы также можете указать аргументы (по умолчанию: «sendmail -t -i»).
sendmail_path = «C: \ wamp \ sendmail \ sendmail.exe -t»; Принудительно добавить указанные параметры в качестве дополнительных параметров
; в двоичный файл sendmail. Эти параметры всегда заменяют значение
; 5-й параметр mail () даже в безопасном режиме.
; mail.force_extra_paramaters =.. и сохраните изменения.
4) Откройте sendmail.ini и измените настройки на:
[sendmail]
; вы должны сменить почту.mydomain.com на ваш smtp-сервер,
; или в каталог «подбора» IIS. (обычно C: \ Inetpub \ mailroot \ Pickup)
; электронные письма, доставленные через каталог получения IIS, вызывают sendmail на
; работать быстрее, но вы не будете получать сообщения об ошибках обратно на вызывающий
; заявление.smtp_server = mail.yourdomain.com
; smtp-порт (обычно 25)
smtp_port = 25
; домен по умолчанию для этого сервера будет прочитан из реестра
; он будет добавлен к адресам электронной почты, если он не указан
; если вы хотите переопределить значение в реестре, раскомментируйте и изменитеdefault_domain = yourdomain.com
; записывать ошибки smtp в error.log (по умолчанию в тот же каталог, что и sendmail.exe)
; раскомментируйте, чтобы включить ведение журнала
; error_logfile = sendmail_error.log; создать журнал отладки как debug.log (по умолчанию тот же каталог, что и sendmail.exe)
; раскомментируйте, чтобы включить отладку
; debug_logfile = sendmail_debug.log; если ваш SMTP-сервер требует аутентификации, измените следующие две строки:
; auth_username =
; auth_password =; если ваш сервер smtp использует pop3 перед аутентификацией smtp, измените
; следующие три строкиpop3_server = mail.yourdomain.com
[email protected]
pop3_password = mysecretpassword; заставить отправителя всегда быть следующим адресом электронной почты, раскомментируйте и
; введите действительный адрес электронной почты. это повлияет только на «ПОЧТА ОТ»
; команда, она не будет изменять заголовок «От:» содержимого сообщения; sendmail будет использовать ваше имя хоста и ваш default_domain в ehlo / helo
; smtp приветствие. при необходимости вы можете вручную установить имя ehlo / helo.hostname =
При первой попытке рекомендуется вести журнал ошибок и отладки, чтобы вы знали, что пойдет не так, если это не сработает.
Force_sender также является необязательным, но рекомендуется во избежание путаницы на стороне сервера.
Очевидно, что mail.yourdomain.com, [email protected] и mysecretpassword должны быть релевантной информацией для вашего SMTP-сервера.
Теперь перезапустите службы WAMP (в основном Apache, чтобы PHP перечитал его конфигурацию).Теперь вы можете использовать оператор PHP mail (), как если бы вы пользователь Unix …
.
Как отправить электронное письмо с помощью PHP?
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
- Авторизоваться
зарегистрироватьсятекущее сообщество
.
Как отправить электронное письмо с помощью PHP mail () Функция
- Home
Testing
- Back
- Agile Testing
- BugZilla
- Cucumber
- Database Testing
- ETL Testing
- Назад
- JUnit
- LoadRunner
- Ручное тестирование
- Мобильное тестирование
- Mantis
- Почтальон
- QTP
- Назад
- Центр качества SAP
- SoapUI
- Управление тестированием
- TestLink
SAP
- Назад
- ABAP
- APO
- Начинающий
- Basis
- BODS
- BI
- BPC
- CO
- Назад
- CRM
- Crystal Reports
- QM4000
- QM4
- Заработная плата
- Назад
- PI / PO
- PP
- SD
- SAPUI5
- Безопасность
- Менеджер решений
- Successfactors
- Учебники SAP
- Apache
- AngularJS
- ASP.Net
- C
- C #
- C ++
- CodeIgniter
- СУБД
- JavaScript
- Назад
- Java
- JSP
- Kotlin
- Linux
- Linux
- Kotlin
- Linux
- Perl
js
- Назад
- PHP
- PL / SQL
- PostgreSQL
- Python
- ReactJS
- Ruby & Rails
- Scala
- SQL
- SQL
- UML
- VB.Net
- VBScript
- Веб-службы
- WPF
000
000
0003 SQL
000
0003 SQL
000
Обязательно учите!
- Назад
- Бухгалтерский учет
- Алгоритмы
- Android
- Блокчейн
- Business Analyst
- Создание веб-сайта
- CCNA
- Облачные вычисления
- 00030003 COBOL 9000 Compiler
- 9000 Встроенные системы
- 00030002 9000 Compiler 9000
- Ethical Hacking
- Учебники по Excel
- Программирование на Go
- IoT
- ITIL
- Jenkins
- MIS
- Сеть
- Операционная система
- Назад
- Управление проектами Обзоры
- Salesforce
- SEO
- Разработка программного обеспечения
- VB A
Big Data
- Назад
- AWS
- BigData
- Cassandra
- Cognos
- Хранилище данных
- HBOps
- HBOps
- MicroStrategy
- MongoDB
0003
0003
0003
.