Дмитрий Кузнецов
Заказчик Дмитрий Кузнецов dimolya | FL.RU

Дмитрий Кузнецов

На сайте 11 лет и 7 месяцев (заходил 11 лет 7 месяцев 2 дня назад)
0
106
Рейтинг
106
Все (2)       Заказы (2)        Вакансии (0)       Конкурсы (0)
Разместить заказ
04 Июня 2013
По договоренности
class Emailer
{

/**
* Vars
**/
var $gTypeHTML;
var $gCharset;
var $gServer;
var $gHeaders;
var $gMime;
var $gMessage;
var $gParts = array();

/**
* Constructor
**/
function Emailer($mServer = '')
{
$this->gTypeHTML = false;
$this->gServer = $mServer;
$this->Clear();
}

/**
* Clear
**/
function Clear()
{
$this->gHeaders = '';
$this->gMultipart = '';
$this->gMime = '';
$this->gMessage = '';
$this->gParts = array();
}

/**
* SetCharset
**/
function SetCharset($mCharset)
{
$this->gCharset = $mCharset;
}

/**
* SetTypeHTML
**/
function SetTypeHTML()
{
$this->gTypeHTML = true;
}

/**
* SetTypeText
**/
function SetTypeText()
{
$this->gTypeHTML = false;
}

/**
* AddMessage
**/
function AddMessage($mText)
{
$this->gMessage = $mText;
}

/**
* AddAttachment
**/
function AddAttachment($mFile, $mAttachName, $mType = 'application/octet-stream')
{
if ( is_file($mFile) )
{
$body = @implode("", (file($mFile)));
array_push($this->gParts, array('body' => $body, 'name' => basename($mAttachName), 'type' => $mType));
}
}

/**
* BuildMessage
**/
function BuildMessage()
{
$boundary = '=_'.md5(uniqid(time()));
$this->gHeaders = "MIME-Version: 1.0\n";
$this->gHeaders .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
$this->gMime = '';
$this->gMime .= "This is a MIME encoded message.\n\n";
$this->gMime .= "--$boundary\n";
if ( $this->gTypeHTML )
{
$this->gMime .= "Content-Type: text/html; charset=$this->gCharset\n";
$this->gMime .= "Content-Transfer-Encoding: Quot-Printed\n\n";
}
else
{
$this->gMime .= "Content-Type: text/plain; charset=$this->gCharset\n";
$this->gMime .= "Content-Transfer-Encoding: 8bit\n\n";
}
$this->gMime .= $this->gMessage."\n\n";
for ( $i = count($this->gParts)-1; $i >= 0; $i-- )
{
$this->gMime .= "--$boundary\n".$this->BuildPart($i);
}
$this->gMime .= "--$boundary--\n";
}

/**
* BuildPart
**/
function BuildPart($mNum)
{
$message_part = '';
$message_part .= "Content-Type: ".$this->gParts[$mNum][type];
if ( $this->gParts[$mNum][name] != '')
{
$message_part .= "; name = \"".$this->gParts[$mNum][name]."\"\n" ;
}
else
{
$message_part .= "\n";
}
$message_part .= "Content-Transfer-Encoding: base64\n";
$message_part .= "Content-Disposition: attachment; filename = \"".$this->gParts[$mNum][name]."\"\n\n" ;
$message_part .= chunk_split(base64_encode($this->gParts[$mNum][body]))."\ n";

return $message_part;
}

/**
* Send
**/
function Send($mTo, $mFrom, $mSubject)
{
$rcpt = explode(',', $mTo);
$mSubject = preg_replace("/\r\n|\n\r|\n|\r/", "", $mSubject);
$mSubject = "=?$this->gCharset?B?".base64_encode($mSubject)." ?=";
$headers = $this->gHeaders;
$headers .= "From: $mFrom\n";
$headers .= "Date: ".date("D, d M Y H:i:s") . " +0400 UT\n";
$headers .= "Reply-To:$mFrom\n";

if ( strlen($this->gServer) > 0 )
{
// Send via socket
$fp = @fsockopen($this->gServer, 25, $err_num, $err_text, 20);
if ( !$fp )
{
return false;
//die(" Server $this->gServer. Connection failed: $err_num, $err_text");
}
$headers .= "Subject: $mSubject\n";
$headers .= "X-Mailer: PHP/".phpversion()."\n";

@fputs($fp, "HELO $this->gServer\n");
@fputs($fp, "MAIL FROM: $mFrom\n");
foreach ( $rcpt as $to_email ) @fputs($fp, "RCPT TO: ".trim($to_email)."\n");

@fputs($fp, "DATA\n");
if ( count($rcpt) == 1 ) @fputs($fp, "To: $mTo\n");

@fputs($fp, $headers);
@fputs($fp, $this->gMime);
@fputs($fp, "\n.\nQUIT\n");

while( !feof($fp) ) $resp .= @fgets($fp, 1024);
@fclose($fp);
}
else
{
// Send via mail function
$headers .= "X-Mailer: PHP/".phpversion()."\n";
foreach ( $rcpt as $to_email ) $resp .= @mail(trim($to_email), $mSubject, $this->gMime, $headers);
}

return $resp;
}

}
?>

