Php smtp auth mail

Авторизованная отправка почты с серверов виртуального хостинга

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

Как отправлять письма, используя PHP?

С помощью любого класса PHP, поддерживающего авторизацию на smtp-сервере . Например, можно использовать набор классов PHPMailer.

Также вы можете воспользоваться нашим примером, в котором реализована отправка писем с использованием smtp-сервера , для которого требуется авторизация. Поэтому не забудьте добавить в скрипт соответствующие реквизиты доступа, например:

 // Если нужно показать лог SMTP-сессии, то можно раскомментировать следующую строчку. // $_SERVER['debug'] = true; function MailSmtp($reciever, $subject, $content, $headers, $debug = 0)  $smtp_server = 'smtp.masterhost.ru'; // адрес SMTP-сервера $smtp_port = 25; // порт SMTP-сервера $smtp_user = 'user@domen.ru'; // Имя пользователя для авторизации на SMTP-сервере $smtp_password = 'pAsSwORd'; // Пароль для авторизации на SMTP-сервере $mail_from = 'frommailbox@domen.ru'; // Ящик, с которого отправляется письмо $sock = fsockopen($smtp_server,$smtp_port,$errno,$errstr,30); $str = fgets($sock,512); if (!$sock)  printf("Socket is not created\n"); exit(1); > smtp_msg($sock, "HELO " . $_SERVER['SERVER_NAME']); smtp_msg($sock, "AUTH LOGIN"); smtp_msg($sock, base64_encode($smtp_user)); smtp_msg($sock, base64_encode($smtp_password)); smtp_msg($sock, "MAIL FROM:  . $mail_from . ">"); smtp_msg($sock, "RCPT TO:  . $reciever . ">"); smtp_msg($sock, "DATA"); $headers = "Subject: " . $subject . "\r\n" . $headers; $data = $headers . "\r\n\r\n" . $content . "\r\n."; smtp_msg($sock, $data); smtp_msg($sock, "QUIT"); fclose($sock); > function smtp_msg($sock, $msg) < if (!$sock)  printf("Broken socket!\n"); exit(1); > if (isset($_SERVER['debug']) && $_SERVER['debug'])  printf("Send from us: %s", nl2br(htmlspecialchars($msg))); > fputs($sock, "$msg\r\n"); $str = fgets($sock, 512); if (!$sock)  printf("Socket is down\n"); exit(1); > else < if (isset($_SERVER['debug']) && $_SERVER['debug'])  printf("Got from server: %s", nl2br(htmlspecialchars($str))); > $e = explode(" ", $str); $code = array_shift($e); $str = implode(" ", $e); if ($code > 499)  printf("Problems with SMTP conversation.Code %d.Message %s", $code, $str); exit(1); > > > ?>

Скачать пример готового скрипта с функцией MailSmtp(): smtpauth.php.sample

Использовать описанную выше функцию MailSmtp() можно для прямой замены функции mail(), рассмотрим пример самой простой формы на PHP:

 if (isset($_POST['submit']))  $to = $_POST['to']; $subject = $_POST['subj']; $message = $_POST['msg']; // Заголовки сообщения, в них определяется кодировка сообщения, поля From, To и т.д. $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html; charset=windows-1251\r\n"; $headers .= "To: $to\r\n"; $headers .= "From: Имя отправителя "; // mail ($to, $subject, $message, $headers); require_once "smtpauth.php"; MailSmtp ($to, $subject, $message, $headers); > ?>  
Кому: Тема: Текст: 

Для того, чтобы данная форма заработала без функции mail(), мы включили файл smtpauth.php через require_once и вызвали функцию MailSmtp(), описанную в нем, с аналогичными для mail() аргументами. При этом сам вызов mail() мы закомментировали в коде, чтобы избежать ошибки при выполнении скрипта.

Как отправлять письма, используя ASP.NET?

Если вы используете версию 2.0, то используя класс MailMessage (используется пространство имен System.Net.Mail), хорошо описанный здесь.

Ниже приведены примеры его использования для языков «C#» и «VisualBasic»:

Пример для языка «C#»:

   // создание нового письма message.To.Add ("user@tomail.tld"); // добавление адреса получателя message.From = new MailAddress("from@domain.tld", "Имя_отправителя"); // указание имени и адреса отправителя message.Subject = "Тема письма"; // указание темы письма message.BodyEncoding = System.Text.Encoding.UTF8; // указание кодировки письма message.IsBodyHtml = false; // указание формата письма (true - HTML, false - не HTML) message.Body = "Текст письма"; // указание текста (тела) письма SmtpClient client = new SmtpClient("smtp.masterhost.ru",25); // создание нового подключения к серверу "smtp.masterhost.ru" client.DeliveryMethod = SmtpDeliveryMethod.Network; // определяет метод отправки сообщений client.EnableSsl = false; // отключает необходимость использования защищенного соединения с сервером client.UseDefaultCredentials = false; // отключение использования реквизитов авторизации "по-умолчанию" client.Credentials = new NetworkCredential("postmaster@domain.tld", "***password***"); // указание нужных реквизитов (имени пользователя и пароля) для авторизации на SMTP-сервере client.Send(message); // отправка сообщения %>

