Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

rss

Вы не зашли.

Объявление

#1 2010-06-26 22:27:34

Luca
Пользователь
Зарегистрирован: 2009-03-19
Сообщений: 398
Рейтинг :   
Профиль

SMTP авторизованная отправка

Почти все развитые CMS умеют отправлять сообщения через авторизованные SMTP соединения. NG умеет только через функцию mail в PHP - это не удобно. Приходится вместо модуля CMS для регистрации использовать модуль форума. У меня FluxBB - он это дело умеет.

Хотелось бы иметь такую возможность в NG. Я думаю код можно у FluxBB позаимствовать.

Неактивен

 

#2 2011-01-02 17:23:33

Luca
Пользователь
Зарегистрирован: 2009-03-19
Сообщений: 398
Рейтинг :   
Профиль

Re: SMTP авторизованная отправка

Таки всё еще актуально! Без этого NG не пригодна для Windows хостингов!

Неактивен

 

#3 2011-01-15 01:24:17

WESTnik
Новичок
Зарегистрирован: 2011-01-13
Сообщений: 1
Рейтинг :   
Профиль

Re: SMTP авторизованная отправка

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

Код:

<?php

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

// Обратите внимание, что в условиях нашей почтовой системы, имя пользователя требуется указывать полностью, например postmaster@domain.tld

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($smtpConnect, 515);

  if(empty($smtpConnect))
    {
      $output = "Failed to connect: $smtpResponse";
      return $output;
    }
  else
    {
      $logArray['connection'] = "Connected: $smtpResponse";
    }

  fputs($smtpConnect,"AUTH LOGIN" . $mhSmtpMail_newline);
  $smtpResponse = fgets($smtpConnect, 515);
  $logArray['authrequest'] = "$smtpResponse";

  fputs($smtpConnect, base64_encode($mhSmtpMail_Username) . $mhSmtpMail_newline);
  $smtpResponse = fgets($smtpConnect, 515);
  $logArray['authmhSmtpMail_username'] = "$smtpResponse";

  fputs($smtpConnect, base64_encode($mhSmtpMail_Password) . $mhSmtpMail_newline);
  $smtpResponse = fgets($smtpConnect, 515);
  $logArray['authmhSmtpMail_password'] = "$smtpResponse";

  fputs($smtpConnect, "HELO $mhSmtpMail_localhost" . $mhSmtpMail_newline);
  $smtpResponse = fgets($smtpConnect, 515);
  $logArray['heloresponse'] = "$smtpResponse";

  fputs($smtpConnect, "MAIL FROM: $mhSmtpMail_Username" . $mhSmtpMail_newline);
  $smtpResponse = fgets($smtpConnect, 515);
  $logArray['mailmhSmtpMail_fromresponse'] = "$smtpResponse";

  fputs($smtpConnect, "RCPT TO: $to" . $mhSmtpMail_newline);
  $smtpResponse = fgets($smtpConnect, 515);
  $logArray['mailtoresponse'] = "$smtpResponse";

  fputs($smtpConnect, "DATA" . $mhSmtpMail_newline);
  $smtpResponse = fgets($smtpConnect, 515);
  $logArray['data1response'] = "$smtpResponse";

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

  $smtpResponse = fgets($smtpConnect, 515);
  $logArray['data2response'] = "$smtpResponse";

  fputs($smtpConnect,"QUIT" . $mhSmtpMail_newline);
  $smtpResponse = fgets($smtpConnect, 515);
  $logArray['quitresponse'] = "$smtpResponse";

}

?>

Этот код можно добавить в function sendEmailMessage после " $message    .=    chunk_split(base64_encode(fread($file, filesize($filename))))."\n";} "
Также неплохо заменить хедеры, например на эти:

Код:

 $headers = "MIME-Version: 1.0\r\n";
  $headers .= "Content-type: text/html; charset=windows-1251\r\n";
  $headers .= "To: $to\r\n";
  $headers .= "From: Tournir Registration <admin@excessive.ru>";

Вот эту часть

Код:

$mhSmtpMail_Server     = "smtp.excessive.ru";       // Укажите адрес SMTP-сервера
$mhSmtpMail_Port       = "25";                    // Порт SMTP-сервера, как правило 25
$mhSmtpMail_Username   = "admin@excessive.ru"; // Имя почтового ящика (пользователя)
$mhSmtpMail_Password   = "cLAN1124";              // и пароль к нему.
$mhSmtpMail_From       = "Администрация excessive.ru";       // Имя отправителя в поле From

вставляй до функции.

Удачи!big_smile

