Отправка письма из PHP используя SMTP (c вложением)
Просмотров: 18077.
Подписаться на комментарии по RSS.
Настройка скрипта довольно проста, от вас требуется только данные отправителя логин, пароль от электронной почты с которого будут отправляться письма.
Скрипт работает с классом km_smtp_class.php, класс хорош тем, что поддерживает разные протоколы SSL и TLS которые предоставляют защищенную передачу данных.
Вот и сам скрипт:
<?php /** * Отправка почты через PHP (SMTP) * Сделано в Live-code.ru * Автор: Mowshon * Дата: 11.11.11 */ // Подключаем SMTP класс для работы с почтой include_once('km_smtp_class.php'); // Конфигурационный массив $SenderConfig = array( "SMTP_server" => "smtp.mail.ru", "SMTP_port" => "25", "SMTP_email" => "user@mail.ru", "SMTP_pass" => "1111111", "SMTP_type" => "null" ); // Email получателя $Receiver = "admin@yahoo.com"; // Тема сообщения $Subject = "Отправляем письмо из PHP"; // Текст сообщения (в HTML) $Text = "Привет!<br /> Сообщение отправлено из скрипта <strong>Mowshon</strong> Сайт: http://live-code.ru"; // Вложение в письме - адрес к файлу $Attachment = ''; /* $mail = new KM_Mailer(сервер, порт, пользователь, пароль, тип); */ /* Тип может быть: null, tls или ssl */ $mail = new KM_Mailer($SenderConfig['SMTP_server'], $SenderConfig['SMTP_port'], $SenderConfig['SMTP_email'], $SenderConfig['SMTP_pass'], $SenderConfig['SMTP_type']); if($mail->isLogin) { // Прикрепить файл if($Attachment) {$mail->addAttachment($Attachment);} // Добавить ещё получателей $mail->addRecipient('user@mail.ru'); $mail->addRecipient('user@yandex.ru'); /* $mail->send(От, Для, Тема, Текст, Заголовок = опционально) */ $SendMail = $mail->send($SenderConfig['SMTP_email'], $Receiver, $Subject, $Text); // Очищаем список получателей $mail->clearRecipients(); $mail->clearCC(); $mail->clearBCC(); $mail->clearAttachments(); } else { echo "Возникла ошибка во время подключения к SMTP-серверу"; } ?>
Настройка скрипта лежим в основном на массиве $SenderConfig, тут мы должны указать SMTP:сервер, порт, логин и пароль от электронной почты. Опишем каждый ключ массива:
SMTP_server - адрес SMTP сервера (индивидуальный адрес для разных почт)
Почта Mail.ru: smtp.mail.ru порт: 25, 587 и 465 (с шифрованием SSL)
Почта Yandex: smtp.yandex.ru порт: 25, 587 465 (SSL порт)
Почта Rambler: mail.rambler.ru порт: 25, 587 465 (SSL порт)
Почта Yahoo: smtp.mail.yahoo.com SSL-порт: 465
(Если понадобится адрес smtp серверов которые нет в списке - пишите в комментариях)
SMTP_port - Мы его сверху уже описали для каждого smtp сервера.
SMTP_email - точнее было бы user но для ясности написал email, указываем адрес электронной почты.
SMTP_pass - Пароль от электронной почты которая была указана как значение в ключе SMTP_email
SMTP_type - По умолчанию NULL. Протокол по которому будут отправлены письма. Протоколы: SSL и TLS
Вложения в письмо можно добавить просо указывая полный адрес к файлу в переменную $Attachment (/var/patch/to/file/File.pdf)
Если будут вопросы пишите их в комментариях ниже.
Комментариев: 11
Спасибо, чувак выручил.
А как с кодировкой справится? у меня вместо сообщения абракадабра приходит
и еще почему то на mail почту вообще не приходят сообщения, не подскажите почему
с кодировкой справилась а вот что на mail не отправляет нет
Рита, Возможно вы указали неправильные данные в массиве $SenderConfig.
Если же скрипт работает на хостинге, может быть, что хостинг запрещает отправку почты с smtp.
Mowshon на yandex.ru и rambler.ru отправляет
а на mail.ru и gmail.com нет
Если не приходят сообщения, возможно что IP или почта с которой вы отправляете письмо находится в SPAM базе mail.ru и gmail. Попробуйте с нового ящика который зарегистрирован на mail.ru отправлять письма.
похоже дело было в хостере в его smtp-почте
попробовала использовать smtp-почту yandex и все получилось
так что спасибо за скрипт
Рита, рад что он Вам пригодился.
Надеюсь описанное Вами решение проблемы поможет другим у которых схожая проблема с smtp.
Не пойму вроде отправляет а письмо не приходит.
А путь к файйлу который на сервере?
Всех приветствую, очень интересная статья. Вот только возник у меня вопрос. Когда отправляешь письма, в почтовом ящике отображается мой email, а как можно его заменить на другое название, например "письмо"?
Добрый день!
Отличный скрипт, спасибо большое!
Но есть одно НО. Если я делаю настройки через smtp.mail.ru, - всё работает отлично. А вот у нас в организации, где я работаю, стоит почтовый сервер MS Exchange и никаким образом я на него этот почтовый класс не могу настроить((
Ну и сопсна вопрос: как настроить этот скрипт на Exchange?