Настройка sendmail php ini
PHP mail под Windows
В этой статье я хочу рассказать об отправке почты из php скриптов под Windows.
Америку я, конечно, не открою, но надеюсь, что кому-то эта статья будет полезна или просто сэкономит время.
Sendmail, в свою очередь, для отправки почты использует SMTP сервер.
Таким образом, чтобы php скрипт мог отправлять почту нужно установить и настроить sendmail и SMTP сервер.
Версию sendmail для Windows можно скачать здесь.
Установка и настройка выполняется в три этапа.
1) Распаковываем архив на тот же диск, где установлен php. Например, я создал папку C:\wamp\sendmail.
2) Вносим изменения в файл php.ini:
Как видите, нужно только указать путь к 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
auth_username=account_name@mail.ru ; имя вашего аккаунта
auth_password=account_password ; ваш пароль
; следующие три опции используются если перед авторизацией на SMTP сервере требуется авторизация на POP3 сервере
pop3_server=pop.mail.ru
pop3_username=account_name@mail.ru
pop3_password=account_password
; параметр для команды MAIL FROM
force_sender=account_name@mail.ru
Теперь не забудьте перезапустить web сервер, чтобы изменения вступили в силу.
Чтобы протестировать работу почты напишем простенький скрипт:
Он создает форму с тремя полями для ввода адреса, темы и содержания письма. Нажатие на кнопку «Отправить» отправит запрос этому же скрипту (строка 21).
Если данные введены, то будет вызвана функция mail (строка 13), которая и отправит письмо. В случае успешной отправки функция возвращает true, в противном случае — false.
Как видите, ничего сложного в настойке почты нет.
Настройка sendmail php ini

