Перейти к содержанию
Esox

Livezilla он-лайн консультант, кодировка писем

Рекомендуемые сообщения

Всем привет.

Понимаю, что он-лайн консультант Livezilla слабо имеет отношение к ocStore. Даже если установлен на нем. Но тем не менее, обратиться с вопросом мне более некуда. Поэтому прошу прощения за сию бестактность.

Проблема:

Когда консультант находится в режиме офлайн у него, как и у всех, есть функция отсылки письма на почту. Все отсылается но текст письма приходит в иероглифах. Ясен пень кодировка. Сам файл отвечающий за отсылку и прочее пробовал сохранять в различных кодировках в том числе и UTF-8 и другие типа KOI8-R, ничего не получается. Только меняются эти самые иероглифы, иногда похожи на кириллицу, иногда вообще на какие-то символы.

Самое интересное, что если просматривать эти приходящие письма в почтовом клиенте на андройде, то там все читается, а вот в аутлуке нет.

Вот сам файл:


/****************************************************************************************
* LiveZilla objects.mail.inc.php
*
* Copyright 2014 LiveZilla GmbH
* All rights reserved.
* LiveZilla is a registered trademark.
*
* Improper changes to this file may cause critical errors.
***************************************************************************************/

if(!defined("IN_LIVEZILLA"))
die();

class MailSystem
{
private $Account;
private $Receiver;
private $ReplyTo;
private $MailText;
private $Subject;
private $TestIt;
private $Attachments;
private $FakeSender;

public $Result = "";

function MailSystem($_account,$_receiver,$_replyto,$_text,$_subject="",$_test=false,$_attachments=null)
{
$this->Account = $_account;
$this->Receiver = $_receiver;
$this->ReplyTo = $_replyto;
$this->MailText = $_text;
$this->Subject = $_subject;
$this->TestIt = $_test;
$this->Attachments = $_attachments;
}

function SendEmail($_fakeSender="")
{
if($this->Account == null)
$this->Account=Mailbox::GetDefaultOutgoing();

if($this->Account == null)
return null;

$this->FakeSender = $_fakeSender;

if($this->Account->Type == "SMTP")
{
if($this->Account->Framework=="PHP_MAILER")
return false;
else
$this->Result = $this->SEND_SMTP_ZEND();
}
else if($this->Account->Type == "PHPMail")
{
$this->Result = $this->SEND_PHP_MAIL($this->Receiver);
}
}

private function SEND_SMTP_ZEND()
{
try
{
loadLibrary("ZEND","Zend_Mail");
loadLibrary("ZEND","Zend_Mail_Transport_Smtp");

if(empty($this->MailText))
$this->MailText = ">>";

if($this->Account->Authentication=="No")
$config = array('port' => $this->Account->Port);
else
$config = array('auth' => 'login', 'username' => $this->Account->Username,'password' => $this->Account->Password, 'port' => $this->Account->Port);

if(!empty($this->Account->SSL))
$config['ssl'] = ($this->Account->SSL==1) ? 'SSL' : 'TLS';

$transport = new Zend_Mail_Transport_Smtp($this->Account->Host, $config);

$mail = new Zend_Mail('KOI8-R');
//$mail->setHeaderEncoding ( Zend_Mime :: ENCODING_BASE64 ) ;
$mail->setBodyText($this->MailText);

if(empty($this->FakeSender))
$mail->setFrom($this->Account->Email, $this->Account->SenderName);
else
$mail->setFrom($this->FakeSender, $this->FakeSender);

if(strpos($this->Receiver,",") !== false)
{
$emails = explode(",",$this->Receiver);
$add = false;
foreach($emails as $mailrec)
if(!empty($mailrec))
if(!$add)
{
$add = true;
$mail->addTo($mailrec, $mailrec);
}
else
{
$mail->addBcc($mailrec, $mailrec);
}
}
else
$mail->addTo($this->Receiver, $this->Receiver);

$mail->setSubject($this->Subject);
$mail->setReplyTo($this->ReplyTo, $name=null);

if($this->Attachments != null)
foreach($this->Attachments as $resId)
{
$res = getResource($resId);
$at = $mail->createAttachment(file_get_contents("./uploads/" . $res["value"]));
$at->type = 'application/octet-stream';
$at->disposition = Zend_Mime::DISPOSITION_ATTACHMENT;
$at->encoding = Zend_Mime::ENCODING_BASE64;
$at->filename = $res["title"];
}
$mail->send($transport);
}
catch (Exception $e)
{
if($this->TestIt)
throw $e;
else
handleError("111",$this->Account->Host . " send mail connection error: " . $e->getMessage(),"functions.global.inc.php",0);
return 0;
}
return 1;
}

private function SEND_PHP_MAIL($_receiver="", $result = "")
{
if(strpos($_receiver,",") !== false)
{
$emails = explode(",",$_receiver);
foreach($emails as $mail)
if(!empty($mail))
$result = $this->SEND_PHP_MAIL(trim($mail), $result);
return $result;
}

$mailtext = $this->MailText;
$ehash = md5(date('r', time()));
$EOL = "\r\n";

if(empty($this->FakeSender))
$headers = "From: ".$this->Account->Email.$EOL;
else
$headers = "From: ".$this->FakeSender.$EOL;

$headers .= "Reply-To: ".$this->ReplyTo.$EOL;
$headers .= "Date: ".date("r").$EOL;
$headers .= "MIME-Version: 1.0".$EOL;
$headers .= "�������� ������� ������������ ������������";

if($this->Attachments != null)
{
$headers .= "Content-Type: multipart/mixed; boundary=\"".$ehash."\"".$EOL.$EOL;
$headers .= "--".$ehash.$EOL;
$headers .= "Content-Type: text/plain; charset=KOI8-R; format=flowed".$EOL;
$headers .= "Content-Transfer-Encoding: 8bit".$EOL.$EOL;
$headers .= $mailtext.$EOL.$EOL;
$headers .= "--".$ehash.$EOL;
foreach($this->Attachments as $resId)
{
$res = getResource($resId);
if($res==null)
continue;
$content = chunk_split(base64_encode(file_get_contents("./uploads/" . $res["value"])));
$headers .= "Content-Type: application/octet-stream; name=\"".$res["title"]."\"".$EOL;
$headers .= "Content-Transfer-Encoding: base64".$EOL;
$headers .= "Content-Disposition: attachment; filename=\"".$res["title"]."\"".$EOL.$EOL;
$headers .= $content.$EOL.$EOL;
$headers .= "--".$ehash.$EOL;
}
$mailtext="";
$headers .= "--".$ehash."--".$EOL;
}
else
{
//$headers .= "Content-Type: text/plain; charset=UTF-8; format=flowed".$EOL;
//$headers .= "Content-Transfer-Encoding: 8bit".$EOL.$EOL;
}

if(@mail($_receiver, $this->Subject, $mailtext, $headers))
return 1;
else
return "The email could not be sent using PHP mail(). Please try another Return Email Address or use SMTP.";
}
}


