Jump to content
Sign in to follow this  
Esox

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

Recommended Posts

Всем привет.

Понимаю, что он-лайн консультант 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.";
}
}


?>

 

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

 

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

и

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

AddDefaultCharset UTF-8

Share this post


Link to post
Share on other sites

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

 

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

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: п п╬п╫я│я┐п╩я▄я┌п╟п╫я┌

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.