PHP mail под Windows. Отправка почты из PHP скриптов
В этой статье я хочу рассказать об отправке почты из 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_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
pop3_password=account_password
; параметр для команды MAIL FROMforce_sender=account_name@mail. ru
hostname=mail.ru
Теперь не забудьте перезапустить web сервер, чтобы изменения вступили в силу.
Чтобы протестировать работу почты напишем простенький скрипт:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <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: [email protected]")) { echo "<h4>Сообщение отправлено</h4>"; } else { echo "<h4>При отправке сообщения возникла ошибка</h4>"; } } ?> <form action="mailer.php" method="post"> <p> <label for="addr">eMail:</label> <input type="text" name="addr" size="30" /> </p> <p> <label for="theme">Тема письма:</label> <input type="text" name="theme" size="30" /> </p> <p> <label for="text">Текст письма:</label> <textarea rows="10" cols="20" name="text"></textarea> </p> <p> <input type="submit" value="Отправить" /> </p> </form> </body> </html>
Он создает форму с тремя полями для ввода адреса, темы и содержания письма. Нажатие на кнопку «Отправить» отправит запрос этому же скрипту (строка 23).
Если данные введены, то будет вызвана функция mail (строка 15), которая и отправит письмо. В случае успешной отправки функция возвращает true, в противном случае — false.
Как видите, ничего сложного в настойке почты нет.
Удачи!
Отправка писем с сайта. Готовое решение. Почтовый скрипт
Предлагаю готовое решение для отправки сообщений с сайта. Любой пользователь сможет легко отправить письмо с любой страницы Вашего сайта, вызвав POP окно по размещенной ссылке или через меню. Предусмотрена КАПТЧА для защиты от спама.
Для установки почтового скрипта необходимо совершить всего три действия:
1. Укачать адрес вашего почтового ящика в файле config.php
2. Залить папку со скриптом на сервер хостинга.
3. Разместить на сайте (в меню) ссылки на вызов формы обратной связи.
Системные требования к хостингу: PHP 4.0.6 и выше, библиотека GB для каптчи (практически на всех хостингах)
Установка завершена.
Теперь форма обратной размещена по адресу: http://ВАШСАЙТ.ru/feedback/
Вызвать ее можно используя скрипт всплывающего POP окна. Для этого использовать готовый код в прилагаемом файле HTML страницы link.html.
Конечно проще купить готовый сайт на основе CMS, допустим: WordPress, Drupal или 1с-Битрикс, где уже встроены системы для отправки сообщений и писем с сайта. Но для тех вебмастеров, которые не ищут легких путей в вебстроительстве, возможно будет полезен скрипт обратной почтовой связи со своего сайта, построенного на html файлах.
Оформление формы обратной связи.
ДизайнПредложенная форма обратной связи удобна тем, что может быть внедрена в любой дизайн сайта, не изменяя при этом структуру страницы. Файлы скрипта лежат в отдельной папке и не мусорят структуру сайта.
Внешний вид формы настраивается из файла style.css
Защита от спама
При отправке писем с сайта предусмотрен ввод защитного кода КАПТЧА, что предупредит намерения злоумышленников.
Дизайн каптчи можно настроить в файле kcaptcha_config.php
В архиве 2 варианта отправки писем с сайта.
Второй вариант feedback2 — предусматривает получение дубликата письма отправителем. Т.е. посетитель сайта, отправивший сообщение, получит его копию на свой (указанный) email.
Будьте внимательны при установке feedback2: Вашим сайтом могут воспользоваться недоброжелатели для отправки писем от Вашего имени.
Подробное описание установки формы обратной связи на свой сайт
найдете в скаченном архиве:
1. В файле feedback\config.php во 2 строке заменить Ваш@EMAIL.ru на адрес своей почты, на которую желаете получать письма.
2. Залить папку feedback на сайт целиком. Название можно изменить.
Теперь почта установлена и Вы можете отправлять письма с сайта используя адрес:
в зависимости от того, где лежит залитая папка.
Можно размещать в любой директории, лишь бы ссылка вызова формы вела к файлу index. php или папке feedback. Зависит от директив файла .htaccess, если он существует.
Можно проверить работу формы прямо с компьютера, изменив адрес в файле link.html и запустив его в браузере.
Теперь сформируем ссылку, которую можно использовать с любой страницы сайта и POP окно для открытия формы обратной связи
3. В файле link.html (вне папки feedback) лежит готовая ссылка и скрипт для вызова POP окна. Они выделены комментариями.
— Скрипт вставьте между тегами head на той странице, с которой будет вызываться форма обратной связи.
— В ссылке замените адрес на тот, по которому находится загруженная папка feedback на хостинге.
При необходимости укажите путь к файлу http://??????/feedback/index.php.
Отредактированную ссылку можно разместить в любом месте сайта, на любой странице.
Изощрения
Изменить оформление окна обратной связи можно в файле style.css и feedback/index.php
Изменить сообщения об ошибках при отправке писем можно в файле feedback\config. php
Если Вы хотите отказаться от POP окна, то форму обратной связи можно вставить на отдельную страницу сайта.
Для этого скопируйте в файле feedback/index.php содержимое между комментариями:
<!—Код для формы обр. связи—>
…………..
<!—конец Код для формы обр. связи—>
и вставьте в нужное место.
При этом возможно придется отказаться от параметров таблицы table, div или изменить их. А так же поработать с параметрами в файле style.css и путями его прописки. Но отпадет необходимость в пункте 3.
Все зависит от Вашего умения и вкуса.
Многие параметры адаптированы к капризам браузера Internet Exploler.
Также проверено в работе и адаптировано к браузерам: Mozilla Firefox, Opera, Google Chrome, Safari.
Можете удалить дополнительные кнопки: «Обновить форму» и «Закрыть окно», по отдельности или целиком.
Закомментированы в файле feedback/index.php: <!—Доп. кнопки—>
Если пожелаете, то вставьте после метатег против индексации страниц поисковиками:
<meta name=»robots» content=»noindex»>
Скачать бесплатно готовую форму обратной связи: feedback. rar [325,68 Kb] (cкачиваний: 2845)
Как сделать так, чтобы мой PHP отправлял почту?
Из почтового руководства php:
Требования
Чтобы функции почты были доступны, PHP требует установленной и работающей системы электронной почты. Используемая программа определяется настройками конфигурации в файле php.ini.
Это означает, что вам нужно установить какой-нибудь почтовый сервер и настроить php для его использования. Обычно этот почтовый сервер является постфиксом в Ubuntu. Однако — если сторона php, которую вы кодируете, в конечном итоге будет храниться на стороне хостинг-сервиса (например, xmission), то, скорее всего, почтовый сервер там уже будет установлен. В этом случае просто протестируйте свой сайт онлайн, а не локально.
Если вам нужно протестировать его в вашей собственной системе или вы хотите разместить его на своем домашнем сервере, выполните следующие действия:
Установка: postfix / sudo apt-get install postfix
Во время процесса вас спросят, в каком режиме вы хотите установить postfix. Есть четыре возможных режима:
- Интернет : Ваш собственный почтовый сервер.
- Спутник : внешний почтовый провайдер (например, Google) будет использоваться для отправки и получения почты. Сервер не будет получать почту.
- Smarthost : смесь между двумя. Почта хранится локально, но отправляется через внешнего почтового провайдера.
- Только местный : вас это не касается. Это системный внутренний почтовый сервер. Вы можете только отправлять почту от пользователя к пользователю в системе.
Остальные параметры установки зависят от вашего выбора этой общей конфигурации.
Скорее всего, вы выберете спутниковую установку. Это означает, что почта будет отправлена через внешнего провайдера. В качестве smtp-сервера (сервера исходящей почты) вам нужно будет указать своих провайдеров smtp. Остальные варианты говорят сами за себя.
Конфигурация после установки
Большинство smtp-серверов требуют аутентификации по паролю для отправки почты. Поэтому postfix нужно будет знать этот пароль. Также есть такие вещи, как шифрование, которое нужно учитывать (что вам придется гуглить). Вот как вы настраиваете postfix с использованием аутентификации по паролю (sasl):
Установите libsasl2-modules и sasl2-bin , щелкнув значки Центра программного обеспечения или из терминала, используя:
sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
Включите sasl-auth, добавив эти строки в
/etc/postfix/main.cf
# add to /etc/postfix/main.cf smtp_sasl_auth_enable = yes smtp_sasl_security_options = noplaintext noanonymous smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
Создайте файл
/etc/postfix/sasl_password
с такой строкой:smtp.gmail.com [email protected]:USERPASSWORD
Подставьте реальный пароль, имя пользователя и smtp-адрес.
Обновление постфикса:
sudo chmod 600 /etc/postfix/sasl_password # for safety of your smtp password sudo postmap hash:/etc/postfix/sasl_password sudo postmap /etc/postfix/sender_canonical sudo /etc/init. d/postfix restart
Вы , возможно , придется обойти «разрешение отказано» ошибка по
chown postfix:postfix /etc/postfix
заранее.
Это должно делать это в большинстве случаев. Тем не менее, некоторые провайдеры SMTP требуют определенного адреса в качестве отправителя или шифрования.
Связанный: PEAR :: Mail интерфейс также может быть интересен для вас.
Gmail (и, возможно, другим службам) может не понравиться то, что вы пытаетесь отправлять почту таким образом, поскольку это может считаться небезопасным по их стандартам, и это может заблокировать вашу попытку, т. Е. На экране ничего не произойдет, или какое-то место всего процесса заблокирует ваша аутентификация. Также ваш POP3 должен быть включен.
Чтобы противостоять этому, смотрите здесь. (Если вы хотите быть в безопасности, создайте фиктивную учетную запись Gmail)
Отправка почты php через smtp c локального сервера
Главная / Уроки joomla / Отправка почты php через smtp в cms-joomla
Опубликовано 10 января 2018Изменен: 21 июня, 2020
345
Отправка почты php через smtp популярных почтовых сервисов яндекса, гугла и mail ru, может осуществляться и с локального сервера, если программное обеспечение такого сервера позволяет это сделать.
Одним из таких серверов, является openserver и все что нужно для работы с почтой, у него есть. Использование возможностей таких серверов, позволяет создавать, тестировать и настраивать новые сайты, скрипты и приложения на компьютере, без подключения услуг хостинг-провайдеров.
В этом уроке рассмотрим вариант отправки почты php через smtp на движке joomla, с помощью локального сервера openserver. Чтобы было все наглядно и правильно, лучше конечно создать в яндексе, гугле и mail ru по одному почтовому ящику, а данные для авторизации лучше записать.
В каждом таком сервисе есть возможность отправки писем через smtp (широко используемый сетевой протокол). Именно они производят отправку сообщений, все остальные (сами скрипты, cms и пр.), лишь формирую эти сообщения.
Для настройки отправки почты php через smtp, нужно проделать некоторые шаги:
- Создать почтовый ящик, или несколько yandex, google, mail ru
- Установить и настроить openserver
- Установить joomla на openserver
Затем можно приступать к настройке openserver для отправки почты php через smtp, в данном случае показан шаблон для smtp яндекса. Вместо слова «test» необходимо подставить свои реальные значения.
При необходимости настроить несколько почтовых серверов, лучше всего настроить отправку почты php через smtp в openserver с помощью профилей. В этом случае не придется несколько раз переделывать настройки. Как работать с профилями показано в видеоуроке настройка php для разных cms-систем.
Отправка почты php через smtp яндекса в joomla
В общих настройках системы, в меню «сервер», выставляем следующие параметры:
Включаем режим отправки почты в положение «Да», указываем реальный адрес куда будет отправляться почта и устанавливаем способ отправки-PHP Mail
Как все будет готово, можно отправлять сообщение нажав на кнопку «Отправить тестовое сообщение». Если все правильно настроено, на почту указанную в настройках joomla, придет тестовое письмо.
Отправка почты php через smtp mail ru
В настройках mail ru все точно так же как и в яндексе. Вместо слова «test», подставляем свои данные. После сохранения настроек, опять отправляем тестовое сообщение.
Отправка почты php через smtp google в joomla
В гугле немного сложнее создавать аккаунты и система безопасности там лучше. По этой причине вместо письма придет уведомление безопасности и о дальнейших действиях по подключению приложений.
В любом случае, все будет работать.
В данном уроке были рассмотрены варианты отправки почты php через smtp трех почтовых сервисов. Отправка почты php через smtp Yahoo и Rambler будет происходить точно так же.
Непосредственно в почтовом ящике, в строке от кого, будут указаны smtp тех сервисов, через которые производились отправки. На скриншоте они показаны стрелками.
Если использовать для отправки почты скрипт, то почта будет приходить на почтовый адрес указанный в скрипте, а пересылаться будет через тот smtp, который указан в последних настройках openserver.
Похожие записи
Отправка электронных писем на PHP с помощью PHPMailer
PHPMailer, пожалуй, самая популярная библиотека PHP с открытым исходным кодом для отправки электронных писем. Впервые он был выпущен еще в 2001 году, и с тех пор он стал излюбленным способом программной отправки электронных писем разработчикам PHP, не считая некоторых других фаворитов фанатов, таких как Swiftmailer.
В этой статье мы поговорим о том, почему вам следует использовать PHPMailer вместо функции PHP mail ()
, и мы покажем несколько примеров кода о том, как использовать эту библиотеку.
Эта популярная статья была обновлена в 2020 году и теперь содержит самые свежие инструкции по работе с PHPMailer.
Является ли это альтернативой функции PHP
mail ()
? В большинстве случаев это альтернатива функции PHP mail ()
, но во многих других случаях функция mail ()
просто недостаточно гибкая для достижения того, что вам нужно.
Прежде всего, PHPMailer предоставляет объектно-ориентированный интерфейс, тогда как mail ()
не является объектно-ориентированным.Разработчики PHP обычно не любят создавать строки $ заголовков
при отправке электронных писем с использованием функции mail ()
, потому что они требуют большого количества экранирований. PHPMailer делает это проще простого. Разработчикам также необходимо писать грязный код (экранирование символов, кодирование и форматирование) для отправки вложений и электронных писем на основе HTML при использовании функции mail ()
, тогда как PHPMailer делает это безболезненно.
Кроме того, для функции mail ()
требуется локальный почтовый сервер для отправки электронных писем, что не всегда легко настроить.PHPMailer может использовать нелокальный почтовый сервер (SMTP), если у вас есть аутентификация.
Дополнительные преимущества:
- Он может печатать различные сообщения об ошибках на более чем 40 языках, когда не может отправить электронное письмо.
- Он имеет встроенную поддержку протокола SMTP и аутентификацию через SSL и TLS.
- Он может отправлять альтернативную текстовую версию электронной почты для почтовых клиентов, отличных от HTML.
- У него очень активное сообщество разработчиков, которое обеспечивает его безопасность и актуальность.
PHPMailer также используется популярными системами управления контентом PHP, такими как WordPress, Drupal и Joomla.
Установка PHPMailer
Вы можете установить PHPMailer с помощью Composer:
композитору требуется phpmailer / phpmailer
Отправка электронной почты с локального веб-сервера с использованием PHPMailer
Вот простейший пример отправки электронного письма с локального веб-сервера с помощью PHPMailer:
Php
используйте PHPMailer \ PHPMailer \ PHPMailer;
используйте PHPMailer \ PHPMailer \ Exception;
require_once "поставщик / автозагрузка.php ";
$ mail = новый PHPMailer (true);
$ mail-> From = "[email protected]";
$ mail-> FromName = "Полное имя";
$ mail-> addAddress ("[email protected]", "Имя получателя");
$ mail-> addAddress ("[email protected]");
$ mail-> addReplyTo ("[email protected]", "Ответить");
$ mail-> addCC ("cc@example. com");
$ mail-> addBCC ("[email protected]");
$ mail-> isHTML (правда);
$ mail-> Subject = "Текст темы";
$ mail-> Body = " Тело письма в HTML ";
$ mail-> AltBody = "Это текстовая версия содержимого электронной почты";
пытаться {
$ mail-> send ();
echo "Сообщение успешно отправлено";
} catch (исключение $ e) {
echo "Ошибка почтовой программы:".$ mail-> ErrorInfo;
}
Код и комментарии должны быть достаточно ясными, чтобы объяснить все, что происходит.
Отправка электронного письма с вложениями
Вот пример того, как отправить электронное письмо с вложениями с помощью PHPMailer:
Php
используйте PHPMailer \ PHPMailer \ PHPMailer;
используйте PHPMailer \ PHPMailer \ Exception;
require_once "vendor / autoload.php";
$ mail = новый PHPMailer;
$ mail-> From = "[email protected]";
$ mail-> FromName = "Полное имя";
$ mail-> addAddress ("recipient1 @ example.com "," Имя получателя ");
$ mail-> addAttachment ("файл. txt", "Файл.txt");
$ mail-> addAttachment ("images / profile.png");
$ mail-> isHTML (правда);
$ mail-> Subject = "Текст темы";
$ mail-> Body = " Тело письма в HTML ";
$ mail-> AltBody = "Это текстовая версия содержимого электронной почты";
пытаться {
$ mail-> send ();
echo "Сообщение успешно отправлено";
} catch (исключение $ e) {
echo "Ошибка почтовой программы:". $ mail-> ErrorInfo;
}
Здесь мы прикрепляем два файла — файл .txt
, который находится в том же каталоге, что и сценарий, и images / profile.png
, который находится в каталоге images
каталога сценария.
Чтобы добавить вложения к электронному письму, нам просто нужно вызвать функцию addAttachment
объекта PHPMailer, передав путь к файлу в качестве аргумента. Чтобы прикрепить несколько файлов, нам нужно вызывать его несколько раз.
Поиск и устранение неисправностей
В наших двух примерах мы использовали класс Exception PHPMailer для отладки, поэтому любые выданные ошибки помогут нам отладить любые проблемы, которые могут возникнуть. Мы также добавили аргумент true
в конструктор PHPMailer для вывода более наглядных исключений более высокого уровня.
В зависимости от используемой системы, вероятно, наиболее частая ошибка, которую мы будем видеть, будет связана с запуском функции mail ()
в фоновом режиме:
Ошибка почтовой программы: не удалось создать экземпляр почтовой функции.
Если нам нужно больше информации об ошибке, мы также можем добавить что-то вроде этого в предложение catch:
print_r (error_get_last ());
Обычно проблема с почтовой функцией связана с отсутствующей настройкой почтового сервера, и в этом случае функция error_get_last
вернет что-то вроде этого:
Массив (
[тип] => 2
[message] => mail (): Не удалось подключиться к почтовому серверу через порт 25 localhost, проверьте настройки «SMTP» и «smtp_port» в php.ini или используйте ini_set ()
[файл] => OUR_PATH \ vendor \ phpmailer \ phpmailer \ src \ PHPMailer. php
[line] => 863
)
Это проблема, с которой мы, вероятно, сталкиваемся чаще всего, и мы можем легко ее решить с помощью SMTP.
Отображение локализованных сообщений об ошибках
$ mail-> ErrorInfo
может возвращать сообщения об ошибках на 43 разных языках.
Чтобы отображать сообщения об ошибках на другом языке, скопируйте каталог language
из исходного кода PHPMailer в каталог проекта.
Чтобы возвращать сообщения об ошибках на русском языке, например, установите для объекта PHPMailer русский язык, используя следующий вызов метода:
$ mail-> setLanguage ("ru");
Вы также можете добавить свои языковые файлы в каталог language
.
Использование SMTP
Вы можете использовать почтовый сервер другого хоста для отправки электронной почты, но для этого вам сначала необходимо пройти аутентификацию. Например, чтобы отправить электронное письмо с почтового сервера Gmail, вам потребуется учетная запись Gmail.
SMTP — это протокол, используемый почтовыми клиентами для отправки запроса электронной почты на почтовый сервер. После того, как почтовый сервер проверяет электронную почту, он отправляет ее на целевой почтовый сервер.
Вот пример отправки электронного письма с почтового сервера Gmail из вашего домена. Для запуска кода вам не нужен локальный почтовый сервер. Мы будем использовать протокол SMTP:
Php
используйте PHPMailer \ PHPMailer \ PHPMailer;
используйте PHPMailer \ PHPMailer \ SMTP;
используйте PHPMailer \ PHPMailer \ Exception;
require_once "поставщик / автозагрузка.php ";
$ mail = новый PHPMailer (true);
$ mail-> SMTPDebug = 3;
$ mail-> isSMTP ();
$ mail-> Host = "smtp.gmail.com";
$ mail-> SMTPAuth = true;
$ mail-> Имя пользователя = "[email protected]";
$ mail-> Password = "super_secret_password";
$ mail-> SMTPSecure = "tls";
$ mail-> Порт = 587;
$ mail-> From = "[email protected]";
$ mail-> FromName = "Полное имя";
$ mail-> addAddress ("name @ example. com "," Имя получателя ");
$ mail-> isHTML (правда);
$ mail-> Subject = "Текст темы";
$ mail-> Body = " Тело письма в HTML ";
$ mail-> AltBody = "Это текстовая версия содержимого электронной почты";
пытаться {
$ mail-> send ();
echo "Сообщение успешно отправлено";
} catch (исключение $ e) {
echo "Ошибка почтовой программы:". $ mail-> ErrorInfo;
}
Gmail требует шифрования TLS через SMTP, поэтому мы настроили его соответствующим образом. Перед отправкой через SMTP вам необходимо узнать имя хоста, номер порта, тип шифрования, если требуется, а если требуется аутентификация, вам также понадобятся имя пользователя и пароль.Обратите внимание, что включение двухфакторной аутентификации в Gmail не позволит вам использовать их SMTP с именем пользователя и паролем. Вместо этого потребуется дополнительная настройка.
Одним из больших преимуществ использования удаленного SMTP над локальной почтой является то, что если вы используете функцию PHP mail ()
для отправки электронной почты с адресным доменом из
, установленным на любое другое имя, кроме имени локального домена (имя сервера), тогда фильтры атаки почтового сервера получателя помечают его как спам. Например, если вы отправляете электронное письмо с сервера с фактическим именем хоста example.com
с с адреса
[email protected]
до [email protected]
, тогда серверы Yahoo отметят его как спам или покажут пользователю сообщение, не доверяющее этому электронному письму, потому что его источник — . example.com
, и все же он выглядит так, как будто идет с gmail.com
. Хотя вам принадлежит [email protected]
, Yahoo не сможет это выяснить.
Получение писем с использованием POP3
PHPMailer также позволяет проверять POP-before-SMTP для отправки электронных писем.Другими словами, вы можете аутентифицироваться с помощью POP и отправлять электронную почту с помощью SMTP. К сожалению, PHPMailer не поддерживает получение писем с почтовых серверов по протоколу POP3. Он ограничивается только отправкой электронных писем.
Заключение
Если вы разработчик PHP, у вас мало шансов избежать программной отправки электронной почты. Хотя вы можете выбрать сторонние сервисы, такие как Mandrill или SendGrid, иногда это просто невозможно, а использование собственной библиотеки отправки электронной почты — еще меньше.Вот где на помощь приходит PHPMailer и его альтернативы (Zend Mail, Swift Mailer и т. Д.).
Вы можете узнать об API этой библиотеки в вики репозитория или в официальной документации.
Вы увязли в зависимостях библиотеки PHP? Посмотрите наш скринкаст и узнайте, как Composer может помочь вам с этим справиться.
Как проверить и исправить функцию php mail ()
Функция php mail () позволяет отправлять электронные письма прямо с php сценарий.
Из этого туториала Вы узнаете, как проверить, правильно ли работает php mail.
Протестируйте почту php () на вашем веб-сервере
1. Создайте тестовый файл php с помощью текстового редактора и сохраните его. например как test.php:
PHP
$ sender = ‘something@somedomain. tld’;
$ получатель = ‘[email protected]’;
$ subject = «проверка почты на php»;
$ message = «тестовое сообщение php»;
$ заголовков
= ‘От:’.$ отправитель;
if (почта ($ получатель, $ тема, $ сообщение, $ заголовки))
{
echo «Сообщение принято»;
}
остальное
{
echo «Ошибка: сообщение не принято»;
}
?>
2. Измените $ отправителя и $ получателя в коде.
3. Загрузите файл php на свой веб-сервер.
4. Откройте загруженный файл php в своем браузере на выполнить скрипт php .
5. Выход показывает либо «Сообщение принято», либо «Ошибка: Сообщение не принято ».
chevron_right Сообщение принято: Откройте свой почтовый клиент, чтобы узнать, было ли сообщение доставлено на указанный
Адрес электронной почты.
(также проверьте папку со спамом!)
Если сообщение было доставлено:
- Все нормально — php mail работает.
Если сообщение не было доставлено:
- Некоторые провайдеры не допускают внешних получателей при использовании почты php.Измените получателя ($ recipient) в коде на локального получателя. Это означает, что используйте адрес электронной почты из домена сервера, например если домен вашего сервера www.yourdomain.tld, тогда адрес электронной почты получателя должно быть [email protected].
- Загрузите измененный файл php и повторите попытку.
- Если он по-прежнему не работает: измените отправителя ($ sender) на локального электронная почта (используйте тот же адрес электронной почты, что и для получателя).
- Загрузите измененный файл php и повторите попытку.
- Обратитесь к своему провайдеру, если он по-прежнему не работает.
Сообщите своему провайдеру что стандартная функция php «mail ()» возвращает ИСТИНА, но почта не быть отправленным.
Рекомендуется включить используемый тестовый скрипт php в покажите провайдеру, что проблема не в скрипте php используемый.
Почта php может быть отключена:
- Войдите в конфигурацию своего веб-сервера и проверьте настройки php.
Некоторые установки php требуют, чтобы вы установили отправителя по умолчанию в Сначала конфигурация php.
Некоторые провайдеры не разрешают внешним получателям при использовании php почта:
- Измените получателя ($ recipient) в коде на локального получателя. Это означает, что используйте адрес электронной почты из домена сервера, например если домен вашего сервера www.yourdomain.tld, тогда адрес электронной почты получателя должен быть кто-то @ yourdomain.tld.
- Загрузите измененный файл php и повторите попытку.
- Если он по-прежнему не работает: измените отправителя ($ sender) на локального электронная почта (используйте тот же адрес электронной почты, что и для получателя).
- Загрузите измененный файл php и повторите попытку.
Если вы проверили настройки php, попробуйте локального получателя и он все еще не работает:
- Свяжитесь со своим провайдером, если вы не можете включить php mail ().
Сообщите своему провайдеру, что стандартная функция php mail () возвращает FALSE.
Рекомендуется включить используемый тестовый скрипт php, чтобы показать вашего провайдера, что проблема не вызвана используемым скриптом php.
Почему функция PHP Mail не отправляет почту?
Теоретически отправка электронной почты с помощью функции PHP mail () должна быть простой задачей. В «mail ()» всего 3 элемента: получатель, тема и сообщение, а электронное письмо доставляется всего с одной строкой кода.
Но, как и многие вещи, которые кажутся такими простыми, функция PHP mail () не всегда работает так гладко, и может быть сложно определить, почему. Это может быть, например, из-за того, что у вас отсутствуют необходимые параметры, есть опечатки в адресе электронной почты получателя или вам нужно настроить ретранслятор SMTP.
Из всех возможных вариантов того, почему ваш PHP mail () не отправляет электронную почту, мы обнаружили, что большинство проблем связано с неправильной настройкой Postfix. Мы подробно рассмотрим Postfix, как его правильно настроить и протестируем, чтобы убедиться, что ваша почта отправляется.
Что такое Postfix?
Postfix — это бесплатный агент передачи почты с открытым исходным кодом, который маршрутизирует и доставляет электронные письма. Он следует протоколу SMTP и работает в Unix-подобных операционных системах, включая macOS.
Postfix настолько широко используется, что предустановлен на большинстве компьютеров, отличных от Windows.Хотя предустановленный Postfix удобен, это может означать, что он не был правильно настроен, что приведет к сбою в работе PHP mail ().
Как настроить Postfix?
Прежде чем мы проверим, правильно ли настроен Postfix, давайте сначала проверим, что он установлен.
В вашем терминале выполните следующую команду:
Любые ошибки, выданные за это время, могут дать некоторое представление о том, что не работает. Но если вы получите ответ, свидетельствующий о том, что программа установлена, смело переходите к следующему разделу.
Если он не был установлен, обратитесь к документации Postfix или обратитесь к своему хосту за инструкциями по установке.
Postfix имеет несколько требований, которые должны быть выполнены для правильной отправки электронной почты.
Сначала измените локальную конфигурацию Postfix. Вы можете загрузить редактор прямо со своего терминала, выполнив следующую команду:
После открытия убедитесь, что следующие 4 переменные определены следующим образом:
И вуаля! Сохраните изменения и перезапустите Postfix с помощью `sudo postfix reload`.
Мы обнаружили, что наиболее важной из этих переменных является myhostname. Если вы не определите эту переменную, ваша локальная среда не сможет назначить местоположение по умолчанию для отправки электронной почты. Используйте реальный домен или что-то произвольное (как в примере выше) для выполнения этого значения.
Как протестировать Postfix и PHP mail ()
Чтобы проверить, работает ли Postfix, а затем и PHP mail (), мы создадим простой скрипт для запуска. В вашем любимом текстовом редакторе или интегрированной среде разработки (IDE) создайте файл с именем `mail.php` и включите следующий код:
Обязательно замените переменную `$ to` своим фактическим адресом электронной почты. В своем терминале запустите программу с помощью следующей команды и проверьте свою электронную почту:
Завершение
Отправка электронной почты с помощью PHP mail () довольно проста, что делает ее еще более неприятной, если она работает некорректно. Помните о конфигурации Postfix, если вы столкнетесь с ошибками при отправке.
Спросите себя:
- Установлен ли на вашем компьютере Postfix?
- Определены ли у вас 4 переменные, в частности «myhostname»?
- Вы добавили свой адрес электронной почты (и правильно его написали) при тестировании?
Если у вас все еще возникают проблемы с PHP mail (), не отправляющим электронную почту, ознакомьтесь с этим ответом на StackOverflow, чтобы получить дополнительные идеи по устранению неполадок.
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 — в Кембридже Джон Варбрик,, вычислительная служба Кембриджского университета
Встроенная в PHP функция, называемая ‘mail’, позволяет скриптам PHP Отправить почту.Однако может быть сложно заставить это работать (особенно с почтовыми системами в Кембридже). Эти примечания предназначены для помощи.
Должен отметить, что я не эксперт по PHP. Что следует за этим после нескольких часов игры с PHP и достаточно хороших понимание того, как работает SMTP-почта. Предложения по обновлениям или поправки приветствуются.
Фон
SMTP-почта сложнее, чем вы думаете. Есть два конкретных вопросы, которые вам необходимо понять:
1) «Конверт» против «Заголовка»
Во время передачи по SMTP почтовое сообщение SMTP имеет два независимые наборы адресов отправителя и получателя.Один комплект адреса — это те, которые появляются в заголовке To :, From :, Cc: и т. д. линий. Это адреса, отображаемые почтовыми программами, и люди-получатели сообщения обычно полагаются на создавать ответы и т. д. Однако системы транспортировки почты обычно не используйте эти адреса, но вместо этого полагайтесь на набор адресов «конверта» для информации о маршрутизации почты. Для большинства сообщений одна и та же информация появится в двух наборах адресов, но это не обязательно дело.
Это похоже на бумажное письмо, которое может иметь один набор отправителей. и адреса получателей в самом письме, и, по крайней мере, теоретически совершенно другой набор адресов на внешней стороне конверта. И это то, что находится на внешней стороне конверта, который использовался для доставки письма, или возврат, если не может быть доставлен.
2) При сбое сообщения
Поскольку почта SMTP доставляется с помощью механизма «хранения и пересылки», есть два основных способа сообщить о сбоях в отправитель.Попытка отправить сообщение может немедленно потерпеть неудачу, когда пользователь отправляет его, и в этом случае пользователь будет уведомлен об ошибке сообщение или код возврата. В качестве альтернативы передача может выйти из строя позже в сеть магазинов и форвардеров, и в этом случае единственная возможность — отправить сообщение отправителю.
Важным моментом во всем этом является то, что это отправитель конверта адрес (только), который будет использоваться для сообщения о такой проблеме. Если это сам адрес недействителен, то с этим ничего нельзя сделать неудачное сообщение, кроме как выбросить его или передать его человеку кто может разобраться в том, что происходит.
Проблема со скриптами электронной почты
Из-за важности адреса отправителя конверта центральный Почтовые серверы университетов (ppsw, CUS, Hermes) откажутся принимать сообщение с адресом отправителя в конверте, который они могут определить, недействительным. К сожалению, многие функции, используемые в веб-автоматизации для отправки mail оба не могут правильно установить адрес отправителя конверта, и затем не удается проверить, что попытки отправить почту были успешными. Взято вместе это может привести к тому, что почта из таких скриптов просто исчезнет.
Функция PHP mail ()
Функция mail () вызывается следующим образом:
bool mail (строка в, строка тема, строка сообщения [, строка additional_headers [, строка дополнительные_параметры]])
см. Http://www.php.net/manual/en/function.mail.php для подробностей.
Обратите внимание, что mail () возвращает истину, если ей удается отправить сообщение и false в случае ошибки. Вы должны писать свои страницы на примите это к сведению и, вероятно, извинитесь перед пользователем, если попытка отправки не удалась — невыполнение может привести к потере Сообщения.
Подходящие настройки error_reporting, display_errors и log_errors параметры в php.ini приведет к появлению сообщений в браузере пользователя и / или в журнале ошибок веб-сервера, если попытки отправить почту не удались. Использование это настоятельно рекомендуется, по крайней мере, при разработке сценариев, которые отправляют почта.
1) Под Unix
PHP, работающий под Unix, всегда использует sendmail команда для создания почтовых сообщений. Это будет работать только правильно ли настроена локальная почтовая система.Если нет, то это скорее всего создаст адрес отправителя конверта от пользователя под на котором запущен скрипт, и имя хоста компьютера. работает на. Это, вероятно, приведет к чему-то вроде [email protected], который вряд ли будет приемлемый адрес. Для пользователей программы передачи почты Exim: Тони Finch of the Computing Service имеет пример конфигурации, которая может подойдет для машины в университете — см. http://www-uxsup.csx.cam.ac.uk/~fanf2/conf4.спутниковое.
Возможная альтернатива — указать sendmail, какой адрес использовать в качестве отправитель конверта с параметром -f, например
-f [email protected]
Вы можете указать это либо с помощью 5-го (дополнительные_параметры) аргумент для mail () функцию, или установив параметр sendmail_path в вашем файл php.ini. Однако это обычно приводит к тому, что sendmail добавьте заголовок «X-Authentication-Warning:» в свое сообщение, отметив, что отправитель конверта был заблокирован — этого можно избежать, подходящая конфигурация почтовой системы, но это вне объем этого документа.
2) Под Windows
PHP, работающий под Windows, должен установить сетевое соединение на компьютер, на котором запущен почтовый сервер, для создания сообщения. Этот сервер может работать в той же системе, что и сценарий, но для большинства Коробки Windows их не будет. Системы в университете могут использовать центральный почтовый коммутатор, ppsw. cam, ac.uk, для этого цель. Есть два параметра, которые управляют этим, SMTP. который устанавливает имя используемого SMTP-сервера, и sendmail_from, который устанавливает адрес отправителя конверта, будет использован.Эти параметры могут быть установлены в php.ini (в этом случае они будут применяться по умолчанию ко всем скрипты) или с помощью функции ini_set (), чтобы установить их на в каждом конкретном случае.
Обратите внимание, что под Windows попытка отправить сообщение не удастся, если с выбранным почтовым сервером невозможно связаться. Хотя это необычно для ppsw.cam.ac.uk может быть недоступен, а сеть проблемы с подключением также могут привести к проблемам. Именно по этой причине, Разработчики Windows PHP обязательно должны проверить статус возврата из функцию mail () и выполните соответствующие действия после неудача.Каким должно быть это действие, будет зависеть от индивидуальный случай.
Узнайте о функции PHP Mail: освоение формы электронной почты PHP
Самый простой способ взаимодействия с вашими пользователями — заставить PHP отправлять электронные письма, используя специальные формы и почтовую функцию PHP. Основная идея заключается в том, что разработчик может создавать специальные формы электронной почты PHP для отправки писем прямо из скрипта.
Используя PHP mail (), вы можете, например, отправлять еженедельные информационные бюллетени или настроить свой почтовый ящик на получение сообщений об ошибках.Таким образом, функция предоставляет не только средства связи, но и настраиваемый журнал ошибок.
Функция почты PHP: основные советы
- Функция почты PHP позволяет отправлять электронные письма напрямую с помощью сценария PHP.
- Эта функция интегрирована в ядро PHP, но требует, чтобы в вашей системе была установлена работающая система электронной почты (которая должна быть определена в файле php.ini).
Параметры конфигурации среды выполнения
На поведение функции mail () PHP всегда влияют настройки, определенные внутри php.ini . В таблице ниже представлен список этих конфигураций среды выполнения, которые вы можете применить:
Имя | Значение по умолчанию | Описание | Сменный |
---|---|---|---|
mail. add_x_header | "0" | Эта функция используется для добавления X-PHP-Originating-Script, цель которого - включить UID скрипта, за которым следует имя файла. Может использоваться в PHP 5.3.0 и новее | PHP_INI_PERDIR |
почта.журнал | ПУСТО | Путь к файлу, который будет включать все предыдущие вызовы почтовой функции PHP. Этот журнал будет включать полный путь к каталогу файла сценария, номер строки, адрес получателя и требуемые заголовки. Может использоваться в PHP 5.3.0 и новее | PHP_INI_PERDIR |
SMTP | "localhost" | Только для Windows: DNS-имя или IP-адрес SMTP-сервера | PHP_INI_ALL |
smtp_port | "25" | Только для Windows: номер порта SMTP.Может использоваться в PHP 4.3.0 и новее | PHP_INI_ALL |
sendmail_from | ПУСТО | Только для Windows: укажите адрес From , который будет использоваться для отправки почты с помощью функции PHP mail () | PHP_INI_ALL |
sendmail_path | "/ usr / sbin / sendmail -t -i" | Укажите расположение программы sendmail. Эта директива также работает в Windows. Игнорирует SMTP, smtp_port и sendmail_from, если установлено. | PHP_INI_SYSTEM |
- Упрощенный дизайн (без лишней информации)
- Качественные курсы (даже бесплатные)
- Разнообразие функций
- Нанодипломные программы
- Подходит для предприятий
- Платные сертификаты об окончании
- Профессиональное обслуживание
- Гибкое расписание
- Разнообразие функций на выбор
- Профессиональные сертификаты об окончании
- Курсы университетского уровня
- Несколько программ онлайн-обучения
- Отличный пользовательский опыт
- Предлагает качественный контент
- Очень прозрачное ценообразование
- Бесплатные сертификаты о прохождении курса
- Ориентирован на навыки работы с данными
- Flex Расписание обучения ible
Функции для отправки электронной почты
В таблице ниже вы можете увидеть функции, которые вы можете использовать, если хотите, чтобы PHP отправлял электронное письмо:
Функция | Описание |
---|---|
ezmlm_hash () | Вычислить значение хеш-функции, требуемое EZMLM |
почта () | Разрешить отправку писем прямо из скрипта |
PHP mail Функция: сводка
- Используя встроенную функцию
mail ()
, вы можете отправлять электронные письма через свой PHP-скрипт. - Для правильной работы этой функции ваша система должна иметь установленную, работающую и определенную в php.ini почтовую систему.
Как отправлять почту с локального хоста XAMPP с помощью Gmail
XAMPP - это кроссплатформенный (X), Apache (A), MariaDB (M), PHP (P) и Perl (P). Разработчики должны создать локальный веб-сервер для целей тестирования или развертывания.
В рамках тестирования разработчикам необходимо рассылать электронные письма, которые всегда будут там, когда дело касается онлайн-бизнеса.
На отправьте почту с локального XAMPP с помощью Gmail , настройте XAMPP после его установки. Выполните следующие шаги для того же.
Шаги по отправке почты с локального хоста XAMPP с помощью Gmail:
- Откройте каталог установки XAMPP.
- Перейдите в C: \ xampp \ php и откройте файл php.ini.
- Найдите [функцию почты], нажав ctrl + f.
- Найдите и передайте следующие значения:
SMTP = smtp. gmail.com smtp_port = 587 sendmail_from = YourGmailId @ gmail.com sendmail_path = "\" C: \ xampp \ sendmail \ sendmail.exe \ "-t"
SMTP = smtp.gmail.com
smtp_port = 587
sendmail_from = [email protected]
sendmail = "\" C: \ xampp \ sendmail \ sendmail.exe \ "-t"
- Теперь перейдите в C: \ xampp \ sendmail и откройте файл sendmail.ini.
- Найдите [sendmail], нажав ctrl + f.
- Найдите и передайте следующие значения
smtp_server = smtp.gmail.com smtp_port = 587 error_logfile = error.log debug_logfile = debug.log [email protected] auth_password = Ваш-Gmail-пароль [email protected] (необязательно)
smtp_server = smtp.gmail.com
smtp_port = 587
error_logfile = error.log
debug_logfile =
debug_logfile =
debug_logfile =
debug_logfile =
debug_logfile =
debug_logfile =
debug_logfile =
com
auth_password = Your-Gmail-Password
force_sender=YourGmailId@gmail. com (необязательно)
Скрипт для отправки почты:
php $ to_email = "квитанция @ gmail.com "; $ subject = "Простой тест электронной почты через PHP"; $ body = "Привет, nn Это тестовое письмо, отправленное PHP-скриптом"; $ headers = "От: электронная почта отправителя"; if (mail ($ to_email, $ subject, $ body, $ headers)) { echo "Электронное письмо успешно отправлено на адрес $ to_email ..."; } else { echo "Не удалось отправить письмо ..."; }
Php $ subject = "Простая проверка электронной почты через PHP"; $ body = "Привет, н-н. Это тестовое письмо, отправленное с помощью скрипта PHP"; $ headers = "От: электронная почта отправителя"; if (mail ($ to_email, $ subject, $ body, $ headers)) { echo "Электронное письмо успешно отправлено на $ to_email... "; } else { echo" Ошибка отправки электронной почты ... "; } |
Примечание:
Настройте параметры« Менее безопасные приложения » как показано на https://support.