Вернуться   SEO форум - оптимизация и продвижение сайтов > Web разработки > Программирование

Важная информация
Программирование - PHP, MySQL, JavaScript, CSS, HTML верстка и т.д.

Ответ
 
Опции темы Рейтинг: Рейтинг темы: голосов - 2, средняя оценка - 3.00. Опции просмотра
Старый 17.10.2015, 19:19   #1
 
Аватар для jazbass
 
Сообщений: 526
FR (активность): 17,427

Доп. информация
По умолчанию Автор темы PHP-скрипт отправки почты с сайта через SMTP на основе PHPMailer

Всем бобра и наше вам с кисточкой!

Все мы знаем чудную функцию в PHP по имени mail(), которая прекрасно справляется с сабжевой задачей без лишних сложностей. Но сложностям, как известно, характерно появляться из самых неожиданных мест. В моем случае, под эгидой борьбы со спамом, многие российские хостинг-провайдеры начали "...не гарантировать корректную отправку почту при использовании функции mail()...". Что в переводе с провайдерского на русский означает: дырку от бублика вы получите, а не почту.

Поскольку неистовые клиенты по-прежнему давят кнопку "Отправить заказ", а владельцам коммерческих сайтов нововведения хостеров глубоко по-барабану, и назрела актуальность отправки почты через протокол SMTP, который позволяет обрести независимость от придури провайдеров.




За основу метода был взят PHPMailer, морально устаревший, но еще вполне себе живой и работоспособный. После чего к нему был прикручен нижеследующий конфигурационный и управляющий скрипт, который пересылает все данные из заполненной формы, после нажатия кнопули "Отправить" на указанный адрес электронной почты.

Последовательность установки скрипта.

1. Скачиваем (в аттаче) модули PHPMailer, разархивируем и копируем их в папку /phpmailer в корне сайта.

2. В html-коде страницы с формой обратной связи прописываем имя файла с управляющим скриптом и метод передачи данных через адресную строку.
Разумеется код формы на каждом сайте будет свой, но для наглядности приведу простой пример (опции выделены красным):
Код:
<form name="Zaiavka_na_koncultaciu" method="post" action="zvonok.php" enctype="multipart/form-data" accept-charset="UTF-8" id="indexForm1" onsubmit="return ValidateZaiavka_na_koncultaciu2(this)">
 </form>
3. В корне сайта формируем конфигурационно-управляющий скрипт. В данном примере zvonok.php. И после его настройки - вауля, все работает!

Код конфигурационно-управляющего PHP-скрипта с комментариями по настройке

Код:
<?php
    // прием данных из формы
    
    function array_map_pairs($arr) {
	return array_map(function($k, $v) { return "$k: $v"; }, array_keys($arr), $arr);
    }

    if ($_SERVER['REQUEST_METHOD'] == 'POST' && $_POST) 
   {

	$message123 = implode("\n", array_map_pairs($_POST));
    
date_default_timezone_set('Etc/UTC');

//Подгружаем PHPMailer
require 'phpmailer/PHPMailerAutoload.php';

//Создаем массив данных для отправки
$mail = new PHPMailer;

$mail->setLanguage('ru', '/');


$mail->CharSet = 'UTF-8';

$mail->isSMTP();

//Выбор режима отладки
// 0 = Выключено (только для полностью настроенного скрипта)
// 1 = Сообщения клиента
// 2 = Сообщения клиента и сервера
$mail->SMTPDebug = 0;

$mail->Debugoutput = 'html';

//Адрес smtp используемого почтового сервера. Например, для mail.ru это будет smtp.mail.ru
$mail->Host = 'smtp.mail.ru';

//Номер порта для SMTP. Например, для TLS чаще всего используется порт 587
$mail->Port = 587;

//Выбор метода шифрования ssl (устаревший) или  tls
$mail->SMTPSecure = 'tls';

$mail->SMTPAuth = true;

//Имя пользователя для SMTP-аутентификации. Используйте полный адрес e-mail
$mail->Username = "mymail@mail.ru";

//Пароль для SMTP-аутентификации
$mail->Password = "*********";

//Данные поля письма "От кого"
$mail->setFrom('mymail@mail.ru', 'Менеджер сайта ПродамВсе');

//Альтернативный адрес для ответа
$mail->addReplyTo('mymail2@mail.ru', 'Иван Петров');

//Адрес получателя письма
$mail->addAddress('sento@mail.ru', 'Прием Бабла у Населения');

//Тема письма
$mail->Subject = 'Кто-то хочет дать бабла';

//Формирование тела письма (ничего менять не надо)
$mail-> msgHTML ($message123);

$mail->AltBody = 'This is a plain-text message body';

//Проверка на ошибки отправки
if (!$mail->send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
} else {
//Если отправка прошла успешно, переводим пользователя на указанный url
 	Header("Location: mysite.ru/ok.html");
}


	exit;
    }

    die("Error!");