?>

 

Спасибо, если кто откликнется и пожет с решением проблемы.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все файлы opencart, которые правите, сохранять исключительно в кодировке UTF-8 без BOM, никаких koi8-r. Используйте для редактирования Notepad++. Перед правкой на всякий случай создавайте копию исправляемого файла.

 

Конкретно в этом файле найдите и замените KOI8-R на UTF-8 (две замены должно получиться)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Изначально в этом файле(он Livezilla - ский) было только UTF-8 и сам он был UTF-8, не знаю правда с BOM или нет.

Я попробую все перевести в UTF-8 без BOM.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Перепроверил, все файлы Livezilla в кодировке UTF-8 без BOM

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Имелись в виду эти две строки

$mail = new Zend_Mail('KOI8-R');

и

$headers .= "Content-Type: text/plain; charset=KOI8-R; format=flowed".$EOL;

В них поменяйте KOI8-R на  UTF-8

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поменял. Ничего не изменилось.

Они изначально были UTF-8. Это я в процессе экспериментов сделал их KOI8-R.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если попробовать прописать в .htaccess

AddDefaultCharset UTF-8

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ничего не меняется.

 

вот начало акцеса:

Options +FollowSymlinks

Options -Indexes


AddDefaultCharset UTF-8

<FilesMatch "\.(tpl|ini|log)">
 Order deny,allow
 Deny from all
</FilesMatch>

<Files vk_export_cron.php>
    Order Deny,Allow
    Deny from all
</Files>

RewriteEngine On

RewriteBase /

FileETag MTime Size

Вот в письме:

MIME-Version: 1.0

п°п╟пЁп╟п╥п╦п╫ п╪я┐п╥я▀п╨п╟п╩я▄п╫п╬пЁп╬ п╬п╠п╬я─я┐п╢п╬п╡п╟п╫п╦я▐Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit

Hi п≤п╡п╟п╫,


Thank you for getting in touch with us.


We have received your message and will be responding to your enquiry as soon as possible.


-------------------------------------------------------------
Date: Tue, 10 Feb 2015 17:58:25 +0300
-------------------------------------------------------------
Name: п≤п╡п╟п╫
Email:
Group: п п╬п╫я│я┐п╩я▄я┌п╟п╫я┌

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в данный момент в файле именно так?

$headers .= "�������� ������� ������������ ������������";

В оригинальном файле что было? Если попробовать заменить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Решил проблему переходом на SMTP вариант.

Встроенный PHPmail так и не удалось привести в чувства.

Не знаю, почему сразу так не сделал.

 

Для тех кто будет пользовать livezilla выбирайте сразу SMTP с авторизацией.

 

Strelez спасибо Вам большое за помощь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да неначем  :wink:  Тем более и не помог ничем))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.