Неактивен

 

#4 2011-01-15 02:59:20

vitaly
Администратор
Откуда: Россия
Зарегистрирован: 2008-10-08
Сообщений: 2785
Рейтинг :   115 
Профиль

Re: SMTP авторизованная отправка

WESTnik, вот только далеко не все хостеры позволяют использовать функцию fsockopen() ...

Неактивен

 

#5 2011-01-22 12:11:24

Luca
Пользователь
Зарегистрирован: 2009-03-19
Сообщений: 398
Рейтинг :   
Профиль

Re: SMTP авторизованная отправка

В минимуме хотя бы с гуглем скрутить. В том плане что гугль предоставляет публичные smtp сервера для отправки писем.

Неактивен

 

#6 2012-10-25 16:05:59

Wolverine
Модератор
Откуда: Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3538
Рейтинг :   160 
Профиль  Вебсайт

Re: SMTP авторизованная отправка

Быстрое наколеночное решение. По хорошему это надо причесывать и добавлять в движок.

/engine/includes/inc/functions.inc.php

Код:

function sendEmailMessage($to, $subject, $message, $filename = false, $mail_from = false, $ctype = 'text/html', $smtp = true) {
    global $lang, $config;

    // Include new PHP mailer class
    @include_once root.'includes/classes/phpmailer/class.phpmailer.php';
    $mail    = new phpmailer;

    if($smtp){
        $__smtp = array(
            "host" => "mail.ayola.net",             //smtp сервер
            "debug" => 0,                          //отображение информации дебаггера (0 - нет вообще)
            "auth" => true,                       //сервер требует авторизации
            "port" => 25,                         //порт (по-умолчанию - 25)
            "username" => "info@example.ru", //имя пользователя на сервере
            "password" => "*****",       //пароль
            "addreply" => "info@example.ru",        //ваш е-mail
            "replyto" => "info@example.ru"    //e-mail ответа
        );
        
        $mail->IsSMTP();  # Sets Mailer to send message using SMTP.
        $mail->IsHTML(true);
        try {
        
            $mail->CharSet    = 'Windows-1251';
            $mail->FromName    = '[ INFO ]';
          $mail->Host       = $__smtp['host'];
          $mail->SMTPDebug  = $__smtp['debug'];
          $mail->SMTPAuth   = $__smtp['auth'];
          $mail->Port       = $__smtp['port'];
          $mail->Username   = $__smtp['username'];
          $mail->Password   = $__smtp['password'];
          $mail->AddReplyTo($__smtp['addreply'], $__smtp['username']);
          $mail->AddAddress($to);                //кому письмо
          $mail->SetFrom($__smtp['addreply'], $__smtp['username']); //от кого (желательно указывать свой реальный e-mail на используемом SMTP сервере
          $mail->AddReplyTo($__smtp['addreply'], $__smtp['username']);
          $mail->Subject = htmlspecialchars($subject);
          $mail->MsgHTML($message);
          if (($filename !== false) && (is_file($filename))) {
                $mail->AddAttachment($filename);
            }
          $mail->Send();
          # echo "Message sent Ok!</p>\n";
        } catch (phpmailerException $e) {
          echo $e->errorMessage();
        } catch (Exception $e) {
          echo $e->getMessage();
        }
        
        return 0;
    }

    $mail->CharSet    = 'Windows-1251';
    $mail->FromName    = 'NGCMS sender';
    $mail->From        = (!$mail_from) ? "mailbot@".str_replace("www.", "", $_SERVER['SERVER_NAME']) : $mail_from;
    $mail->Subject    = $subject;
    $mail->Body        = $message;
    $mail->AddAddress($to, $to);
    if (($filename !== false) && (is_file($filename))) {
        $mail->AddAttachment($filename);
    }

    return $mail->Send();


    $mail_from    =    (!$mail_from) ? "mailbot@".str_replace("www.", "", $_SERVER['SERVER_NAME']) : $mail_from;
    $uniqid        =    md5(uniqid(time()));

    $headers    =    'From: '.$mail_from."\n";
    $headers    .=    'Reply-to: '.$mail_from."\n";
    $headers    .=    'Return-Path: '.$mail_from."\n";
    $headers    .=    'Message-ID: <'.$uniqid.'@'.$_SERVER['SERVER_NAME'].">\n";
    $headers    .=    'MIME-Version: 1.0'."\n";
    $headers    .=    'Date: '.gmdate('D, d M Y H:i:s', time())."\n";
    $headers    .=    'X-Priority: 3'."\n";
    $headers    .=    'X-MSMail-Priority: Normal'."\n";
    $headers    .=    'X-Mailer: '.engineName.' : '.engineVersion."\n";
    $headers    .=    'X-MimeOLE: '.engineName.' : '.engineVersion."\n";
    $headers    .=    'content-type: multipart/mixed;boundary="----------'.$uniqid.'"'."\n\n";
    $headers    .=    '------------'.$uniqid."\n";
    $headers    .=    'content-type: '.$ctype.';charset='.$lang['encoding'].''."\n";
    $headers    .=    'content-transfer-Encoding: 8bit';

    if (is_file($filename)){
        $file        =    fopen($filename, 'rb');
        $message    .=    "\n".'------------'.$uniqid."\n";
        $message    .=    'Content-Type: application/octet-stream;name="'.basename($filename).'"'."\n";
        $message    .=    'Content-Transfer-Encoding: base64'."\n";
        $message    .=    'Content-Disposition: attachment;';
        $message    .=    'filename="'.basename($filename).'"'."\n\n";
        $message    .=    chunk_split(base64_encode(fread($file, filesize($filename))))."\n";
    }

    @mail($to, $subject, $message, $headers);
}

