Sendmail для windows php

Как тестировать отправку писем в PHP на Windows

Отправка писем — это важная функция веб-сайта. Email может использоваться для подтверждения регистрации, восстановления пароля, отправки уведомления и пр. При написании своего веб-приложения, либо для целей отладки, может понадобиться проверка работы отправки писем на локальном компьютере.

Для отправки писем в PHP используется функция mail. Для успешной работы этой функции, интерпретатор PHP обращается к внешней почтовой программе и передаёт ей отправляемое письмо. Обычно это sendmail в Linux.

Как можно догадаться, это не очень применимо к Windows, и уж тем более к веб-серверу на локальном компьютере. Поэтому для тестирования функции отправки писем придумана почтовая заглушка.

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

Установка почтовой заглушки для PHP в Windows

Я устанавливал веб-сервер по этой инструкции, если вы это делали другим способом, то замените пути до файлов на ваши.

В каталоге C:\Server\bin\ создайте новый каталог с названием Sendmail. Теперь в этом каталоге создайте файл sendmail.php со следующим содержимым:

Откройте конфигурационный файл PHP, он размещён здесь C:\Server\bin\PHP\php.ini. И добавьте туда одну строчку:

Сохраните файл и перезапустите сервер.

Отлично, теперь все отправленные письма будут сохраняться в каталоге C:\Server\bin\Sendmail\emails\

Для имитации отправки письма используйте следующий код:

Отправленное письмо сохранено в файл mail_2019-06-03_15-14-06_0.eml. Этот файл для правильного отображения нужно открыть почтовой программой.

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

sendmail SSL для windows

24.01.2010
сайт: http://www.sendmail.org
условия использования: бесплатно

скачать sendmail версия для windows

Подробная настройка sendmail

sendmail для windows с библиотеками для возможности отправки почты по защищенному соединению.
Необходим для отправки почты с помощью встроенных функций серверных языков программирования(php, perl и т.д.).
В архиве пример конфигурационного файла sendmail.ini с комментариями на русском.

Вот пример конфигурации sendmail.ini

; конфигурационный файл sendmail

; здесь укажите сервер исходящей почты
smtp_server=smtp.mail.ru

; порт smtp, если обычный режим отправки, то порт будет 25
; если сервер работает в защищенном режиме (TLS), то порт 465, например почта гугла работает через 465 порт
smtp_port=25

; домен по умолчанию (совсем не обязательно)
;default_domain=local

; лог ошибок
error_logfile=error.log

; лог отправки, необходим на стадии тестирования. содержит весь текст переговоров с сервером при отправке писем.
debug_logfile=debug.log

; Если smtp сервер с авторизацией, укажите логин пароль(без кавычек), если без авторизации ничего не пишите
auth_username=
auth_password=

Читайте также:  Интерпретатор командной строки для windows

; если перед отправкой почты сервер требует авторизацию через POP, заполните эти поля
;pop3_server=
;pop3_username=
;pop3_password=

; email адрес, от которого идет отправка, вставится в заголовок «From: »
; если отправка писем идет через mail.ru, здесь обязательно должен быть адрес, через который произведена авторизация.
force_sender=

; хост, который указывается при авторизации в команде ehlo/helo
; указывайте домен, через который авторизуетесь
hostname=mail.ru

Комментарии

25.12.2010 cool
спасибо помогло

14.04.2011 yusya
Подскажите, а как перезапустить sendmail без перезагрузки сервера? ОС Windows Server 2003.

15.04.2011 Виктор
yusya, никак, надо перегружать.
Ну хотя если sendmail запущен как служба, то можно его перегрузить в службах.

28.07.2011 Stas
а куда копировать распакованые файлы
ОС Windows Server 2003
стоит только Apache
C:/apache/localhost/www/site/

05.08.2011 Сергей
Stas, а если стоит один только apache, зачем вам sendmail?
Для работы sendmail нужен еще серверный язык, типа perl или php.
А вообще можно класть его куда хотите, если его не было, то все равно в настройках предется прописывать пути к нему.
Но обычно sendmail помещают или в папку apache или на одном уровне с папкой apache.
А вот вы привели пример пути к папке с файлами сайта, а это совсем не то.

12.12.2011 Стас
стоит и apache и php
в этих папках менять что-то надо

Sendmail для windows php

Для того чтобы письма, отправленные скриптами сайтов при помощи php mail доходили на все ящики и не попадали в спам, нужно отправлять такие письма с указанием отправителя любого ящика, созданного на этом вашем же домене, а не ящики на gmail, ya.ru, mail.ru и др.

Если сайт работает в режиме php apache https://thehost.ua/wiki/apache-cgi как на скрине выше, то изменить ящик можно в разделе www домены в свойствах домена в поле email администратора. Если сайт работает в режиме php cgi тогда изменить ящик можно в файле
php-bin/php.ini в строке
sendmail_path = «/usr/sbin/sendmail -t -i -f yachshik@domen.com»

При этом желательно указывать реально созданный существующий ящик https://thehost.ua/wiki/mailbox. Рекомендуем имя ящика указывать уникальным, и не указывать webmaster в качества имени ящика, т.к. из-за этого могут возникнуть проблемы с отправкой писем.

Существует легкий способ проверки работоспособности php mail сайта и правильности настроек домена в панели управления хостингом:
Нужно создать в папке вашего сайта текстовый файл mail.php с таким содержимым:

где вместо support@thehost.com.ua указать ваш какой то рабочий ящик, в котором вы сможете проверить доходят ли письма созданным скриптом.

Затем просто запустите в браузере созданный файл по ссылке ваш_домен/mail.php и если все работает — получите ответ bool true, и на указанный вами ящик придет письмо с темой Test и текстом test. Если не работает — получите bool false и письмо не придет.

Читайте также:  Как отключить логирование linux

В таком случае попробуйте изменить настройки сайта согласно указанным выше рекомендациям и также попробуйте сменить режим php для сайта https://thehost.ua/wiki/apache-cgi и повторить попытку.

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

При настройке sendmail нужно указывать параметры доступа к ящику (имя почтового сервера/IP, сам ящик и пароль от него). Если ящик создан на том же сервере — имя сервера нужно указать только localhost, иначе подключение не будет работать.

Настройка 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. Перезагружаем sendmail и сервер

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

Читайте также:  Как ускорить windows 10 для нетбука

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

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.

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

Оцените статью