Скачать пример готовой формы, демонстрирующей использование данного метода: MailForm.aspx.

Пример для языка «VisualBasic»:

   ' объявление нового объекта типа "MailMessage" smtpMssg.From = New MailAddress ("admin@domain.tld", "Имя_отправителя") ' указание имени и адреса отправителя smtpMssg.To.Add ("user@tomail.tld") ' добавление адреса получателя smtpMssg.Subject = "Тема письма" ' указание темы письма smtpMssg.Body = "Текст письма" ' указание текста (тела) письма smtpMssg.BodyEncoding = System.Text.Encoding.UTF8 ' указание кодировки письма smtpMssg.IsBodyHtml = false ' указание формата письма (true - HTML, false - не HTML) Dim SmtpMail As New SmtpClient("smtp.masterhost.ru", 25)' объявление нового объекта типа "SmtpClient" SmtpMail.DeliveryMethod = SmtpDeliveryMethod.Network ' указание метода доставки письма SmtpMail.UseDefaultCredentials = False ' отключение использования реквизитов авторизации "по-умолчанию" SmtpMail.EnableSsl = False ' отключает необходимость использования защищенного соединения с сервером SmtpMail.Credentials = new NetworkCredential("postmaster@domain.tld", "***password***") ' указание нужных реквизитов (имени пользователя и пароля) для авторизации на SMTP-сервере SmtpMail.Send(smtpMssg) ' отправка сообщения %>

Также существует устаревший (и не рекомендуется к использованию) класс SmtpMail (используется пространство имен System.Web.Mail). Ниже приведен пример его использования для языка «VisualBasic»:

   ' объявление нового объекта типа "MailMessage" smtpMssg.From = "Имя_отправителя domain.tld>" ' указание имени и адреса отправителя smtpMssg.To = "admin@domain.tld" ' указание адреса получателя smtpMssg.BodyFormat = MailFormat.Text ' указание формата письма smtpMssg.BodyEncoding = Encoding.UTF8 'указание кодировки письма smtpMssg.Subject = "Тема письма" ' указание темы письма smtpMssg.Body = "Текст письма" ' указание текста письма smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",1) ' указание необходимости SMTP-авторизации на сервере smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "admin@domain.tld") ' имя пользователя для авторизации smtpMssg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "***password***") ' пароль для авторизации SmtpMail.SmtpServer = "smtp.masterhost.ru" ' указание адреса SMTP-сервера SmtpMail.Send(smtpMssg) ' отправка сообщения %> 

Как отправлять письма, используя ASP?

Обратите внимание, что при использовании нашего smtp-сервера требуется авторизация, поэтому не забудьте добавить в скрипт соответствующие реквизиты доступа, например:

domain.tld" .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password" .Update End With Set cdoMessage = CreateObject("CDO.Message") With cdoMessage Set .Configuration = iConfig .From = "Test user domain.tld>" .To = "User " .Subject = "Hello, User" .TextBody = "I write this message from ASP script." .Send End With Set cdoMessage = Nothing Set iConfig = Nothing %>

Некоторые CMS уже имеют встроенные средства для отправки корреспонденции или соответствующие модули, рассмотрим самые популярные из них.

WordPress

Для данной CMS существует специальный модуль «WP Mail SMTP», пример его конфигурации описан на странице модуля.

Обратите внимание на иллюстрацию в примере, в условиях нашей почтовой системы требуется использовать 25-й порт и SSL-шифрование не требуется.

Joomla

В панели администрирования перейдите в раздел «Общие настройки», выберете вкладку «Сервер». В поле «Почта» требуется выбрать способ отправки как « SMTP-сервер », в полях «Адрес SMTP-сервера » и « SMTP-логин » и « SMTP-пароль » укажите соответствующие реквизиты почтовой системы, например: smtp.masterhost.ru, ящик@ваш_домен и соответствующий пароль.

Подробнее вы можете прочитать в документации к данной CMS.

Drupal

Эта CMS так же имеет собственный модуль для работы с SMTP-сервером , основанный на базе PHPMailer. Загрузить данный модуль можно на его странице на сайте CMS Drupal, описание установки модуля доступно в архиве с ним.

NetCat

