Возврат % от покупок


Отправка почты на PHP через внешний SMTP с авторизацией

При оптимизации очередного проекта, доставшегося в наследство встал вопрос разгрузки сервера. В ходе анализа выяснилось, что сервер достаточно часто генерирует и отправляет через себя (через стандартную функцию mail() на php) большое количество уведомлений пользователям. Решение пришло само собой – сделать отправку через внешний STMP-сервер с аутентификацией.
Если своего сервера нет – можно воспользоваться любым, который позволяет это делать (их масса как платных, так и бесплатных)

<?php
#Адрес сервера
$SmtpServer="mail.artkiev.com";
#Адрес порта
$SmtpPort="25";
#Логин авторизации на сервера SMTP
$SmtpUser="username";
#Пароль авторизации на сервера SMTP
$SmtpPass="password";

#Класс работы с почтой
class SMTPClient
{
function SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body)
{
$this->SmtpServer = $SmtpServer;
$this->SmtpUser = base64_encode ($SmtpUser);
$this->SmtpPass = base64_encode ($SmtpPass);
$this->from = $from;
$this->to = $to;
$this->subject = $subject;
$this->body = $body;
if ($SmtpPort == "")
{
$this->PortSMTP = 25;
}
else
{
$this->PortSMTP = $SmtpPort;
}
}
function SendMail ()
{
if ($SMTPIN = fsockopen ($this->SmtpServer, $this->PortSMTP))
{
fputs ($SMTPIN, "EHLO ".$HTTP_HOST."\r\n");
$talk["hello"] = fgets ( $SMTPIN, 1024 );
fputs($SMTPIN, "auth login\r\n");
$talk["res"]=fgets($SMTPIN,1024);
fputs($SMTPIN, $this->SmtpUser."\r\n");
$talk["user"]=fgets($SMTPIN,1024);
fputs($SMTPIN, $this->SmtpPass."\r\n");
$talk["pass"]=fgets($SMTPIN,256);
fputs ($SMTPIN, "MAIL FROM: <".$this->from.">\r\n");
$talk["From"] = fgets ( $SMTPIN, 1024 );
fputs ($SMTPIN, "RCPT TO: <".$this->to.">\r\n");
$talk["To"] = fgets ($SMTPIN, 1024);
fputs($SMTPIN, "DATA\r\n");
$talk["data"]=fgets( $SMTPIN,1024 );
fputs($SMTPIN, "To: <".$this->to.">\r\nFrom: <".$this->from.">\r\nSubject:".$this->subject."\r\n\r\n\r\n".$this->body."\r\n.\r\n");
$talk["send"]=fgets($SMTPIN,256);
fputs ($SMTPIN, "QUIT\r\n");
fclose($SMTPIN);
}
return $talk;
}
}

if($_SERVER["REQUEST_METHOD"] == "POST")
{
$to = $_POST['to'];
$from = $_POST['from'];
$subject = $_POST['sub'];
$body = $_POST['message'];
$SMTPMail = new SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body);
$SMTPChat = $SMTPMail->SendMail();
}
?>

Пример простенькой формы для тестирования отправки:

<form method="post" action="">
Куда:<input type="text" name="to" />
Откуда:<input type='text' name="from" />
Тема:<input type='text' name="sub" />
Сообщение :<textarea name="message"></textarea>
<input type="submit" value="Отправить " />
</form>

Другие публикации:



Написать комментарий через:

 
               
  • Локальный блог
  •  
 

Ваш отзыв

Имя *

Почта (скрыта) *

Сайт

Напишите цифрами двa вoceмь двa *

Сообщение

Отзывов (4) на «Отправка почты на PHP через внешний SMTP с авторизацией»

  1. Ыукпун пишет:

    Ошибку в этой строке выдаёт ((
    fputs ($SMTPIN, “EHLO “.$HTTP_HOST.”\r\n”);

  2. jhonny99 пишет:

    Я для отправки почты(с вложениями) использую RichText Mailer

  3. Виктор пишет:

    Я использовал PHPMailer, и лог подробный показывает если нужно и с SSL работает без проблем.

 
Статусы для соц.сетей на ArtKiev Design Studio