I live ExBB and CMS Limbo! » Форумы и сайты » Записная книжка PHP » Отправка почты средствами PHP

Страниц (1): [1]
 

1. технарь - 10 апреля 2018 — 21:50 - перейти к сообщению
В этой статье будем расказывать об отправке почты из 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:

PHP:
[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

hostname=mail.ru

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

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

PHP:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Simple Mail</title>
</head>
<body>
<?php
$addr = $_POST['addr'];
$theme = $_POST['theme'];
$text = $_POST['text'];
if (isset($addr) && isset($theme) && isset($text)
&& $addr != "" && $theme != "" && $text != "") {
if (mail($addr, $theme, $text, "From: vova_33@mail.ru")) {
echo "<h3>Сообщение отправлено</h3>";
}
else {
echo "<h3>При отправке сообщения возникла ошибка</h3>";
}
}
?>
<form action="mailer.php" method="post">
<p>
<label for="addr">eMail:</label>
<input type="text" name="addr" id="addr" size="30" />
</p>
<p>
<label for="theme">Тема письма:</label>
<input type="text" name="theme" id="theme" size="30" />
</p>
<p>
<label for="text">Текст письма:</label>
<textarea rows="10" cols="20" name="text" id="text"></textarea>
</p>
<p>
<input type="submit" value="Отправить" />
</p>
</form>
</body>
</html>



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

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

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

http://phpclub.ru/detail/article/mail
https://www.glob.com.au/sendmail/
https://habrahabr.ru/post/26518/

http://webi.ru/webi_files/sendmail_ssl.html
https://www.glob.com.au/sendmail/

http://blog.nagaychenko.com/2010...E%D1%81-windows/
http://valery.narod.ru/hitro/sendmail.htm
http://wwwsu.ru/sendmail.ini.html
http://www.sesmikcms.ru/pages/re...a-po-php-mailer/
2. Marych - 11 апреля 2018 — 09:40 - перейти к сообщению
 Цитата от технарь:
force_sender=account_name@mail.ru

hostname=mail.ru

Как-то на хабре увидел комментарий, который в точности выражает моё мнение о mail.ru. Запомнил и процитирую: "Пользоваться почтой от mail.ru - это примерно как сморкаться в рукав. В принципе, ничего страшного, просто в некоторых кругах вас могут не понять"
3. технарь - 11 апреля 2018 — 12:07 - перейти к сообщению
А как насчёт рамблера и яндекса? Улыбка
4. Marych - 11 апреля 2018 — 12:41 - перейти к сообщению
 Цитата от технарь:
А как

Никак. Ничего не могу сказать.

Powered by ExBB v1.1.180311