Неактивен

 

#7 2013-05-07 10:19:35

RGyaznoff
Новичок
Откуда: Россия Москва
Зарегистрирован: 2013-05-07
Сообщений: 1
Рейтинг :   
Профиль

Re: SMTP авторизованная отправка

Пример в котором реализована отправка писем с использованием smtp-сервера, для которого требуется авторизация.

Неактивен

 

#8 2013-05-30 08:28:13

OLzenizin
Новичок
Откуда: Россия Москва
Зарегистрирован: 2013-05-30
Сообщений: 1
Рейтинг :   
Профиль

Re: SMTP авторизованная отправка

вот только далеко не все хостеры позволяют использовать функцию fsockopen() ...

Неактивен

 

#9 2013-06-07 13:27:26

RaSSveT
Новичок
Зарегистрирован: 2013-01-10
Сообщений: 15
Рейтинг :   
Профиль  Вебсайт

Re: SMTP авторизованная отправка

А как бы доделать эту функцию для возможности отправки почты с SSL?


Wolverine написал:

Быстрое наколеночное решение. По хорошему это надо причесывать и добавлять в движок.

/engine/includes/inc/functions.inc.php

Код:

function sendEmailMessage($to, $subject, $message, $filename = false, $mail_from = false, $ctype = 'text/html', $smtp = true) {
    global $lang, $config;

    // Include new PHP mailer class
    @include_once root.'includes/classes/phpmailer/class.phpmailer.php';
    $mail    = new phpmailer;

    if($smtp){
        $__smtp = array(
            "host" => "mail.ayola.net",             //smtp сервер
            "debug" => 0,                          //отображение информации дебаггера (0 - нет вообще)
            "auth" => true,                       //сервер требует авторизации
            "port" => 25,                         //порт (по-умолчанию - 25)
            "username" => "info@example.ru", //имя пользователя на сервере
            "password" => "*****",       //пароль
            "addreply" => "info@example.ru",        //ваш е-mail
            "replyto" => "info@example.ru"    //e-mail ответа
        );
        
        $mail->IsSMTP();  # Sets Mailer to send message using SMTP.
        $mail->IsHTML(true);
        try {
        
            $mail->CharSet    = 'Windows-1251';
            $mail->FromName    = '[ INFO ]';
          $mail->Host       = $__smtp['host'];
          $mail->SMTPDebug  = $__smtp['debug'];
          $mail->SMTPAuth   = $__smtp['auth'];
          $mail->Port       = $__smtp['port'];
          $mail->Username   = $__smtp['username'];
          $mail->Password   = $__smtp['password'];
          $mail->AddReplyTo($__smtp['addreply'], $__smtp['username']);
          $mail->AddAddress($to);                //кому письмо
          $mail->SetFrom($__smtp['addreply'], $__smtp['username']); //от кого (желательно указывать свой реальный e-mail на используемом SMTP сервере
          $mail->AddReplyTo($__smtp['addreply'], $__smtp['username']);
          $mail->Subject = htmlspecialchars($subject);
          $mail->MsgHTML($message);
          if (($filename !== false) && (is_file($filename))) {
                $mail->AddAttachment($filename);
            }
          $mail->Send();
          # echo "Message sent Ok!</p>\n";
        } catch (phpmailerException $e) {
          echo $e->errorMessage();
        } catch (Exception $e) {
          echo $e->getMessage();
        }
        
        return 0;
    }

    $mail->CharSet    = 'Windows-1251';
    $mail->FromName    = 'NGCMS sender';
    $mail->From        = (!$mail_from) ? "mailbot@".str_replace("www.", "", $_SERVER['SERVER_NAME']) : $mail_from;
    $mail->Subject    = $subject;
    $mail->Body        = $message;
    $mail->AddAddress($to, $to);
    if (($filename !== false) && (is_file($filename))) {
        $mail->AddAttachment($filename);
    }

    return $mail->Send();


    $mail_from    =    (!$mail_from) ? "mailbot@".str_replace("www.", "", $_SERVER['SERVER_NAME']) : $mail_from;
    $uniqid        =    md5(uniqid(time()));

    $headers    =    'From: '.$mail_from."\n";
    $headers    .=    'Reply-to: '.$mail_from."\n";
    $headers    .=    'Return-Path: '.$mail_from."\n";
    $headers    .=    'Message-ID: <'.$uniqid.'@'.$_SERVER['SERVER_NAME'].">\n";
    $headers    .=    'MIME-Version: 1.0'."\n";
    $headers    .=    'Date: '.gmdate('D, d M Y H:i:s', time())."\n";
    $headers    .=    'X-Priority: 3'."\n";
    $headers    .=    'X-MSMail-Priority: Normal'."\n";
    $headers    .=    'X-Mailer: '.engineName.' : '.engineVersion."\n";
    $headers    .=    'X-MimeOLE: '.engineName.' : '.engineVersion."\n";
    $headers    .=    'content-type: multipart/mixed;boundary="----------'.$uniqid.'"'."\n\n";
    $headers    .=    '------------'.$uniqid."\n";
    $headers    .=    'content-type: '.$ctype.';charset='.$lang['encoding'].''."\n";
    $headers    .=    'content-transfer-Encoding: 8bit';

    if (is_file($filename)){
        $file        =    fopen($filename, 'rb');
        $message    .=    "\n".'------------'.$uniqid."\n";
        $message    .=    'Content-Type: application/octet-stream;name="'.basename($filename).'"'."\n";
        $message    .=    'Content-Transfer-Encoding: base64'."\n";
        $message    .=    'Content-Disposition: attachment;';
        $message    .=    'filename="'.basename($filename).'"'."\n\n";
        $message    .=    chunk_split(base64_encode(fread($file, filesize($filename))))."\n";
    }

    @mail($to, $subject, $message, $headers);
}

