Навигация
Главная
Поиск
Новости
Статьи
ЧаВо
- - - - - - -
Файловый архив
Ссылки
Авторизация
Кто он-лайн

 

 
Главная
Ошибка при отправке почты в POSTACI WEBMAIL 2-й версии Версия для печати
Написал Ярослав Гасов   
03.03.2007

Share this!
В POSTACI 2.0.0 (а может и в более новых версиях) существует серъезная ошибка, из-за которой исходящая почта при попытке ее отправить просто "исчезает".

Связанна эта проблема с неграмотным подходом к написанию кода в подключаемом скрипте "classes\mime_mail.inc" и "includes\functions.inc". Обратите внимание на следующую функцию из "functions.inc":

 

function getMailAdress($user_id) {
      global $db,$qmail_support;

      $dbq = $db->execute("select username,domain_id,real_name from tblUsers where user_id=$user_id");
      $username = $dbq->fields['username'];
      $domain_id = $dbq->fields['domain_id'];
      $real_name = $dbq->fields['real_name'];
      $dbq->close();
      $dbq = $db->execute("select domain from tblDomains where domain_id=$domain_id");
      $domain = $dbq->fields['domain'];
      $dbq->close();

      $mailadress = trim($username);

      if (trim($real_name) != "") {
        $mailadress = $real_name . " <" . $mailadress . ">";
      }

      return $mailadress;
}  // end function

В этой функции к адресу отправителя добавляется (выделено полужирным) имя почтового ящика ($real_name), которое задает сам пользователь, например: "Отдел реализации". Далее обратим внимание на отправку почты (postmail.php и mime_mail.inc):

 

... 

$mail->from = getMailAdressPlaine($user_id); //  postmail.php

...

 

if ($smtp_host != "localhost") {                       //  mime_mail.inc

       $fp = fsockopen($smtp_host,$smtp_port);
...

...

       fputs($fp, "mail from:<" . $this->from . ">\r\n");

...

 

Т.е., если Вы в настройках указали IP-адрес SMTP-сервера вместо "localhost" (например, чтобы POSTACI не использовал стандартную функцию "mail"), то по протоколу SMTP (а не в теле письма, ради чего собственно и должно использоваться $real_name) будет попытка передать кириллицу в имени отправителя, что для почтовой службы недопустимо. Вследствие этого письмо никуда не отправиться.

 

Для решения данной проблемы самое простое, что можно посоветовать - это убрать строчку $mailadress = $real_name . " <" . $mailadress . ">"; из функции getMailAdress. Более сложный путь: дублирование данной функции (getMailAdressWOrealname) без данной строки и добавление в классе "mime_mail" (файл mime_mail.inc) переменной $this->fromplaine =  "". Затем следует подправить "postmail.inc":

 

$mailadress    = getMailAdress($user_id);
$mail          = new mime_mail;
$mail->fromplaine = getMailAdressWOrealname($user_id);
$mail->from    = $mailadress;

 

Также следует заменить следующую строку "отправки"письма в "mime_mail.inc":

 

fputs($fp, "mail from:<" . $this->from . ">\r\n")   меняем на   fputs($fp, "mail from:<" . $this->fromplaine . ">\r\n").

 

Более сложный путь позволить получателю в самом теле письма увидеть красиво оформленный адрес отправителя, как и задумывалось создателями POSTACI. 

 
< Пред.   След. >

Share this!

 

 

Последние публикации:
Самые популярные материалы:
 
 

Производственный кооператив "Геолог" - геологоразведовательные работы, разведка месторождений, подсчет запасов, бурение скважин, геологический отчет...


GASOV.COM © 2024