Email: Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Понедельник, 20 Август 2018 20:41

PHP скрипт отправки почты через SMTP SSL mail.ru

Выкладываю для общего пользования пример PHP-скрипта для отправки почты через SMTP ssl mail.ru

 

<?php
function get_data($smtp_conn)
{
  $data="";
  while($str = fgets($smtp_conn,515)) 
  {
    $data .= $str;
    if(substr($str,3,1) == " ") { break; }
  }
  return $data;
}
 
$header="Date: ".date("D, j M Y G:i:s")." +0700\r\n"; 
$header.="From: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode('ВашеИмя')))."?= <ВашаПочта@mail.ru>\r\n"; 
$header.="X-Mailer: The Bat! (v3.99.3) Professional\r\n"; 
$header.="Reply-To: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode('ВашеИмя')))."?= <ВашаПочта@mail.ru>\r\n";
$header.="X-Priority: 3 (Normal)\r\n";
$header.="Message-ID: <172562218.".date("YmjHis")."@mail.ru>\r\n";
$header.="To: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode('ИмяПолучателя')))."?= <АдресПолучателя@gmail.com>\r\n";
$header.="Subject: =?windows-1251?Q?".str_replace("+","_",str_replace("%","=",urlencode('проверка')))."?=\r\n";
$header.="MIME-Version: 1.0\r\n";
$header.="Content-Type: text/plain; charset=windows-1251\r\n";
$header.="Content-Transfer-Encoding: 8bit\r\n";
 
 
$text="привет, проверка связи.";
 
$smtp_conn = fsockopen("ssl://smtp.mail.ru", 465,$errno, $errstr, 10);
$data = get_data($smtp_conn);
 
$code = substr($data,0,3);
print 'Connection:'.$data;
print '<br>';
 
fputs($smtp_conn,"EHLO mail.ru\r\n");
$data = get_data($smtp_conn);
 
$test='qwe';
 
$code = substr($data,0,3);
echo 'EHLO:'.$data;
print '<br>';
 
fputs($smtp_conn,"AUTH LOGIN\r\n");
$data = get_data($smtp_conn);
 
$code = substr($data,0,3);
echo 'AUTH:'.$data;
print '<br>';
 
fputs($smtp_conn,base64_encode("ВашаПочта@mail.ru")."\r\n");
$data = get_data($smtp_conn);
 
$code = substr($data,0,3);
echo $data;
print '<br>';
 
fputs($smtp_conn,base64_encode("ВашПароль")."\r\n");
$data = get_data($smtp_conn);
 
$code = substr($data,0,3);
echo 'pass:'.$data;
print '<br>';
 
fputs($smtp_conn,"MAIL FROM:ВашаПочта@mail.ru\r\n");
$data = get_data($smtp_conn);
 
$code = substr($data,0,3);
echo 'MAIL:'.$data;
print '<br>';
 
fputs($smtp_conn,"RCPT TO:АдресПолучателя@gmail.com\r\n");
$data = get_data($smtp_conn);
 
$code = substr($data,0,3);
echo 'RCPT:'.$data;
print '<br>';
 
fputs($smtp_conn,"DATA\r\n");
$data = get_data($smtp_conn);
 
$code = substr($data,0,3);
echo 'DATA:'.$data;
print '<br>';
 
fputs($smtp_conn,$header."\r\n".$text."\r\n.\r\n");
$data = get_data($smtp_conn);
 
$code = substr($data,0,3);
echo 'header:'.$data;
print '<br>';
 
fputs($smtp_conn,"QUIT\r\n");
$data = get_data($smtp_conn);
 
$code = substr($data,0,3);
echo 'QUIT:'.$data;
print '<br>';
 
?>
Опубликовано в Web

Столкнулся с проблемой отправки писем из интернет-магазина на базе ocStore 2.3.0.2.3

Для начала проверьте настройки магазина в админке: Система-Настройки

Откройте редактирование магазина и на вкладке почта установите:

Почтовый протокол: SMTP
Параметры функции mail оставьте пустым
SMTP хост: ssl://smtp.mail.ru
SMTP логин: вашапочта@mail.ru
SMTP пароль: вашпароль
SMTP порт: 465
SMTP таймаут: 60

Затем посмотрите логи /log/error.log

У меня там была ошибка: PHP Fatal error:  Uncaught Exception: Error: RCPT TO not accepted from server! in /var/www/clients/client1/web1/web/system/library/mail.php:340

Не работала форма обратной связи и не приходили на почту заказы клиентов.

Я начал с исправления формы обратной связи.

Для этого нужно поправить файл /catalog/controller/information/contact.php

исправить строку
$mail->setReplyTo($this->request->post['email']);
на
$mail->setReplyTo($this->config->get('config_email'));

Если все исправили, то при отправке формы получите сообщение: Ваш запрос был успешно отправлен администрации магазина!

 Для того чтобы приходило оповещение о заказе, нужно исправить файл /system/storage/modification/catalog/model/checkout/order.php 

в 3х местах найти строки
$mail->setTo($order_info['email']);
или 
$mail->setTo($this->config->get('config_email'));

и заменить их на:
$mail->setTo($this->config->get('config_email'));
$mail->setReplyTo($this->config->get('config_email'));

Если все получилось, то в конце оформления заказа, будете получать сообщение:

Заказ успешно сформирован!

Ваш заказ был успешно сформирован!

Опубликовано в Web