Настройка 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>
(adsbygoogle = window.adsbygoogle || []).push({});

Он создает форму с тремя полями для ввода адреса, темы и содержания письма. Нажатие на кнопку «Отправить» отправит запрос этому же скрипту (строка 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

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
.

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

; заставить отправителя всегда быть следующим адресом электронной почты, раскомментируйте и
; введите действительный адрес электронной почты. это повлияет только на «ПОЧТА ОТ»
; команда, она не будет изменять заголовок «От:» содержимого сообщения

[email protected]

; 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?

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании

Загрузка…

  1. Авторизоваться зарегистрироваться
  2. текущее сообщество

.

Как отправить электронное письмо с помощью PHP mail () Функция

Posted in Php

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

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