Для установки SSMTP выполните в терминале:
Добавим туда следующие строчки, заменяя их на свои данные:
root=youremailhere@gmail.com
mailhub=smtp.gmail.com:587
AuthUser=yourgmailusername
AuthPass=yourgmailpassword
UseSTARTTLS=YES
По-сути, по таком же примеру можно настроить почту и под любого другого сервиса почты.
Есть еще и другой способ, ниже я приведу пример настроек для yandex.ru
Пишем следующие строчки, и не забываем их изменить под свои данные
root:pupkin@yandex.ru:smtp.yandex.ru:465
UserUbuntu:pupkin@yandex.ru:smtp.yandex.ru:465
www-data:pupkin@yandex.ru:smtp.yandex.ru:465
Сохраняем и закрываем.
И все содержимое заменяем следующим:
hostname=localhost
FromLineOverride=NO
AuthUser=pupkin@yandex.ru
AuthPass=12345
mailhub=smtp.yandex.ru:465
UseTLS=YES
Подставляем свои данные, сохраняем, и закрываем.
Далее откроем php.ini и отредактируем его:
находим параметр: sendmail_path, раскоментируем его и добавляем путь к ssmtp:
Сохраняем изменения и перезагружаем апач:
Sendmail
Но существует и второй способ, и он еще проще. Но вся проблема в том, что он не у всех работает, иногда нужно звонить провайдеру, или теребенить в тех поддержку, чтоб прописали PTR запись
отредактируем php.ini И дадим знать для php, что мы будем отправлять почту, через sendmail
в параметре sendmail_path пропишем следующее:
Пост обновлен! 28.12.2011
Похожие записи
40 Комментариев к “LAMP. Отправка почты функцией PHP mail().”
Круто :3
Буду иметь ввиду…
Добрый день.
Попробовал сегодня второй легкий способ (что с sendmail) на своем LAMP (Ubuntu 11.10)
Во-первых, очень долго отрабатывает скрипт отправки, а во-вторых, на почту все-таки не приходит письмо, которое должно приходить.
Не знаете, в чем может быть проблема?
Проверьте почту в папке спам. Скорей всего письмо попало туда. По крайней мере у меня так было. Еще можете проверить на всякий случай логи.
а вообще в силу того, что письма мои идут в папку спам, я пока отказался от sendmail использую первый способ. Хотя проверял и второй. Но пока не было времени разобраться почему письма в «спам» уходят. Как только решу вопрос, то сразу и обновлю статью
Попробовал ssmtp. Оно отправляет, но кидает в спам. А sendmail вообще не отправляет.
мне сложно что-то сказать. но у меня все работает. Статьи тут из личного опыта, поэтому за работоспособность их отвечаю.
Проверьте установлены ли у Вас пакеты:
sandmail-base
sandmail-bin
sandmail-cf
если устанавливаете sendmail, то удалите ssmtp.
После каждого изменения php.ini нужно рестартить апач
Остановился на ssmtp. Мне этого достаточно. Главное проверять, как почта приходит.
Спасибо огромное за статью.
нет за что. Загляните вечерком. Или уже завтра утром. Специально для вас, сегодня еще раз проверю sendmail на свежо-установленном lamp
Автор, ты учебник русского языка вообще видел когда-нибудь? Почитай, а то любой «Джамшут» грамотней пишет.
Про ssmtp молчу, хихикая, поскольку пользуюсь gentoo, а там именно он стоит «из коробки».
1. Я с Украины, и русский язык вообще не изучал, и учебник даже не видел.
2. Я здесь пишу статьи для себя, а не сдаю экзамен
3. Покажите ошибки в орфографии.
4. Поздравляю Вас, что вы на gentoo, зачем тогда вообще читаете эту статью?
5. Нечего сказать по теме, проходите мимо.
Добрый день, Игорь.
Объяснима ли такая ситуация, и, что посоветуете сделать?
Установлен только sandmail, скрипт сайта через php-mail без успешно отправляет письма. Попробовал в консоли: echo aaaa | sendmail your@email.com, на mail и yandex не пришло, а на yahoo пришло.
следовательно sandmail работает, но почему так выборочно? Сервер в америке физически располагается (дешевле и производительнее) или может у них в список Магнитского и наши почтовые сервисы попали?
а вы не смотрели логи? Нету не чего интересного?
Логи конечно смотрел, но интересное, из за отсутствия опыта, не увидел.
При отправке на яндекс было такое сообщение:
(0/0), delay=00:00:02, xdelay=00:00:02, mailer=esmtp, pri=120300, relay=mx.yandex.ru. [77.88.21.89], dsn=4.0.0, stat=Deferred: 451 4.7.1 Sorry, the service is currently unavailable. Please come back later.
Для майла такое было:
delay=00:00:01, xdelay=00:00:01, mailer=esmtp, pri=120302, relay=mxs.mail.ru. [94.100.176.20], dsn=5.0.0, stat=Service unavailable
проверьте почту ящика postmaster@domain.com там должны быть письма с ответами от серверов. У вас на сервере ip белый?
ip белый. Извиняюсь за глупый вопрос: как проверить ящик postmaster@domain.com если он на этом домене не заведен?
Разобрался вроде. Вам нужно в dns прописать PTR запись (нужно чтоб провайдер это сделал), или SPF: http://ru.wikipedia.org/wiki/Sender_Policy_Framework
иначе при проверке mail.ru-сервером вашего домена, он не находит следующую запись, и отвергает ваши письма, считая, что это спам
Посмотрел информацию, но ясности пока не прибавилось. почта домена функционирует на яндексе, соотвественно mx запись ведет на mail.yandex.ru. Отсюда не очень ясно какая запись (txt) должна быть, что верифицировать ip адрес с которого скрипты сообщения отсылают. (на странице вики ссылка на синтаксис как раз битая)
в таком случае к сожалению не чем, не помогу. Самому не хватает знаний
Вот наткнулся на инфу, может когда-нибудь пригодиться: http://sudo.in/node/58
спасибо большое. Пригодиться:)
или настройте отправку через SSMTP (Как написано в начале статьи), там без танцев все работать будет, только что специально у себя, проверял отправку на mail.ru
И такой момент: если настроить отправку через SSMTP нужно ли удалять sendmail?
Спасибо за внимание.
насколько я понял то все нормально. После отправки происходит что-то типа отключения.
ок. А по первой части вопроса почему так могло произойти нет мыслей?
если в php.ini Не прописан sendmail_path, тогда php не будет знать с помощью чего ему отправлять письма. т.е. письма отправляться не должны. По поводу почему у вас то работало, то перестало, к сожалению, конкретно ответить не могу, т.к. я как и Вы (наверное) только учусь, и обо всех нюансах еще знаю:)
спасибо за внимание)
а можно примерчик не через gmail а скожем через mail.ru или yandex?
через gmail пол инета завалено.
без проблем, обновил пост, и показал как можно настроить под яндекс
В конфиге строка
UseSTARTTLS=>YES
Простое человеческое спасибо! ))))
Здравстуйте! Спасибо за статью, помогла! Первый вариант, правда, почему-то не сработал, зато второй сработал. У меня вот какой вопрос: отправлять к себе в локалхост получается, а вот на внешние адреса — нет:(. Выдается connection timed out. Можно ли как-то решить эту проблему? Может быть, дело в том, что я сижу через прокси и с динамическим IP?
к сожалению в связке с прокси не пробовал. не помогу
PHP — отправка электронной почты через PHP
Дата публикации: 2017-10-19
От автора: отправка почты через PHP настраивается с помощью файла php.ini. Откройте файл php.ini, который находится в каталоге / etc/, и найдите раздел с заголовком [mail function].
Пользователям Windows нужно предоставить в этом разделе две директивы. Первая называется SMTP, она задает адрес SMTP-сервера. Вторая называется sendmail_from, она определяет ваш адрес электронной почты. Настройки для Windows должны выглядеть примерно так:
Пользователи Linux должны указать PHP местоположение своего приложения sendmail. Путь и любые требуемые ключи должны указываться в директиве sendmail_path. Настройки для Linux должны выглядеть примерно так:
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Отправка обычного текстового сообщения
PHP использует функцию mail() для отправки электронной почты. Для этой функции необходимы три обязательных аргумента, в которых указывают адрес электронной почты получателя, тема электронного письма и само письмо, кроме того, имеются два других необязательных параметра.
Ниже приводится описание каждого аргумента.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
После вызова функции mail, она попытается отправить электронное письмо, после этого она возвращает значение true, если письмо отправлено успешно, или false, если письмо не было отправлено. В качестве первого аргумента функции mail() могут быть указаны несколько получателей, их адреса указываются списком через запятую.
Отправка HTML-письма
Когда вы отправляете текстовое сообщение с использованием PHP, то весь контент будет рассматриваться как простой текст. Даже если вы будете включать в текстовое сообщение HTML-теги, сообщение будет отображаться как простой текст, а HTML-теги не будут отформатированы в соответствии с синтаксисом HTML. Но PHP предоставляет возможность отправлять HTML-письма в формате HTML. При отправке электронных писем вы можете указать Mime-версию, тип контента и набор символов.
Настройка Sendmail для отправки почты без попадания в Спам
Столкнулся с проблемой: на правильно настроенном сервере Apache с установленными модулями и настроенными доменными записями у провайдера — письма отправленные через функцию mail из скриптов php попадали в спам или не доставлялись вовсе.
Начал разбираться и не смог найти не одной полноценной публикации в рунете, которая раскрывала бы проблему и помогала решить все вопросы.
Вашему вниманию представляю собранный из разных источников, проверенный и используемый способ настройки сервера для правильной отправки писем sendmail.
Система: Ubuntu 20.06
Почтовый сервис: Яндекс
1. Установка Sendmail
Если по какой-то причине не был установлен. Произведите базовую установку и настройку
Вместо noreply@site.ru пишем почту на которую будут приходить отчеты (заголовок Return-Path:).
Заголовок «Return-Path:» является важным заголовком в глазах почтовых сервисов.
Если его не установить, заголовок будет равен примерно такому значению «Return-Path: ».
Очень желательно чтобы значение заголовка всегда совпадало с именем домена с которого отправляется письмо, независимо от значения заголовка «From:», иначе оно может быть отправлено в «Спам» или же отклонено вовсе.
2. Настройка DNS записей
Нам необходимо настроить SPF, DMARC, DKIM записи.
Какая за что отвечает расписывать не буду. В рунете огромное количество инструкций.
Если тоже используете какой-либо почтовый сервис, у них свои подробные инструкции по настройке.
На что следует обратить внимание — чтобы в SPF был прописан IP-адрес сервера.
Затем следует запросить у провайдера DNS-хостинга обратную запись rDNS (PTR-запись).
Привязать свой домен к ip-адресу сервера.
Как правило провайдер самостоятельно ее устанавливает по запросу.
4. Изменить hostname
Установить hostname равный названию нашего домена:
5. Редактировать файл sendmail.mc
Переходим к файлу /etc/mail/sendmail.mc
Нам необходимо настроить заголовки «Received: from» и «Received: by». Они являются важными при определении уровня доверия к серверу отправляющему электронную почту.
Добавляем следующие строки в конце файла перед MAILER_DEFINITIONS
6. Проверяем настройки apache и файервола
Ищем строчки и заменяем www-data на текущего пользователя под которым запущен apache
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
7. Обновляем конфигурацию и перезагружаем sendmail


