Авторизованная отправка писем с серверов виртуального UNIX-хостинга

В целях безопасности, на всех серверах виртуального UNIX-хостинга заблокированы исходящие соединения на 25 порт, поэтому необходимо использовать альтернативный номер порта, который нужно уточнить у владельца SMTP-сервера. Если отправка будет осуществляться через наш SMTP-сервер, используйте порт 26.

Пример авторизованной отправки почты с использованием smtp-сервера.


<?php

 $mhSmtpMail_Server     
"smtp.domain.tld";       // Укажите адрес SMTP-сервера
 
$mhSmtpMail_Port       "26";                  // Порт SMTP-сервера.
 
$mhSmtpMail_Username   "postmaster@domain.tld"// Имя почтового ящика (пользователя)
 
$mhSmtpMail_Password   "password";              // и пароль к нему.
 
$mhSmtpMail_From       "Имя отправителя";       // Имя отправителя в поле From

function MailSmtp($to$subject$message$headers)

{

  global 
$mhSmtpMail_Server$mhSmtpMail_Port$mhSmtpMail_Username$mhSmtpMail_Password;


  
$mhSmtpMail_localhost  "localhost";
  
$mhSmtpMail_newline    "\r\n";
  
$mhSmtpMail_timeout    "30";

  
$smtpConnect fsockopen($mhSmtpMail_Server$mhSmtpMail_Port$errno$errstr$mhSmtpMail_timeout);

  
$smtpResponse fgets($smtpConnect515);

  if(empty(
$smtpConnect))
    {
      
$output "Failed to connect: $smtpResponse";

      return 
$output;
    }
  else
    {
      
$logArray['connection'] = "Connected: $smtpResponse";
    }

  
fputs($smtpConnect,"AUTH LOGIN" $mhSmtpMail_newline);

  
$smtpResponse fgets($smtpConnect515);
  
$logArray['authrequest'] = "$smtpResponse";

  
fputs($smtpConnectbase64_encode($mhSmtpMail_Username) . $mhSmtpMail_newline);

  
$smtpResponse fgets($smtpConnect515);
  
$logArray['authmhSmtpMail_username'] = "$smtpResponse";

  
fputs($smtpConnectbase64_encode($mhSmtpMail_Password) . $mhSmtpMail_newline);

  
$smtpResponse fgets($smtpConnect515);
  
$logArray['authmhSmtpMail_password'] = "$smtpResponse";

  
fputs($smtpConnect"HELO $mhSmtpMail_localhost" $mhSmtpMail_newline);

  
$smtpResponse fgets($smtpConnect515);
  
$logArray['heloresponse'] = "$smtpResponse";

  
fputs($smtpConnect"MAIL FROM: $mhSmtpMail_Username" $mhSmtpMail_newline);

  
$smtpResponse fgets($smtpConnect515);
  
$logArray['mailmhSmtpMail_fromresponse'] = "$smtpResponse";

  
fputs($smtpConnect"RCPT TO: $to" $mhSmtpMail_newline);

  
$smtpResponse fgets($smtpConnect515);
  
$logArray['mailtoresponse'] = "$smtpResponse";

  
fputs($smtpConnect"DATA" $mhSmtpMail_newline);

  
$smtpResponse fgets($smtpConnect515);
  
$logArray['data1response'] = "$smtpResponse";

  
fputs($smtpConnect"Subject: $subject\r\n$headers\r\n\r\n$message\r\n.\r\n");


  
$smtpResponse fgets($smtpConnect515);
  
$logArray['data2response'] = "$smtpResponse";

  
fputs($smtpConnect,"QUIT" $mhSmtpMail_newline);

  
$smtpResponse fgets($smtpConnect515);
  
$logArray['quitresponse'] = "$smtpResponse";

}

?>

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

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


<?

if ($_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: Имя отправителя <postmaster@domain.tld>";

  
//  mail ($to, $subject, $message, $headers);
 
  
require_once "smtpauth.php";
  
MailSmtp ($to"=?windows-1251?B?".base64_encode($subject)."?="$message$headers);

}


?>

<form action="" method="post">
  <pre>
    To:   <input type="text" name="to">
    Subj: <input type="text" name="subj">

    Msg:  <input type="text" name="msg">
    <input type="submit" value="Send mail!" name="submit">
  </pre>
</form>    

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

  • 0 Пользователи нашли это полезным
Помог ли вам данный ответ?

Связанные статьи

Что такое PHP и как начать с ним работать

PHP: Hypertext Preprocessor — очень простой даже для начинающего веб-программиста...

Расширения файлов для PHP-скриптов, как добавить свое расширение

Интерпретатором PHP автоматически обрабатываются как PHP-сценарии файлы...

Отправка писем при помощи функции mail()

В следующим примере мы воспользуемся встроенной функцией mail(), где в качестве параметров,...

Ошибка форума phpBB: Critical error. Error creating new session

Данная неработоспособность связана с «дыркой» в самом форуме phpbb....

Проблемы работы функций strtoupper() и strtolower() с кириллицей

Проблемы при работе с кириллицей в PHP-скриптах функций strtoupper()...