Как видите, ничего сверхсложного здесь нет. Буду рад, если хотя бы единожды, эта скриптуля кому-нить окажется полезной.
Вложения
Тип файла: zip phpmailer.zip (72.1 Кб, 73 просмотров)
kribs, MVS и Серго777: сообщение полезно
jazbass вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
"Спасибо" от:
Alex LM (17.10.2015),  MVS (17.10.2015)
Старый 13.05.2017, 22:02   #2
 
Аватар для p3285218
 
Сообщений: 2
FR (активность): 10

Доп. информация
По умолчанию PHP-скрипт отправки почты с сайта через SMTP на основе PHPMailer

Полезный скрипт, заработал в один клик. Кодировка писем хромает.
p3285218 вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Старый 17.05.2017, 08:17   #3
 
Аватар для sQanner
 
Сообщений: 3
FR (активность): 53

Доп. информация
По умолчанию

Рассмотрите возможность подключить Mailgun или Mandrill. Отправляя письма через них вероятность попасть в папку СПАМ ниже чем через стандартный php mailer
sQanner вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Старый 17.05.2017, 20:04   #4
 
Аватар для cthulchu
 
Сообщений: 3,640
FR (активность): 106,262

Доп. информация
По умолчанию

Ну ок, я понимаю, что сокеты не всем даны, но ajax-то всем доступен. Джейсончиком аккуратненько передал туда письмо, назад результат и при негативном результате подробности в консольку. Чтоб как у людей.

В общем, для села неплохо, но в городе такое не пройдет. Перезагружать страницу при отправке письма с нее причин обьективных нету, а в нашем веке это еще и испугает пользователя.
cthulchu вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Старый 22.05.2017, 09:52   #5
 
Аватар для p3285218
 
Сообщений: 2
FR (активность): 10

Доп. информация
По умолчанию

Имелось ввиду, где и что дописать для исправления кодировки. Неплохо и прикрутить к этому скрипту отправку файлов. Тогда и "спасибо" можно отправить. Как-то так.
p3285218 вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Старый 22.05.2017, 10:08   #6
 
Аватар для cthulchu
 
Сообщений: 3,640
FR (активность): 106,262

Доп. информация
По умолчанию

да есть универсальные скрипты на гите для этого полюбому.

https://www.google.com/search?q=php+...ite:github.com
cthulchu вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Старый 18.10.2017, 21:50   #7
 
Аватар для nicfeer
 
Сообщений: 7
FR (активность): 40

Доп. информация
По умолчанию

В файл zvonok.php первой строчкой написать
<?php header('Content-Type: text/html; charset= utf-8'); ?>
и сохранить сам файл в кодировке UTF 8 без bom и всё будет нормально с кодировкой
nicfeer вне форума  
Ответить с цитированием Сказать Плохо за это бесполезное сообщение Быстрый ответ на это сообщение
Ответ

Метки
php-скрипт, отправка почты smtp, функция mail

Быстрый ответ
Ваше имя пользователя: Регистрация. Для входа нажмите здесь
Случайный вопрос

Сообщение:
Опции


Опции темы
Опции просмотра Оценка этой теме
Оценка этой теме:

Ваши права в разделе
Вы не можете создавать новые темы
Вы можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание функции для отправки изображений с почты. 30698963 Разработка сайтов 3 09.08.2015 15:30
Создание функции для отправки изображений с почты. то возьмется и сколько денег? 30698963 Программирование 1 26.01.2015 14:20
[ Ищу ] скрипт/плагин для отправки сообщения gidroballon Программирование 1 26.03.2013 07:55
Скрипт для отправки e-mail Doka Создание сайтов другого типа 3 18.03.2009 11:11

Текущее время: 02:54. Часовой пояс GMT +3.