Неактивен

 

#10 2013-06-08 00:29:11

vitaly
Администратор
Откуда: Россия
Зарегистрирован: 2008-10-08
Сообщений: 2785
Рейтинг :   115 
Профиль

Re: SMTP авторизованная отправка

RaSSveT, для отправки почты используется библиотека phpmailer (лежит в engine/includes/classes/phpmainer/).
Она, вроде, поддерживает работу с SSL.

При желании можешь пропатчить функцию отправки email сообщения sendEmailMessage(), которая находится в engine/includes/inc/functions.inc.php и реализовать необходимый функционал.

Неактивен

 

#11 2013-06-08 14:02:58

RaSSveT
Новичок
Зарегистрирован: 2013-01-10
Сообщений: 15
Рейтинг :   
Профиль  Вебсайт

Re: SMTP авторизованная отправка

Вроде разобрался. Спасибо.

Неактивен

 

#12 2013-07-11 20:46:44

NZavaloff
Новичок
Откуда: Астраханская область, Камызякс
Зарегистрирован: 2013-07-11
Сообщений: 1
Рейтинг :   
Профиль

Re: SMTP авторизованная отправка

$mail->IsSMTP();  # Sets Mailer to send message using SMTP.

Неактивен

 

#13 2013-07-15 20:13:16

ISaminov
Новичок
Откуда: Россия Москва
Зарегистрирован: 2013-07-15
Сообщений: 1
Рейтинг :   
Профиль

Re: SMTP авторизованная отправка

Пример в котором реализована отправка писем с использованием smtp-сервера, для которого требуется авторизация.

Неактивен

 

#14 2013-08-27 08:38:01

Esevroff
Новичок
Откуда: Россия Москва
Зарегистрирован: 2013-08-27
Сообщений: 1
Рейтинг :   
Профиль

Re: SMTP авторизованная отправка

При желании можешь пропатчить функцию отправки email сообщения sendEmailMessage(), которая находится в engine/includes/inc/functions.inc.php и реализовать необходимый функционал.

Неактивен

 

Board footer

Powered by FluxBB

[ Generated in 0.015 seconds, 22 queries executed ]