Прошло времени с момента публикации: 11 лет 7 месяцев 3 дня 15 часов 58 минут
Раздел: Программирование / Веб-программирование
03 Июня 2013
По договоренности
Есть сайт (интернет-магазин). После обновления на веб-сервере PHP, MySQL, Apache начались разного рода проблемы, в связи с чем пришлось заменить кодировку баз данных с 1251 на UTF-8.
Теперь наблюдается следующая проблема. И клиентам и нам приходят письма в кривой кодировке. В чем проблема не понятно.. своими силами не разобрались.. но такое ощущение, что простой сменой кодировки в одном месте не обойтись.. все сложнее. Файлы и функции отвечающие за отправку писем найдены в движке.
Очень надеюсь что Вы сможете помочь.

Ниже привожу фрагменты (из разных файлов, отвечающие за 1 цикл отправки):

order.php
$charset = $gOptions['attr_admin_charset'];
$mailer->SetCharset($charset);
$all_message = iconv(SHOP_CHARSET, $charset, str_replace('{CHARSET}', $charset, $full_mail));
$subject = substr($all_message, strpos($all_message, 'Message_subject:')+16, strpos($all_message, 'Message_content:')-16);
$message = substr($all_message, strpos($all_message, 'Message_content:')+16);
$mailer->AddMessage($message);
$mailer->BuildMessage();
$mailer->Send($gOptions['attr_admin_email'], $from_client, ltrim($subject, " "));

Emailer.php

/**
* AddMessage
**/
function AddMessage($mText)
{
$this->gMessage = $mText;
}

/**
* AddAttachment
**/
function AddAttachment($mFile, $mAttachName, $mType = 'application/octet-stream')
{
if ( is_file($mFile) )
{
$body = @implode("", (file($mFile)));
array_push($this->gParts, array('body' => $body, 'name' => basename($mAttachName), 'type' => $mType));
}
}

/**
* BuildMessage
**/
function BuildMessage()
{
$boundary = '=_'.md5(uniqid(time()));
$this->gHeaders = "MIME-Version: 1.0\n";
$this->gHeaders .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
$this->gMime = '';
$this->gMime .= "This is a MIME encoded message.\n\n";
$this->gMime .= "--$boundary\n";
if ( $this->gTypeHTML )
{
$this->gMime .= "Content-Type: text/html; charset=$this->gCharset\n";
$this->gMime .= "Content-Transfer-Encoding: Quot-Printed\n\n";
}
else
{
$this->gMime .= "Content-Type: text/plain; charset=$this->gCharset\n";
$this->gMime .= "Content-Transfer-Encoding: 8bit\n\n";
}
$this->gMime .= $this->gMessage."\n\n";
for ( $i = count($this->gParts)-1; $i >= 0; $i-- )
{
$this->gMime .= "--$boundary\n".$this->BuildPart($i);
}
$this->gMime .= "--$boundary--\n";
}

/**
* BuildPart
**/
function BuildPart($mNum)
{
$message_part = '';
$message_part .= "Content-Type: ".$this->gParts[$mNum][type];
if ( $this->gParts[$mNum][name] != '')
{
$message_part .= "; name = \"".$this->gParts[$mNum][name]."\"\n" ;
}
else
{
$message_part .= "\n";
}
$message_part .= "Content-Transfer-Encoding: base64\n";
$message_part .= "Content-Disposition: attachment; filename = \"".$this->gParts[$mNum][name]."\"\n\n" ;
$message_part .= chunk_split(base64_encode($this->gParts[$mNum][body]))."\ n";

return $message_part;
}

/**
* Send
**/
function Send($mTo, $mFrom, $mSubject)
{
$rcpt = explode(',', $mTo);
$mSubject = preg_replace("/\r\n|\n\r|\n|\r/", "", $mSubject);
$mSubject = "=?$this->gCharset?B?".base64_encode($mSubject)." ?=";
$headers = $this->gHeaders;
$headers .= "From: $mFrom\n";
$headers .= "Date: ".date("D, d M Y H:i:s") . " +0400 UT\n";
$headers .= "Reply-To:$mFrom\n";

if ( strlen($this->gServer) > 0 )
{
// Send via socket
$fp = @fsockopen($this->gServer, 25, $err_num, $err_text, 20);
if ( !$fp )
{
return false;
//die(" Server $this->gServer. Connection failed: $err_num, $err_text");
}
$headers .= "Subject: $mSubject\n";
$headers .= "X-Mailer: PHP/".phpversion()."\n";

@fputs($fp, "HELO $this->gServer\n");
@fputs($fp, "MAIL FROM: $mFrom\n");
foreach ( $rcpt as $to_email ) @fputs($fp, "RCPT TO: ".trim($to_email)."\n");

@fputs($fp, "DATA\n");
if ( count($rcpt) == 1 ) @fputs($fp, "To: $mTo\n");

@fputs($fp, $headers);
@fputs($fp, $this->gMime);
@fputs($fp, "\n.\nQUIT\n");

while( !feof($fp) ) $resp .= @fgets($fp, 1024);
@fclose($fp);
}
else
{
// Send via mail function
$headers .= "X-Mailer: PHP/".phpversion()."\n";
foreach ( $rcpt as $to_email ) $resp .= @mail(trim($to_email), $mSubject, $this->gMime, $headers);
}

return $resp;
}

}
?>

так же есть файл шаблона письма.

Прошло времени с момента публикации: 11 лет 7 месяцев 4 дня 16 часов 39 минут
Раздел: Программирование / Веб-программирование
Наши партнеры
Сведения об ООО «Ваан» внесены в реестр аккредитованных организаций, осуществляющих деятельность в области информационных технологий. ООО «Ваан» осуществляет деятельность, связанную с использованием информационных технологий, по разработке компьютерного программного обеспечения, предоставлению доступа к программе для ЭВМ и является правообладателем программы для ЭВМ «Платформа FL.ru (версия 2.0)».