A PHP Error was encountered

Severity: 8192

Message: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead.

Filename: mysql/mysql_driver.php

Line Number: 303

Отправка письма из PHP используя SMTP (c вложением)

Отправка письма из PHP используя SMTP (c вложением)

Автор: Mowshon.
Опубликовано 12 ноября 2011
в рубрике PHP, Примеры

Просмотров: 7548.
Подписаться на комментарии по RSS.

Отправка письма из PHP используя SMTP (c вложением)

В PHP достаточно популярно использовать скрипты которые автоматизируют процесс отправки писем. В данной статье мы рассмотрим простой скрипт который выполняем отправку писем на почту получателей по средствам SMTP(Simple Mail Transfer Protocol). Было бы слишком просто ограничится только этим функционалом, скрипт поддерживает и вложения то есть, вы сможете прикрепить pdf, txt или doc файл в своем письме.

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

Скрипт работает с классом 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

  1. Егор | 01.02.2012 в 20:21:39 | #1

    Спасибо, чувак выручил.

  2. Рита | 08.04.2012 в 16:33:13 | #2

    А как с кодировкой справится? у меня вместо сообщения абракадабра приходит

    и еще почему то на mail почту вообще не приходят сообщения, не подскажите почему

  3. Рита | 08.04.2012 в 16:54:53 | #3

    с кодировкой справилась а вот что на mail не отправляет нет

  4. Mowshon | 08.04.2012 в 17:16:48 | #4

    Рита, Возможно вы указали неправильные данные в массиве $SenderConfig.

    Если же скрипт работает на хостинге, может быть, что хостинг запрещает отправку почты с smtp.

  5. Рита | 08.04.2012 в 18:33:05 | #5

    Mowshon на yandex.ru и rambler.ru отправляет

    а на mail.ru и gmail.com нет

  6. Mowshon | 08.04.2012 в 19:37:44 | #6

    Если не приходят сообщения, возможно что IP или почта с которой вы отправляете письмо находится в SPAM базе mail.ru и gmail. Попробуйте с нового ящика который зарегистрирован на mail.ru отправлять письма.

  7. Рита | 09.04.2012 в 07:18:24 | #7

    похоже дело было в хостере в его smtp-почте

    попробовала использовать smtp-почту yandex и все получилось

    так что спасибо за скрипт wink

  8. Mowshon | 10.04.2012 в 00:47:29 | #8

    Рита, рад что он Вам пригодился. smile Надеюсь описанное Вами решение проблемы поможет другим у которых схожая проблема с smtp.

  9. Артем | 19.05.2012 в 17:39:23 | #9

    Не пойму вроде отправляет а письмо не приходит.

    А путь к файйлу который на сервере?

  10. Комментатор 33 | 09.06.2012 в 10:27:05 | #10

    Всех приветствую, очень интересная статья. Вот только возник у меня вопрос. Когда отправляешь письма, в почтовом ящике отображается мой email, а как можно его заменить на другое название, например "письмо"?

  11. Алексей | 04.11.2012 в 15:34:06 | #11

    Добрый день!

    Отличный скрипт, спасибо большое!

    Но есть одно НО. Если я делаю настройки через smtp.mail.ru, - всё работает отлично. А вот у нас в организации, где я работаю, стоит почтовый сервер MS Exchange и никаким образом я на него этот почтовый класс не могу настроить((

    Ну и сопсна вопрос: как настроить этот скрипт на Exchange?

Оставьте комментарий!

Гость
Комментатор / хотите им стать

Чтобы стать комментатором введите email и пароль. Напишите комментарий. В дальшейшем ваша связка email-пароль, позволит вам комментировать и редактировать свои данные. Не забудьте про активацию (инструкция придет на ящик, указанный при регистрации).

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

(обязательно)