Данная CMS не имеет встроенных функций для работы с SMTP-сервером . Для отправки почты скриптами сайта мы можем предложить использовать наше решение, для его подключения необходимо выполнить следующие действия:

  • Скачать с нашего сайта архив с необходимыми файлами (send_auth_mail.php и mail.inc.php) и распаковать его на компьютере;
  • Отредактировать файл send_auth_mail.php из архива, указав в нём реквизиты подключения к нужному SMTP-серверу:
    • $mail_smtpServer = "smtp.masterhost.ru"; (адрес SMTP-сервера )
    • $mail_port = "25"; (порт для подключения)
    • $mail_username = "mail@domain.tld"; (имя пользователя для авторизации на SMTP-сервере )
    • $mail_password = "Password"; (пароль для авторизации на SMTP-сервере )

    domain.tld следует заменить на имя вашего домена.

    Предлагаемое решение работает со всеми модулями NetCat, которые используют стандартные функции данной CMS для отправки почты.

    Источник

    Отправка писем через SMTP на PHP

    Некоторое время назад, я заметил, что письма, отправляемые с моего сервера, перестали доходить до адресата. Редко, попадали в папку Спам, чаще совсем не доходили. Сразу было понятно, что проблема в функции mail();

    Пути решения было два: Читать много мануалов и настраивать сервак так, чтобы функция mail() корректно отправляла всю корреспонденцию или отправлять письма через SMTP. Как вы понимаете, путь я выбрал второй.

    $config [ 'smtp_debug' ] = true ; //Если Вы хотите видеть сообщения ошибок, укажите true вместо false

    $config [ 'smtp_from' ] = 'МегаСервис' ; //Ваше имя - или имя Вашего сайта. Будет показывать при прочтении в поле "От кого"

    $SEND . = 'Subject: =?' . $config [ 'smtp_charset' ] . '?B?' . base64_encode ( $subject ) . "=?=\r\n" ;

    $SEND . = "From: \"=?" . $config [ 'smtp_charset' ] . "?B?" . base64_encode ( $config [ 'smtp_from' ] ) . "=?=\" <" . $config [ 'smtp_username' ] . ">\r\n" ;

    if ( ! $socket = fsockopen ( $config [ 'smtp_host' ] , $config [ 'smtp_port' ] , $errno , $errstr , 30 ) )
    if ( $config [ 'smtp_debug' ] ) echo '

    Не могу отправить HELO!

    ' ;
    if ( $config [ 'smtp_debug' ] ) echo '

    Не могу найти ответ на запрос авторизаци.

    ' ;
    if ( $config [ 'smtp_debug' ] ) echo '

    Логин авторизации не был принят сервером!

    ' ;
    if ( $config [ 'smtp_debug' ] ) echo '

    Пароль не был принят сервером как верный! Ошибка авторизации!

    ' ;
    if ( $config [ 'smtp_debug' ] ) echo '

    Не могу отправить комманду MAIL FROM:

    ' ;
    if ( $config [ 'smtp_debug' ] ) echo '

    Не могу отправить комманду RCPT TO:

    ' ;
    if ( $config [ 'smtp_debug' ] ) echo '

    Не могу отправить комманду DATA

    ' ;
    if ( $config [ 'smtp_debug' ] ) echo '

    Не смог отправить тело письма. Письмо не было отправленно!

    ' ;
    if ( $config [ 'smtp_debug' ] ) echo "

    Проблемы с отправкой почты!

    $response
    $line
    " ;
    if ( $config [ 'smtp_debug' ] ) echo "

    Проблемы с отправкой почты!

    $response
    $line
    " ;

    Использовать её можно так-же как и обычную функцию mail:

    smtpmail ( 'Имя получателя' , 'email-получателя@mail.ru' , 'Тема письма' , 'HTML или обычный текст письма' ) ;

    Сколько писем можно отправлять с бесплатных (SMTP) почтовых ящиков?

    1. mail.ru — не более 1 письма в минуту
    2. yandex.ru — не более 150 писем в сутки, не более 25 адресатов в одном письме
    3. gmail.com, tut.by — не более 500 писем в сутки (хотя в справке гугла фигурирует 2000), не более 500 получателей в одном письме за раз при отправке через интерфейс gmail.com (через web-интерфейс, т.е. при входе через браузер), не более 100 получателей в одном письме за раз при отправке через ваш почтовый клиент
    4. rambler.ru — не более 200 писем в час
    5. ukr.net — не более 250 писем в сутки
    6. meta.ua — не более 200 писем в сутки
    7. aol.com — не более 500 писем в сутки
    8. lycos.com — не более 250 писем в сутки

    Рекомендую отправлять количества писем на 20-30 % меньше лимита.

    Gmail может заблокировать (первый раз на сутки) ваш аккаунт и при меньшем чем 500 числе адресатов в письме. Очень важно, чтобы адреса были живые, работающие. При нескольких десятках мертвых адресов в одном письме c gmail вероятность блокировки очень велика.

    Источник

    Читайте также:  Wp config php код
Оцените статью