Gross1k Опубліковано: 30 грудня 2015 Share Опубліковано: 30 грудня 2015 Добрый вечер, форумчане. Перерыл весь интернет, но дельного решения так и не нашел. Письма о новом заказе, клиенте приходят, но тема письма отображается некорректно. Помогите решить данную проблему, пожалуйста. Пользуюсь протоколом mail. Почта на яндексе. Кину любую инфо по вашему запросу. Заранее благодарю! Надіслати Поділитися на інших сайтах More sharing options...
Tom Опубліковано: 30 грудня 2015 Share Опубліковано: 30 грудня 2015 Причиной может быть кодировка файлов отвечающих за отправку письма, в которые были внесены правки. Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 Причиной может быть кодировка файлов отвечающих за отправку письма, в которые были внесены правки. Спасибо за ответ. Но вроде не вносил никаких правок в эти файлы (mail и order)... Если я сюда выложу, вы сможете посмотреть? Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 Все файлы сохранял в UTF-8 - это 100% Надіслати Поділитися на інших сайтах More sharing options... Tom Опубліковано: 30 грудня 2015 Share Опубліковано: 30 грудня 2015 https://opencartforum.com/files/file/2153-%D0%BF%D0%BE%D0%B8%D1%81%D0%BA-%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2-%D1%81-%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%BE%D0%B9-utf-8-%D1%81-bom/ https://opencartforum.com/topic/41392-поиск-файлов-с-кодировкой-utf-8-с-bom/?do=findComment&comment=393360 Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 Вижу, что файлик полезный, но скачал, залил и в итоге белый экран(( Надіслати Поділитися на інших сайтах More sharing options... Tom Опубліковано: 30 грудня 2015 Share Опубліковано: 30 грудня 2015 Я дал две ссылки. Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 (змінено) Я дал две ссылки. При попытке запустить оба скрипта, что bomdel.php, что find_bom.php, ничего не происходит, просто белый экран. Либо я кривой, либо что-то, где-то не прописано( Змінено 30 грудня 2015 користувачем Gross1k Надіслати Поділитися на інших сайтах More sharing options... Tom Опубліковано: 30 грудня 2015 Share Опубліковано: 30 грудня 2015 Тогда вариант номер два.Удалить в папке vqmod/xml все вк моды связанные с изменением письма, скачать дистрибутив с той же версией опенкарта что используется и заменить на дефолтные файлы. PS Не забываем делать бэкап любых файлов с которыми производим какие либо манипуляции. Решения выше иногда выпадают в "белый лист" но при этом вносят нужные правки.Обязательно проверить проблему на данном этапе.А то может её уже давно нет. Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 Сейчас попробую, отпишусь о результате. Увы, не помогло. Все такая же проблема с темой письма. У меня есть чувство, что проблема в mail.php. Если у вас есть настроение и возможность, посмотрите своим глазом, пож-ста final class Mail { protected $to; protected $from; protected $sender; protected $subject; protected $text; protected $html; protected $attachments = array(); public $protocol = 'mail'; public $hostname; public $username; public $password; public $port = 25; public $timeout = 5; public $newline = "\r\n"; public $crlf = "\r\n"; public $verp = FALSE; public $parameter = ''; public function setTo($to) { $this->to = $to; } public function setFrom($from) { $this->from = $from; } public function addheader($header, $value) { $this->headers[$header] = $value; } public function setSender($sender) { $this->sender = html_entity_decode($sender); } public function setSubject($subject) { $this->subject= '=?UTF-8?B?' . base64_encode($subject) . '?='; } public function setText($text) { $this->text = $text; } public function setHtml($html) { $this->html = $html; } public function addAttachment($file, $filename = '') { if (!$filename) { $filename = basename($file); } $this->attachments[] = array( 'filename' => $filename, 'file' => $file ); } public function send() { if (!$this->to) { exit('Error: E-Mail to required!'); } if (!$this->from) { exit('Error: E-Mail from required!'); } if (!$this->sender) { exit('Error: E-Mail sender required!'); } if (!$this->subject) { exit('Error: E-Mail subject required!'); } if ((!$this->text) && (!$this->html)) { exit('Error: E-Mail message required!'); } if (is_array($this->to)) { $to = implode(',', $this->to); } else { $to = $this->to; } $boundary = '----=_NextPart_' . md5(time()); $header = ''; if ($this->protocol != 'mail') { $header .= 'To: ' . $to . $this->newline; $header .= 'Subject: ' . '=?UTF-8?B?' . base64_encode($this->subject) . '?=' . $this->newline; } $header .= 'Date: ' . date("D, d M Y H:i:s O") . $this->newline; //$header .= 'From: "' . $this->sender . '" <' . $this->from . '>' . $this->newline; //$header .= 'From: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'From: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . '<' . $this->from . '>' . $this->newline; $header .= 'Reply-To: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'Return-Path: ' . $this->from . $this->newline; $header .= 'X-Mailer: PHP/' . phpversion() . $this->newline; $header .= 'MIME-Version: 1.0' . $this->newline; $header .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"' . $this->newline; $header .= 'Content-Transfer-Encoding: 8bit' . $this->newline; $header .= $this->newline; if (!$this->html) { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->text . $this->newline; } else { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '_alt"' . $this->newline . $this->newline; $message .= '--' . $boundary . '_alt' . $this->newline; $message .= '' . $this->newline; $message .= '' . $this->newline; if ($this->text) { $message .= $this->text . $this->newline; } else { $message .= '' . $this->newline; } $message .= '--' . $boundary . '_alt' . $this->newline; $message .= 'Content-Type: text/html; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->html . $this->newline; $message .= '--' . $boundary . '_alt--' . $this->newline; } foreach ($this->attachments as $attachment) { if (file_exists($attachment['file'])) { $handle = fopen($attachment['file'], 'r'); $content = fread($handle, filesize($attachment['file'])); fclose($handle); $message .= '--' . $boundary . $this->newline; $message .= 'Content-Type: application/octetstream' . $this->newline; $message .= 'Content-Transfer-Encoding: base64' . $this->newline; $message .= 'Content-Disposition: attachment; filename="' . basename($attachment['filename']) . '"' . $this->newline; $message .= 'Content-ID: <' . basename($attachment['filename']) . '>' . $this->newline . $this->newline; $message .= chunk_split(base64_encode($content)); } } $message .= '--' . $boundary . '--' . $this->newline; if ($this->protocol == 'mail') { ini_set('sendmail_from', $this->from); if ($this->parameter) { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header, $this->parameter); } else { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header); } } elseif ($this->protocol == 'smtp') { $handle = fsockopen($this->hostname, $this->port, $errno, $errstr, $this->timeout); if (!$handle) { error_log('Error: ' . $errstr . ' (' . $errno . ')'); } else { if (substr(PHP_OS, 0, 3) != 'WIN') { socket_set_timeout($handle, $this->timeout, 0); } while ($line = fgets($handle, 515)) { if (substr($line, 3, 1) == ' ') { break; } } if (substr($this->hostname, 0, 3) == 'tls') { fputs($handle, 'STARTTLS' . $this->crlf); while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 220) { error_log('Error: STARTTLS not accepted from server!'); } } if (!empty($this->username) && !empty($this->password)) { fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: EHLO not accepted from server!'); } fputs($handle, 'AUTH LOGIN' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: AUTH LOGIN not accepted from server!'); } fputs($handle, base64_encode($this->username) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: Username not accepted from server!'); } fputs($handle, base64_encode($this->password) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 235) { error_log('Error: Password not accepted from server!'); } } else { fputs($handle, 'HELO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: HELO not accepted from server!'); } } if ($this->verp) { fputs($handle, 'MAIL FROM: <' . $this->username . '>XVERP' . $this->crlf); } else { fputs($handle, 'MAIL FROM: <' . $this->username . '>' . $this->crlf); } $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: MAIL FROM not accepted from server!'); } if (!is_array($this->to)) { fputs($handle, 'RCPT TO: <' . $this->to . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } else { foreach ($this->to as $recipient) { fputs($handle, 'RCPT TO: <' . $recipient . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } } fputs($handle, 'DATA' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 354) { error_log('Error: DATA not accepted from server!'); } fputs($handle, $header . $message . $this->crlf); fputs($handle, '.' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: DATA not accepted from server!'); } fputs($handle, 'QUIT' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 221) { error_log('Error: QUIT not accepted from server!'); } fclose($handle); } } } } ?> Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 Сейчас попробую, отпишусь о результате. Увы, не помогло. Все такая же проблема с темой письма. У меня есть чувство, что проблема в mail.php. Если у вас есть настроение и возможность, посмотрите своим глазом, пож-ста final class Mail { protected $to; protected $from; protected $sender; protected $subject; protected $text; protected $html; protected $attachments = array(); public $protocol = 'mail'; public $hostname; public $username; public $password; public $port = 25; public $timeout = 5; public $newline = "\r\n"; public $crlf = "\r\n"; public $verp = FALSE; public $parameter = ''; public function setTo($to) { $this->to = $to; } public function setFrom($from) { $this->from = $from; } public function addheader($header, $value) { $this->headers[$header] = $value; } public function setSender($sender) { $this->sender = html_entity_decode($sender); } public function setSubject($subject) { $this->subject= '=?UTF-8?B?' . base64_encode($subject) . '?='; } public function setText($text) { $this->text = $text; } public function setHtml($html) { $this->html = $html; } public function addAttachment($file, $filename = '') { if (!$filename) { $filename = basename($file); } $this->attachments[] = array( 'filename' => $filename, 'file' => $file ); } public function send() { if (!$this->to) { exit('Error: E-Mail to required!'); } if (!$this->from) { exit('Error: E-Mail from required!'); } if (!$this->sender) { exit('Error: E-Mail sender required!'); } if (!$this->subject) { exit('Error: E-Mail subject required!'); } if ((!$this->text) && (!$this->html)) { exit('Error: E-Mail message required!'); } if (is_array($this->to)) { $to = implode(',', $this->to); } else { $to = $this->to; } $boundary = '----=_NextPart_' . md5(time()); $header = ''; if ($this->protocol != 'mail') { $header .= 'To: ' . $to . $this->newline; $header .= 'Subject: ' . '=?UTF-8?B?' . base64_encode($this->subject) . '?=' . $this->newline; } $header .= 'Date: ' . date("D, d M Y H:i:s O") . $this->newline; //$header .= 'From: "' . $this->sender . '" <' . $this->from . '>' . $this->newline; //$header .= 'From: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'From: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . '<' . $this->from . '>' . $this->newline; $header .= 'Reply-To: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'Return-Path: ' . $this->from . $this->newline; $header .= 'X-Mailer: PHP/' . phpversion() . $this->newline; $header .= 'MIME-Version: 1.0' . $this->newline; $header .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"' . $this->newline; $header .= 'Content-Transfer-Encoding: 8bit' . $this->newline; $header .= $this->newline; if (!$this->html) { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->text . $this->newline; } else { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '_alt"' . $this->newline . $this->newline; $message .= '--' . $boundary . '_alt' . $this->newline; $message .= '' . $this->newline; $message .= '' . $this->newline; if ($this->text) { $message .= $this->text . $this->newline; } else { $message .= '' . $this->newline; } $message .= '--' . $boundary . '_alt' . $this->newline; $message .= 'Content-Type: text/html; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->html . $this->newline; $message .= '--' . $boundary . '_alt--' . $this->newline; } foreach ($this->attachments as $attachment) { if (file_exists($attachment['file'])) { $handle = fopen($attachment['file'], 'r'); $content = fread($handle, filesize($attachment['file'])); fclose($handle); $message .= '--' . $boundary . $this->newline; $message .= 'Content-Type: application/octetstream' . $this->newline; $message .= 'Content-Transfer-Encoding: base64' . $this->newline; $message .= 'Content-Disposition: attachment; filename="' . basename($attachment['filename']) . '"' . $this->newline; $message .= 'Content-ID: <' . basename($attachment['filename']) . '>' . $this->newline . $this->newline; $message .= chunk_split(base64_encode($content)); } } $message .= '--' . $boundary . '--' . $this->newline; if ($this->protocol == 'mail') { ini_set('sendmail_from', $this->from); if ($this->parameter) { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header, $this->parameter); } else { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header); } } elseif ($this->protocol == 'smtp') { $handle = fsockopen($this->hostname, $this->port, $errno, $errstr, $this->timeout); if (!$handle) { error_log('Error: ' . $errstr . ' (' . $errno . ')'); } else { if (substr(PHP_OS, 0, 3) != 'WIN') { socket_set_timeout($handle, $this->timeout, 0); } while ($line = fgets($handle, 515)) { if (substr($line, 3, 1) == ' ') { break; } } if (substr($this->hostname, 0, 3) == 'tls') { fputs($handle, 'STARTTLS' . $this->crlf); while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 220) { error_log('Error: STARTTLS not accepted from server!'); } } if (!empty($this->username) && !empty($this->password)) { fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: EHLO not accepted from server!'); } fputs($handle, 'AUTH LOGIN' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: AUTH LOGIN not accepted from server!'); } fputs($handle, base64_encode($this->username) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: Username not accepted from server!'); } fputs($handle, base64_encode($this->password) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 235) { error_log('Error: Password not accepted from server!'); } } else { fputs($handle, 'HELO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: HELO not accepted from server!'); } } if ($this->verp) { fputs($handle, 'MAIL FROM: <' . $this->username . '>XVERP' . $this->crlf); } else { fputs($handle, 'MAIL FROM: <' . $this->username . '>' . $this->crlf); } $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: MAIL FROM not accepted from server!'); } if (!is_array($this->to)) { fputs($handle, 'RCPT TO: <' . $this->to . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } else { foreach ($this->to as $recipient) { fputs($handle, 'RCPT TO: <' . $recipient . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } } fputs($handle, 'DATA' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 354) { error_log('Error: DATA not accepted from server!'); } fputs($handle, $header . $message . $this->crlf); fputs($handle, '.' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: DATA not accepted from server!'); } fputs($handle, 'QUIT' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 221) { error_log('Error: QUIT not accepted from server!'); } fclose($handle); } } } } ?> Наличие BOM проверил и ничего не обнаружено Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 идти методом перебора пробовать вместо почты на яндексе указать другой ящик вообще не понимаю - нафига покупать домен, размещать магазин на хостинге, и при этом использовать халявный сторонний ящик :ugeek: пробовать заменить файлы catalog\model\checkout\order.php system\library\mail.php оригинальными из вашего дистрибутива (только копии своих создайте на всякий случай) сравнивать эти ваши файлы с оригинальными, ищите отличия в subject Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 идти методом перебора пробовать вместо почты на яндексе указать другой ящик вообще не понимаю - нафига покупать домен, размещать магазин на хостинге, и при этом использовать халявный сторонний ящик :ugeek: пробовать заменить файлы catalog\model\checkout\order.php system\library\mail.php оригинальными из вашего дистрибутива (только копии своих создайте на всякий случай) сравнивать эти ваши файлы с оригинальными, ищите отличия в subject Добрый день. Пробовал другие ящики, правда бесплатные. Сегодня опробую платный, а-ля Gmail. Вы думаете, что проблема в самом ящике, а не в коде? А вот за эту идею спасибо, с работы вернусь, займусь. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 я про то, что даже если проблема не в ящике/почтовом сервере - все равно стоит использовать одноименное с доменом магазина имя, а не сторонний сервис гораздо больше доверия, когда после заказа приходит письмо с ящика info@домен_магазина, а не с фиг-знает-что-за-имя@mail.ru или подобного ;) Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 я про то, что даже если проблема не в ящике/почтовом сервере - все равно стоит использовать одноименное с доменом магазина имя, а не сторонний сервис гораздо больше доверия, когда после заказа приходит письмо с ящика info@домен_магазина, а не с фиг-знает-что-за-имя@mail.ru или подобного ;) Ну это понятно=) Если быть точным, то мой ящик имеет доменное имя. ***@grossmall.ru Про эти вещи я знаю давно и всегда сужу по себе, потому что когда вижу почту компании а-ля ***@mail.ru, gmail и т.д., то доверие пропадает. А по поводу G-mail я имел ввиду платный ящик с доменным именем, но другого проекта. С Наступающим Новым Годом! Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 Я напряг Сп Рег Ру, они провели тесты, в итоге печальная весть - "Обратитесь к разработчику сайта" - т.е. к самому себе :D Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 Ребята! Решил вопрос. Если у кого будет такая проблема, внимательно посмотрите mail.php в system/library/. В 37-39 строках намутил черт знает что. Вот как было: public function setSubject($subject) { $this->subject = '=?UTF-8?B?' . base64_encode($subject) . '?='; } Вот на что исправил: public function setSubject($subject) {$this->subject = $subject;} Том и Алекс, спасибо за суету, навели на верные мысли :) Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. это принудительное указание кодировки для темы письма. если оно "мешает" - у тебя неправильная кодировка где-то ползет. проверь все свои файлы; особенно те, что касаются заказов (*/checkout/*, и особенно - языковые) - всё должно быть в utf8. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. .. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. скорей всего последний вариант точно не скажу, в деревне сейчас - но по памяти, то ли в 1.5.х, то ли в 2х (а возможно и в обоих) это в оригиналах: $this->subject = $subject; Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. на всякий случай уточню - как было в оригинальном файле движка. Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 1 січня 2016 Автор Share Опубліковано: 1 січня 2016 верни, как было. это принудительное указание кодировки для темы письма. если оно "мешает" - у тебя неправильная кодировка где-то ползет. проверь все свои файлы; особенно те, что касаются заказов (*/checkout/*, и особенно - языковые) - всё должно быть в utf8. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. В кодировке проблем не обнаружено. Проверил файлы на БОМ, проверил скриптом - ничего не обнаружено, ошибка в коде - однозначно. Утверждать точно не смогу, потому что опыт работы с opencart и созданиями сайтов - полтора месяца, но логика подсказывает. Дело в том, что по неопытности, когда еще сайт был на локальном хостинге, не отправлялись письма, поэтому я стал мудрить с кодом (спасибо разным форумам, ресурсам и моему энтузиазму). Видимо перемудренный вариант закинул на сервер, отсюда начались проблемы. До совета Алекса начал спонтанно читать иностранные форумы и ву-аля, нашел правильное отображение $subject. Похимичил и тут все наладилось. Для успокоения души заново скачал клиент OcStore, проверил оригинальный mail.php и там ровно также, как "я исправил" (Алекс - ты прав). Теперь хоть душа спокойна :) P.S у меня OcStore 1.5.5.1.2 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница [Решено] Тема письма =?UTF-8?B?= или =?UTF-8?B?0JLQvtC/0YDQvtGBOiBTd2lzc0RlbnQ=?= Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 Причиной может быть кодировка файлов отвечающих за отправку письма, в которые были внесены правки. Спасибо за ответ. Но вроде не вносил никаких правок в эти файлы (mail и order)... Если я сюда выложу, вы сможете посмотреть? Надіслати Поділитися на інших сайтах More sharing options...
Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 Все файлы сохранял в UTF-8 - это 100% Надіслати Поділитися на інших сайтах More sharing options...
Tom Опубліковано: 30 грудня 2015 Share Опубліковано: 30 грудня 2015 https://opencartforum.com/files/file/2153-%D0%BF%D0%BE%D0%B8%D1%81%D0%BA-%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2-%D1%81-%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%BE%D0%B9-utf-8-%D1%81-bom/ https://opencartforum.com/topic/41392-поиск-файлов-с-кодировкой-utf-8-с-bom/?do=findComment&comment=393360 Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 Вижу, что файлик полезный, но скачал, залил и в итоге белый экран(( Надіслати Поділитися на інших сайтах More sharing options... Tom Опубліковано: 30 грудня 2015 Share Опубліковано: 30 грудня 2015 Я дал две ссылки. Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 (змінено) Я дал две ссылки. При попытке запустить оба скрипта, что bomdel.php, что find_bom.php, ничего не происходит, просто белый экран. Либо я кривой, либо что-то, где-то не прописано( Змінено 30 грудня 2015 користувачем Gross1k Надіслати Поділитися на інших сайтах More sharing options... Tom Опубліковано: 30 грудня 2015 Share Опубліковано: 30 грудня 2015 Тогда вариант номер два.Удалить в папке vqmod/xml все вк моды связанные с изменением письма, скачать дистрибутив с той же версией опенкарта что используется и заменить на дефолтные файлы. PS Не забываем делать бэкап любых файлов с которыми производим какие либо манипуляции. Решения выше иногда выпадают в "белый лист" но при этом вносят нужные правки.Обязательно проверить проблему на данном этапе.А то может её уже давно нет. Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 Сейчас попробую, отпишусь о результате. Увы, не помогло. Все такая же проблема с темой письма. У меня есть чувство, что проблема в mail.php. Если у вас есть настроение и возможность, посмотрите своим глазом, пож-ста final class Mail { protected $to; protected $from; protected $sender; protected $subject; protected $text; protected $html; protected $attachments = array(); public $protocol = 'mail'; public $hostname; public $username; public $password; public $port = 25; public $timeout = 5; public $newline = "\r\n"; public $crlf = "\r\n"; public $verp = FALSE; public $parameter = ''; public function setTo($to) { $this->to = $to; } public function setFrom($from) { $this->from = $from; } public function addheader($header, $value) { $this->headers[$header] = $value; } public function setSender($sender) { $this->sender = html_entity_decode($sender); } public function setSubject($subject) { $this->subject= '=?UTF-8?B?' . base64_encode($subject) . '?='; } public function setText($text) { $this->text = $text; } public function setHtml($html) { $this->html = $html; } public function addAttachment($file, $filename = '') { if (!$filename) { $filename = basename($file); } $this->attachments[] = array( 'filename' => $filename, 'file' => $file ); } public function send() { if (!$this->to) { exit('Error: E-Mail to required!'); } if (!$this->from) { exit('Error: E-Mail from required!'); } if (!$this->sender) { exit('Error: E-Mail sender required!'); } if (!$this->subject) { exit('Error: E-Mail subject required!'); } if ((!$this->text) && (!$this->html)) { exit('Error: E-Mail message required!'); } if (is_array($this->to)) { $to = implode(',', $this->to); } else { $to = $this->to; } $boundary = '----=_NextPart_' . md5(time()); $header = ''; if ($this->protocol != 'mail') { $header .= 'To: ' . $to . $this->newline; $header .= 'Subject: ' . '=?UTF-8?B?' . base64_encode($this->subject) . '?=' . $this->newline; } $header .= 'Date: ' . date("D, d M Y H:i:s O") . $this->newline; //$header .= 'From: "' . $this->sender . '" <' . $this->from . '>' . $this->newline; //$header .= 'From: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'From: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . '<' . $this->from . '>' . $this->newline; $header .= 'Reply-To: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'Return-Path: ' . $this->from . $this->newline; $header .= 'X-Mailer: PHP/' . phpversion() . $this->newline; $header .= 'MIME-Version: 1.0' . $this->newline; $header .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"' . $this->newline; $header .= 'Content-Transfer-Encoding: 8bit' . $this->newline; $header .= $this->newline; if (!$this->html) { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->text . $this->newline; } else { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '_alt"' . $this->newline . $this->newline; $message .= '--' . $boundary . '_alt' . $this->newline; $message .= '' . $this->newline; $message .= '' . $this->newline; if ($this->text) { $message .= $this->text . $this->newline; } else { $message .= '' . $this->newline; } $message .= '--' . $boundary . '_alt' . $this->newline; $message .= 'Content-Type: text/html; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->html . $this->newline; $message .= '--' . $boundary . '_alt--' . $this->newline; } foreach ($this->attachments as $attachment) { if (file_exists($attachment['file'])) { $handle = fopen($attachment['file'], 'r'); $content = fread($handle, filesize($attachment['file'])); fclose($handle); $message .= '--' . $boundary . $this->newline; $message .= 'Content-Type: application/octetstream' . $this->newline; $message .= 'Content-Transfer-Encoding: base64' . $this->newline; $message .= 'Content-Disposition: attachment; filename="' . basename($attachment['filename']) . '"' . $this->newline; $message .= 'Content-ID: <' . basename($attachment['filename']) . '>' . $this->newline . $this->newline; $message .= chunk_split(base64_encode($content)); } } $message .= '--' . $boundary . '--' . $this->newline; if ($this->protocol == 'mail') { ini_set('sendmail_from', $this->from); if ($this->parameter) { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header, $this->parameter); } else { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header); } } elseif ($this->protocol == 'smtp') { $handle = fsockopen($this->hostname, $this->port, $errno, $errstr, $this->timeout); if (!$handle) { error_log('Error: ' . $errstr . ' (' . $errno . ')'); } else { if (substr(PHP_OS, 0, 3) != 'WIN') { socket_set_timeout($handle, $this->timeout, 0); } while ($line = fgets($handle, 515)) { if (substr($line, 3, 1) == ' ') { break; } } if (substr($this->hostname, 0, 3) == 'tls') { fputs($handle, 'STARTTLS' . $this->crlf); while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 220) { error_log('Error: STARTTLS not accepted from server!'); } } if (!empty($this->username) && !empty($this->password)) { fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: EHLO not accepted from server!'); } fputs($handle, 'AUTH LOGIN' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: AUTH LOGIN not accepted from server!'); } fputs($handle, base64_encode($this->username) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: Username not accepted from server!'); } fputs($handle, base64_encode($this->password) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 235) { error_log('Error: Password not accepted from server!'); } } else { fputs($handle, 'HELO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: HELO not accepted from server!'); } } if ($this->verp) { fputs($handle, 'MAIL FROM: <' . $this->username . '>XVERP' . $this->crlf); } else { fputs($handle, 'MAIL FROM: <' . $this->username . '>' . $this->crlf); } $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: MAIL FROM not accepted from server!'); } if (!is_array($this->to)) { fputs($handle, 'RCPT TO: <' . $this->to . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } else { foreach ($this->to as $recipient) { fputs($handle, 'RCPT TO: <' . $recipient . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } } fputs($handle, 'DATA' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 354) { error_log('Error: DATA not accepted from server!'); } fputs($handle, $header . $message . $this->crlf); fputs($handle, '.' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: DATA not accepted from server!'); } fputs($handle, 'QUIT' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 221) { error_log('Error: QUIT not accepted from server!'); } fclose($handle); } } } } ?> Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 Сейчас попробую, отпишусь о результате. Увы, не помогло. Все такая же проблема с темой письма. У меня есть чувство, что проблема в mail.php. Если у вас есть настроение и возможность, посмотрите своим глазом, пож-ста final class Mail { protected $to; protected $from; protected $sender; protected $subject; protected $text; protected $html; protected $attachments = array(); public $protocol = 'mail'; public $hostname; public $username; public $password; public $port = 25; public $timeout = 5; public $newline = "\r\n"; public $crlf = "\r\n"; public $verp = FALSE; public $parameter = ''; public function setTo($to) { $this->to = $to; } public function setFrom($from) { $this->from = $from; } public function addheader($header, $value) { $this->headers[$header] = $value; } public function setSender($sender) { $this->sender = html_entity_decode($sender); } public function setSubject($subject) { $this->subject= '=?UTF-8?B?' . base64_encode($subject) . '?='; } public function setText($text) { $this->text = $text; } public function setHtml($html) { $this->html = $html; } public function addAttachment($file, $filename = '') { if (!$filename) { $filename = basename($file); } $this->attachments[] = array( 'filename' => $filename, 'file' => $file ); } public function send() { if (!$this->to) { exit('Error: E-Mail to required!'); } if (!$this->from) { exit('Error: E-Mail from required!'); } if (!$this->sender) { exit('Error: E-Mail sender required!'); } if (!$this->subject) { exit('Error: E-Mail subject required!'); } if ((!$this->text) && (!$this->html)) { exit('Error: E-Mail message required!'); } if (is_array($this->to)) { $to = implode(',', $this->to); } else { $to = $this->to; } $boundary = '----=_NextPart_' . md5(time()); $header = ''; if ($this->protocol != 'mail') { $header .= 'To: ' . $to . $this->newline; $header .= 'Subject: ' . '=?UTF-8?B?' . base64_encode($this->subject) . '?=' . $this->newline; } $header .= 'Date: ' . date("D, d M Y H:i:s O") . $this->newline; //$header .= 'From: "' . $this->sender . '" <' . $this->from . '>' . $this->newline; //$header .= 'From: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'From: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . '<' . $this->from . '>' . $this->newline; $header .= 'Reply-To: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'Return-Path: ' . $this->from . $this->newline; $header .= 'X-Mailer: PHP/' . phpversion() . $this->newline; $header .= 'MIME-Version: 1.0' . $this->newline; $header .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"' . $this->newline; $header .= 'Content-Transfer-Encoding: 8bit' . $this->newline; $header .= $this->newline; if (!$this->html) { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->text . $this->newline; } else { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '_alt"' . $this->newline . $this->newline; $message .= '--' . $boundary . '_alt' . $this->newline; $message .= '' . $this->newline; $message .= '' . $this->newline; if ($this->text) { $message .= $this->text . $this->newline; } else { $message .= '' . $this->newline; } $message .= '--' . $boundary . '_alt' . $this->newline; $message .= 'Content-Type: text/html; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->html . $this->newline; $message .= '--' . $boundary . '_alt--' . $this->newline; } foreach ($this->attachments as $attachment) { if (file_exists($attachment['file'])) { $handle = fopen($attachment['file'], 'r'); $content = fread($handle, filesize($attachment['file'])); fclose($handle); $message .= '--' . $boundary . $this->newline; $message .= 'Content-Type: application/octetstream' . $this->newline; $message .= 'Content-Transfer-Encoding: base64' . $this->newline; $message .= 'Content-Disposition: attachment; filename="' . basename($attachment['filename']) . '"' . $this->newline; $message .= 'Content-ID: <' . basename($attachment['filename']) . '>' . $this->newline . $this->newline; $message .= chunk_split(base64_encode($content)); } } $message .= '--' . $boundary . '--' . $this->newline; if ($this->protocol == 'mail') { ini_set('sendmail_from', $this->from); if ($this->parameter) { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header, $this->parameter); } else { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header); } } elseif ($this->protocol == 'smtp') { $handle = fsockopen($this->hostname, $this->port, $errno, $errstr, $this->timeout); if (!$handle) { error_log('Error: ' . $errstr . ' (' . $errno . ')'); } else { if (substr(PHP_OS, 0, 3) != 'WIN') { socket_set_timeout($handle, $this->timeout, 0); } while ($line = fgets($handle, 515)) { if (substr($line, 3, 1) == ' ') { break; } } if (substr($this->hostname, 0, 3) == 'tls') { fputs($handle, 'STARTTLS' . $this->crlf); while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 220) { error_log('Error: STARTTLS not accepted from server!'); } } if (!empty($this->username) && !empty($this->password)) { fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: EHLO not accepted from server!'); } fputs($handle, 'AUTH LOGIN' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: AUTH LOGIN not accepted from server!'); } fputs($handle, base64_encode($this->username) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: Username not accepted from server!'); } fputs($handle, base64_encode($this->password) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 235) { error_log('Error: Password not accepted from server!'); } } else { fputs($handle, 'HELO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: HELO not accepted from server!'); } } if ($this->verp) { fputs($handle, 'MAIL FROM: <' . $this->username . '>XVERP' . $this->crlf); } else { fputs($handle, 'MAIL FROM: <' . $this->username . '>' . $this->crlf); } $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: MAIL FROM not accepted from server!'); } if (!is_array($this->to)) { fputs($handle, 'RCPT TO: <' . $this->to . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } else { foreach ($this->to as $recipient) { fputs($handle, 'RCPT TO: <' . $recipient . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } } fputs($handle, 'DATA' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 354) { error_log('Error: DATA not accepted from server!'); } fputs($handle, $header . $message . $this->crlf); fputs($handle, '.' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: DATA not accepted from server!'); } fputs($handle, 'QUIT' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 221) { error_log('Error: QUIT not accepted from server!'); } fclose($handle); } } } } ?> Наличие BOM проверил и ничего не обнаружено Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 идти методом перебора пробовать вместо почты на яндексе указать другой ящик вообще не понимаю - нафига покупать домен, размещать магазин на хостинге, и при этом использовать халявный сторонний ящик :ugeek: пробовать заменить файлы catalog\model\checkout\order.php system\library\mail.php оригинальными из вашего дистрибутива (только копии своих создайте на всякий случай) сравнивать эти ваши файлы с оригинальными, ищите отличия в subject Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 идти методом перебора пробовать вместо почты на яндексе указать другой ящик вообще не понимаю - нафига покупать домен, размещать магазин на хостинге, и при этом использовать халявный сторонний ящик :ugeek: пробовать заменить файлы catalog\model\checkout\order.php system\library\mail.php оригинальными из вашего дистрибутива (только копии своих создайте на всякий случай) сравнивать эти ваши файлы с оригинальными, ищите отличия в subject Добрый день. Пробовал другие ящики, правда бесплатные. Сегодня опробую платный, а-ля Gmail. Вы думаете, что проблема в самом ящике, а не в коде? А вот за эту идею спасибо, с работы вернусь, займусь. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 я про то, что даже если проблема не в ящике/почтовом сервере - все равно стоит использовать одноименное с доменом магазина имя, а не сторонний сервис гораздо больше доверия, когда после заказа приходит письмо с ящика info@домен_магазина, а не с фиг-знает-что-за-имя@mail.ru или подобного ;) Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 я про то, что даже если проблема не в ящике/почтовом сервере - все равно стоит использовать одноименное с доменом магазина имя, а не сторонний сервис гораздо больше доверия, когда после заказа приходит письмо с ящика info@домен_магазина, а не с фиг-знает-что-за-имя@mail.ru или подобного ;) Ну это понятно=) Если быть точным, то мой ящик имеет доменное имя. ***@grossmall.ru Про эти вещи я знаю давно и всегда сужу по себе, потому что когда вижу почту компании а-ля ***@mail.ru, gmail и т.д., то доверие пропадает. А по поводу G-mail я имел ввиду платный ящик с доменным именем, но другого проекта. С Наступающим Новым Годом! Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 Я напряг Сп Рег Ру, они провели тесты, в итоге печальная весть - "Обратитесь к разработчику сайта" - т.е. к самому себе :D Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 Ребята! Решил вопрос. Если у кого будет такая проблема, внимательно посмотрите mail.php в system/library/. В 37-39 строках намутил черт знает что. Вот как было: public function setSubject($subject) { $this->subject = '=?UTF-8?B?' . base64_encode($subject) . '?='; } Вот на что исправил: public function setSubject($subject) {$this->subject = $subject;} Том и Алекс, спасибо за суету, навели на верные мысли :) Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. это принудительное указание кодировки для темы письма. если оно "мешает" - у тебя неправильная кодировка где-то ползет. проверь все свои файлы; особенно те, что касаются заказов (*/checkout/*, и особенно - языковые) - всё должно быть в utf8. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. .. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. скорей всего последний вариант точно не скажу, в деревне сейчас - но по памяти, то ли в 1.5.х, то ли в 2х (а возможно и в обоих) это в оригиналах: $this->subject = $subject; Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. на всякий случай уточню - как было в оригинальном файле движка. Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 1 січня 2016 Автор Share Опубліковано: 1 січня 2016 верни, как было. это принудительное указание кодировки для темы письма. если оно "мешает" - у тебя неправильная кодировка где-то ползет. проверь все свои файлы; особенно те, что касаются заказов (*/checkout/*, и особенно - языковые) - всё должно быть в utf8. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. В кодировке проблем не обнаружено. Проверил файлы на БОМ, проверил скриптом - ничего не обнаружено, ошибка в коде - однозначно. Утверждать точно не смогу, потому что опыт работы с opencart и созданиями сайтов - полтора месяца, но логика подсказывает. Дело в том, что по неопытности, когда еще сайт был на локальном хостинге, не отправлялись письма, поэтому я стал мудрить с кодом (спасибо разным форумам, ресурсам и моему энтузиазму). Видимо перемудренный вариант закинул на сервер, отсюда начались проблемы. До совета Алекса начал спонтанно читать иностранные форумы и ву-аля, нашел правильное отображение $subject. Похимичил и тут все наладилось. Для успокоения души заново скачал клиент OcStore, проверил оригинальный mail.php и там ровно также, как "я исправил" (Алекс - ты прав). Теперь хоть душа спокойна :) P.S у меня OcStore 1.5.5.1.2 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница [Решено] Тема письма =?UTF-8?B?= или =?UTF-8?B?0JLQvtC/0YDQvtGBOiBTd2lzc0RlbnQ=?= Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 Вижу, что файлик полезный, но скачал, залил и в итоге белый экран(( Надіслати Поділитися на інших сайтах More sharing options...
Tom Опубліковано: 30 грудня 2015 Share Опубліковано: 30 грудня 2015 Я дал две ссылки. Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 (змінено) Я дал две ссылки. При попытке запустить оба скрипта, что bomdel.php, что find_bom.php, ничего не происходит, просто белый экран. Либо я кривой, либо что-то, где-то не прописано( Змінено 30 грудня 2015 користувачем Gross1k Надіслати Поділитися на інших сайтах More sharing options... Tom Опубліковано: 30 грудня 2015 Share Опубліковано: 30 грудня 2015 Тогда вариант номер два.Удалить в папке vqmod/xml все вк моды связанные с изменением письма, скачать дистрибутив с той же версией опенкарта что используется и заменить на дефолтные файлы. PS Не забываем делать бэкап любых файлов с которыми производим какие либо манипуляции. Решения выше иногда выпадают в "белый лист" но при этом вносят нужные правки.Обязательно проверить проблему на данном этапе.А то может её уже давно нет. Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 Сейчас попробую, отпишусь о результате. Увы, не помогло. Все такая же проблема с темой письма. У меня есть чувство, что проблема в mail.php. Если у вас есть настроение и возможность, посмотрите своим глазом, пож-ста final class Mail { protected $to; protected $from; protected $sender; protected $subject; protected $text; protected $html; protected $attachments = array(); public $protocol = 'mail'; public $hostname; public $username; public $password; public $port = 25; public $timeout = 5; public $newline = "\r\n"; public $crlf = "\r\n"; public $verp = FALSE; public $parameter = ''; public function setTo($to) { $this->to = $to; } public function setFrom($from) { $this->from = $from; } public function addheader($header, $value) { $this->headers[$header] = $value; } public function setSender($sender) { $this->sender = html_entity_decode($sender); } public function setSubject($subject) { $this->subject= '=?UTF-8?B?' . base64_encode($subject) . '?='; } public function setText($text) { $this->text = $text; } public function setHtml($html) { $this->html = $html; } public function addAttachment($file, $filename = '') { if (!$filename) { $filename = basename($file); } $this->attachments[] = array( 'filename' => $filename, 'file' => $file ); } public function send() { if (!$this->to) { exit('Error: E-Mail to required!'); } if (!$this->from) { exit('Error: E-Mail from required!'); } if (!$this->sender) { exit('Error: E-Mail sender required!'); } if (!$this->subject) { exit('Error: E-Mail subject required!'); } if ((!$this->text) && (!$this->html)) { exit('Error: E-Mail message required!'); } if (is_array($this->to)) { $to = implode(',', $this->to); } else { $to = $this->to; } $boundary = '----=_NextPart_' . md5(time()); $header = ''; if ($this->protocol != 'mail') { $header .= 'To: ' . $to . $this->newline; $header .= 'Subject: ' . '=?UTF-8?B?' . base64_encode($this->subject) . '?=' . $this->newline; } $header .= 'Date: ' . date("D, d M Y H:i:s O") . $this->newline; //$header .= 'From: "' . $this->sender . '" <' . $this->from . '>' . $this->newline; //$header .= 'From: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'From: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . '<' . $this->from . '>' . $this->newline; $header .= 'Reply-To: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'Return-Path: ' . $this->from . $this->newline; $header .= 'X-Mailer: PHP/' . phpversion() . $this->newline; $header .= 'MIME-Version: 1.0' . $this->newline; $header .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"' . $this->newline; $header .= 'Content-Transfer-Encoding: 8bit' . $this->newline; $header .= $this->newline; if (!$this->html) { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->text . $this->newline; } else { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '_alt"' . $this->newline . $this->newline; $message .= '--' . $boundary . '_alt' . $this->newline; $message .= '' . $this->newline; $message .= '' . $this->newline; if ($this->text) { $message .= $this->text . $this->newline; } else { $message .= '' . $this->newline; } $message .= '--' . $boundary . '_alt' . $this->newline; $message .= 'Content-Type: text/html; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->html . $this->newline; $message .= '--' . $boundary . '_alt--' . $this->newline; } foreach ($this->attachments as $attachment) { if (file_exists($attachment['file'])) { $handle = fopen($attachment['file'], 'r'); $content = fread($handle, filesize($attachment['file'])); fclose($handle); $message .= '--' . $boundary . $this->newline; $message .= 'Content-Type: application/octetstream' . $this->newline; $message .= 'Content-Transfer-Encoding: base64' . $this->newline; $message .= 'Content-Disposition: attachment; filename="' . basename($attachment['filename']) . '"' . $this->newline; $message .= 'Content-ID: <' . basename($attachment['filename']) . '>' . $this->newline . $this->newline; $message .= chunk_split(base64_encode($content)); } } $message .= '--' . $boundary . '--' . $this->newline; if ($this->protocol == 'mail') { ini_set('sendmail_from', $this->from); if ($this->parameter) { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header, $this->parameter); } else { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header); } } elseif ($this->protocol == 'smtp') { $handle = fsockopen($this->hostname, $this->port, $errno, $errstr, $this->timeout); if (!$handle) { error_log('Error: ' . $errstr . ' (' . $errno . ')'); } else { if (substr(PHP_OS, 0, 3) != 'WIN') { socket_set_timeout($handle, $this->timeout, 0); } while ($line = fgets($handle, 515)) { if (substr($line, 3, 1) == ' ') { break; } } if (substr($this->hostname, 0, 3) == 'tls') { fputs($handle, 'STARTTLS' . $this->crlf); while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 220) { error_log('Error: STARTTLS not accepted from server!'); } } if (!empty($this->username) && !empty($this->password)) { fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: EHLO not accepted from server!'); } fputs($handle, 'AUTH LOGIN' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: AUTH LOGIN not accepted from server!'); } fputs($handle, base64_encode($this->username) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: Username not accepted from server!'); } fputs($handle, base64_encode($this->password) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 235) { error_log('Error: Password not accepted from server!'); } } else { fputs($handle, 'HELO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: HELO not accepted from server!'); } } if ($this->verp) { fputs($handle, 'MAIL FROM: <' . $this->username . '>XVERP' . $this->crlf); } else { fputs($handle, 'MAIL FROM: <' . $this->username . '>' . $this->crlf); } $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: MAIL FROM not accepted from server!'); } if (!is_array($this->to)) { fputs($handle, 'RCPT TO: <' . $this->to . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } else { foreach ($this->to as $recipient) { fputs($handle, 'RCPT TO: <' . $recipient . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } } fputs($handle, 'DATA' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 354) { error_log('Error: DATA not accepted from server!'); } fputs($handle, $header . $message . $this->crlf); fputs($handle, '.' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: DATA not accepted from server!'); } fputs($handle, 'QUIT' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 221) { error_log('Error: QUIT not accepted from server!'); } fclose($handle); } } } } ?> Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 Сейчас попробую, отпишусь о результате. Увы, не помогло. Все такая же проблема с темой письма. У меня есть чувство, что проблема в mail.php. Если у вас есть настроение и возможность, посмотрите своим глазом, пож-ста final class Mail { protected $to; protected $from; protected $sender; protected $subject; protected $text; protected $html; protected $attachments = array(); public $protocol = 'mail'; public $hostname; public $username; public $password; public $port = 25; public $timeout = 5; public $newline = "\r\n"; public $crlf = "\r\n"; public $verp = FALSE; public $parameter = ''; public function setTo($to) { $this->to = $to; } public function setFrom($from) { $this->from = $from; } public function addheader($header, $value) { $this->headers[$header] = $value; } public function setSender($sender) { $this->sender = html_entity_decode($sender); } public function setSubject($subject) { $this->subject= '=?UTF-8?B?' . base64_encode($subject) . '?='; } public function setText($text) { $this->text = $text; } public function setHtml($html) { $this->html = $html; } public function addAttachment($file, $filename = '') { if (!$filename) { $filename = basename($file); } $this->attachments[] = array( 'filename' => $filename, 'file' => $file ); } public function send() { if (!$this->to) { exit('Error: E-Mail to required!'); } if (!$this->from) { exit('Error: E-Mail from required!'); } if (!$this->sender) { exit('Error: E-Mail sender required!'); } if (!$this->subject) { exit('Error: E-Mail subject required!'); } if ((!$this->text) && (!$this->html)) { exit('Error: E-Mail message required!'); } if (is_array($this->to)) { $to = implode(',', $this->to); } else { $to = $this->to; } $boundary = '----=_NextPart_' . md5(time()); $header = ''; if ($this->protocol != 'mail') { $header .= 'To: ' . $to . $this->newline; $header .= 'Subject: ' . '=?UTF-8?B?' . base64_encode($this->subject) . '?=' . $this->newline; } $header .= 'Date: ' . date("D, d M Y H:i:s O") . $this->newline; //$header .= 'From: "' . $this->sender . '" <' . $this->from . '>' . $this->newline; //$header .= 'From: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'From: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . '<' . $this->from . '>' . $this->newline; $header .= 'Reply-To: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'Return-Path: ' . $this->from . $this->newline; $header .= 'X-Mailer: PHP/' . phpversion() . $this->newline; $header .= 'MIME-Version: 1.0' . $this->newline; $header .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"' . $this->newline; $header .= 'Content-Transfer-Encoding: 8bit' . $this->newline; $header .= $this->newline; if (!$this->html) { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->text . $this->newline; } else { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '_alt"' . $this->newline . $this->newline; $message .= '--' . $boundary . '_alt' . $this->newline; $message .= '' . $this->newline; $message .= '' . $this->newline; if ($this->text) { $message .= $this->text . $this->newline; } else { $message .= '' . $this->newline; } $message .= '--' . $boundary . '_alt' . $this->newline; $message .= 'Content-Type: text/html; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->html . $this->newline; $message .= '--' . $boundary . '_alt--' . $this->newline; } foreach ($this->attachments as $attachment) { if (file_exists($attachment['file'])) { $handle = fopen($attachment['file'], 'r'); $content = fread($handle, filesize($attachment['file'])); fclose($handle); $message .= '--' . $boundary . $this->newline; $message .= 'Content-Type: application/octetstream' . $this->newline; $message .= 'Content-Transfer-Encoding: base64' . $this->newline; $message .= 'Content-Disposition: attachment; filename="' . basename($attachment['filename']) . '"' . $this->newline; $message .= 'Content-ID: <' . basename($attachment['filename']) . '>' . $this->newline . $this->newline; $message .= chunk_split(base64_encode($content)); } } $message .= '--' . $boundary . '--' . $this->newline; if ($this->protocol == 'mail') { ini_set('sendmail_from', $this->from); if ($this->parameter) { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header, $this->parameter); } else { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header); } } elseif ($this->protocol == 'smtp') { $handle = fsockopen($this->hostname, $this->port, $errno, $errstr, $this->timeout); if (!$handle) { error_log('Error: ' . $errstr . ' (' . $errno . ')'); } else { if (substr(PHP_OS, 0, 3) != 'WIN') { socket_set_timeout($handle, $this->timeout, 0); } while ($line = fgets($handle, 515)) { if (substr($line, 3, 1) == ' ') { break; } } if (substr($this->hostname, 0, 3) == 'tls') { fputs($handle, 'STARTTLS' . $this->crlf); while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 220) { error_log('Error: STARTTLS not accepted from server!'); } } if (!empty($this->username) && !empty($this->password)) { fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: EHLO not accepted from server!'); } fputs($handle, 'AUTH LOGIN' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: AUTH LOGIN not accepted from server!'); } fputs($handle, base64_encode($this->username) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: Username not accepted from server!'); } fputs($handle, base64_encode($this->password) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 235) { error_log('Error: Password not accepted from server!'); } } else { fputs($handle, 'HELO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: HELO not accepted from server!'); } } if ($this->verp) { fputs($handle, 'MAIL FROM: <' . $this->username . '>XVERP' . $this->crlf); } else { fputs($handle, 'MAIL FROM: <' . $this->username . '>' . $this->crlf); } $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: MAIL FROM not accepted from server!'); } if (!is_array($this->to)) { fputs($handle, 'RCPT TO: <' . $this->to . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } else { foreach ($this->to as $recipient) { fputs($handle, 'RCPT TO: <' . $recipient . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } } fputs($handle, 'DATA' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 354) { error_log('Error: DATA not accepted from server!'); } fputs($handle, $header . $message . $this->crlf); fputs($handle, '.' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: DATA not accepted from server!'); } fputs($handle, 'QUIT' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 221) { error_log('Error: QUIT not accepted from server!'); } fclose($handle); } } } } ?> Наличие BOM проверил и ничего не обнаружено Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 идти методом перебора пробовать вместо почты на яндексе указать другой ящик вообще не понимаю - нафига покупать домен, размещать магазин на хостинге, и при этом использовать халявный сторонний ящик :ugeek: пробовать заменить файлы catalog\model\checkout\order.php system\library\mail.php оригинальными из вашего дистрибутива (только копии своих создайте на всякий случай) сравнивать эти ваши файлы с оригинальными, ищите отличия в subject Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 идти методом перебора пробовать вместо почты на яндексе указать другой ящик вообще не понимаю - нафига покупать домен, размещать магазин на хостинге, и при этом использовать халявный сторонний ящик :ugeek: пробовать заменить файлы catalog\model\checkout\order.php system\library\mail.php оригинальными из вашего дистрибутива (только копии своих создайте на всякий случай) сравнивать эти ваши файлы с оригинальными, ищите отличия в subject Добрый день. Пробовал другие ящики, правда бесплатные. Сегодня опробую платный, а-ля Gmail. Вы думаете, что проблема в самом ящике, а не в коде? А вот за эту идею спасибо, с работы вернусь, займусь. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 я про то, что даже если проблема не в ящике/почтовом сервере - все равно стоит использовать одноименное с доменом магазина имя, а не сторонний сервис гораздо больше доверия, когда после заказа приходит письмо с ящика info@домен_магазина, а не с фиг-знает-что-за-имя@mail.ru или подобного ;) Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 я про то, что даже если проблема не в ящике/почтовом сервере - все равно стоит использовать одноименное с доменом магазина имя, а не сторонний сервис гораздо больше доверия, когда после заказа приходит письмо с ящика info@домен_магазина, а не с фиг-знает-что-за-имя@mail.ru или подобного ;) Ну это понятно=) Если быть точным, то мой ящик имеет доменное имя. ***@grossmall.ru Про эти вещи я знаю давно и всегда сужу по себе, потому что когда вижу почту компании а-ля ***@mail.ru, gmail и т.д., то доверие пропадает. А по поводу G-mail я имел ввиду платный ящик с доменным именем, но другого проекта. С Наступающим Новым Годом! Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 Я напряг Сп Рег Ру, они провели тесты, в итоге печальная весть - "Обратитесь к разработчику сайта" - т.е. к самому себе :D Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 Ребята! Решил вопрос. Если у кого будет такая проблема, внимательно посмотрите mail.php в system/library/. В 37-39 строках намутил черт знает что. Вот как было: public function setSubject($subject) { $this->subject = '=?UTF-8?B?' . base64_encode($subject) . '?='; } Вот на что исправил: public function setSubject($subject) {$this->subject = $subject;} Том и Алекс, спасибо за суету, навели на верные мысли :) Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. это принудительное указание кодировки для темы письма. если оно "мешает" - у тебя неправильная кодировка где-то ползет. проверь все свои файлы; особенно те, что касаются заказов (*/checkout/*, и особенно - языковые) - всё должно быть в utf8. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. .. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. скорей всего последний вариант точно не скажу, в деревне сейчас - но по памяти, то ли в 1.5.х, то ли в 2х (а возможно и в обоих) это в оригиналах: $this->subject = $subject; Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. на всякий случай уточню - как было в оригинальном файле движка. Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 1 січня 2016 Автор Share Опубліковано: 1 січня 2016 верни, как было. это принудительное указание кодировки для темы письма. если оно "мешает" - у тебя неправильная кодировка где-то ползет. проверь все свои файлы; особенно те, что касаются заказов (*/checkout/*, и особенно - языковые) - всё должно быть в utf8. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. В кодировке проблем не обнаружено. Проверил файлы на БОМ, проверил скриптом - ничего не обнаружено, ошибка в коде - однозначно. Утверждать точно не смогу, потому что опыт работы с opencart и созданиями сайтов - полтора месяца, но логика подсказывает. Дело в том, что по неопытности, когда еще сайт был на локальном хостинге, не отправлялись письма, поэтому я стал мудрить с кодом (спасибо разным форумам, ресурсам и моему энтузиазму). Видимо перемудренный вариант закинул на сервер, отсюда начались проблемы. До совета Алекса начал спонтанно читать иностранные форумы и ву-аля, нашел правильное отображение $subject. Похимичил и тут все наладилось. Для успокоения души заново скачал клиент OcStore, проверил оригинальный mail.php и там ровно также, как "я исправил" (Алекс - ты прав). Теперь хоть душа спокойна :) P.S у меня OcStore 1.5.5.1.2 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница [Решено] Тема письма =?UTF-8?B?= или =?UTF-8?B?0JLQvtC/0YDQvtGBOiBTd2lzc0RlbnQ=?= Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 (змінено) Я дал две ссылки. При попытке запустить оба скрипта, что bomdel.php, что find_bom.php, ничего не происходит, просто белый экран. Либо я кривой, либо что-то, где-то не прописано( Змінено 30 грудня 2015 користувачем Gross1k Надіслати Поділитися на інших сайтах More sharing options...
Tom Опубліковано: 30 грудня 2015 Share Опубліковано: 30 грудня 2015 Тогда вариант номер два.Удалить в папке vqmod/xml все вк моды связанные с изменением письма, скачать дистрибутив с той же версией опенкарта что используется и заменить на дефолтные файлы. PS Не забываем делать бэкап любых файлов с которыми производим какие либо манипуляции. Решения выше иногда выпадают в "белый лист" но при этом вносят нужные правки.Обязательно проверить проблему на данном этапе.А то может её уже давно нет. Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 Сейчас попробую, отпишусь о результате. Увы, не помогло. Все такая же проблема с темой письма. У меня есть чувство, что проблема в mail.php. Если у вас есть настроение и возможность, посмотрите своим глазом, пож-ста final class Mail { protected $to; protected $from; protected $sender; protected $subject; protected $text; protected $html; protected $attachments = array(); public $protocol = 'mail'; public $hostname; public $username; public $password; public $port = 25; public $timeout = 5; public $newline = "\r\n"; public $crlf = "\r\n"; public $verp = FALSE; public $parameter = ''; public function setTo($to) { $this->to = $to; } public function setFrom($from) { $this->from = $from; } public function addheader($header, $value) { $this->headers[$header] = $value; } public function setSender($sender) { $this->sender = html_entity_decode($sender); } public function setSubject($subject) { $this->subject= '=?UTF-8?B?' . base64_encode($subject) . '?='; } public function setText($text) { $this->text = $text; } public function setHtml($html) { $this->html = $html; } public function addAttachment($file, $filename = '') { if (!$filename) { $filename = basename($file); } $this->attachments[] = array( 'filename' => $filename, 'file' => $file ); } public function send() { if (!$this->to) { exit('Error: E-Mail to required!'); } if (!$this->from) { exit('Error: E-Mail from required!'); } if (!$this->sender) { exit('Error: E-Mail sender required!'); } if (!$this->subject) { exit('Error: E-Mail subject required!'); } if ((!$this->text) && (!$this->html)) { exit('Error: E-Mail message required!'); } if (is_array($this->to)) { $to = implode(',', $this->to); } else { $to = $this->to; } $boundary = '----=_NextPart_' . md5(time()); $header = ''; if ($this->protocol != 'mail') { $header .= 'To: ' . $to . $this->newline; $header .= 'Subject: ' . '=?UTF-8?B?' . base64_encode($this->subject) . '?=' . $this->newline; } $header .= 'Date: ' . date("D, d M Y H:i:s O") . $this->newline; //$header .= 'From: "' . $this->sender . '" <' . $this->from . '>' . $this->newline; //$header .= 'From: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'From: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . '<' . $this->from . '>' . $this->newline; $header .= 'Reply-To: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'Return-Path: ' . $this->from . $this->newline; $header .= 'X-Mailer: PHP/' . phpversion() . $this->newline; $header .= 'MIME-Version: 1.0' . $this->newline; $header .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"' . $this->newline; $header .= 'Content-Transfer-Encoding: 8bit' . $this->newline; $header .= $this->newline; if (!$this->html) { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->text . $this->newline; } else { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '_alt"' . $this->newline . $this->newline; $message .= '--' . $boundary . '_alt' . $this->newline; $message .= '' . $this->newline; $message .= '' . $this->newline; if ($this->text) { $message .= $this->text . $this->newline; } else { $message .= '' . $this->newline; } $message .= '--' . $boundary . '_alt' . $this->newline; $message .= 'Content-Type: text/html; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->html . $this->newline; $message .= '--' . $boundary . '_alt--' . $this->newline; } foreach ($this->attachments as $attachment) { if (file_exists($attachment['file'])) { $handle = fopen($attachment['file'], 'r'); $content = fread($handle, filesize($attachment['file'])); fclose($handle); $message .= '--' . $boundary . $this->newline; $message .= 'Content-Type: application/octetstream' . $this->newline; $message .= 'Content-Transfer-Encoding: base64' . $this->newline; $message .= 'Content-Disposition: attachment; filename="' . basename($attachment['filename']) . '"' . $this->newline; $message .= 'Content-ID: <' . basename($attachment['filename']) . '>' . $this->newline . $this->newline; $message .= chunk_split(base64_encode($content)); } } $message .= '--' . $boundary . '--' . $this->newline; if ($this->protocol == 'mail') { ini_set('sendmail_from', $this->from); if ($this->parameter) { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header, $this->parameter); } else { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header); } } elseif ($this->protocol == 'smtp') { $handle = fsockopen($this->hostname, $this->port, $errno, $errstr, $this->timeout); if (!$handle) { error_log('Error: ' . $errstr . ' (' . $errno . ')'); } else { if (substr(PHP_OS, 0, 3) != 'WIN') { socket_set_timeout($handle, $this->timeout, 0); } while ($line = fgets($handle, 515)) { if (substr($line, 3, 1) == ' ') { break; } } if (substr($this->hostname, 0, 3) == 'tls') { fputs($handle, 'STARTTLS' . $this->crlf); while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 220) { error_log('Error: STARTTLS not accepted from server!'); } } if (!empty($this->username) && !empty($this->password)) { fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: EHLO not accepted from server!'); } fputs($handle, 'AUTH LOGIN' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: AUTH LOGIN not accepted from server!'); } fputs($handle, base64_encode($this->username) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: Username not accepted from server!'); } fputs($handle, base64_encode($this->password) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 235) { error_log('Error: Password not accepted from server!'); } } else { fputs($handle, 'HELO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: HELO not accepted from server!'); } } if ($this->verp) { fputs($handle, 'MAIL FROM: <' . $this->username . '>XVERP' . $this->crlf); } else { fputs($handle, 'MAIL FROM: <' . $this->username . '>' . $this->crlf); } $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: MAIL FROM not accepted from server!'); } if (!is_array($this->to)) { fputs($handle, 'RCPT TO: <' . $this->to . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } else { foreach ($this->to as $recipient) { fputs($handle, 'RCPT TO: <' . $recipient . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } } fputs($handle, 'DATA' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 354) { error_log('Error: DATA not accepted from server!'); } fputs($handle, $header . $message . $this->crlf); fputs($handle, '.' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: DATA not accepted from server!'); } fputs($handle, 'QUIT' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 221) { error_log('Error: QUIT not accepted from server!'); } fclose($handle); } } } } ?> Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 Сейчас попробую, отпишусь о результате. Увы, не помогло. Все такая же проблема с темой письма. У меня есть чувство, что проблема в mail.php. Если у вас есть настроение и возможность, посмотрите своим глазом, пож-ста final class Mail { protected $to; protected $from; protected $sender; protected $subject; protected $text; protected $html; protected $attachments = array(); public $protocol = 'mail'; public $hostname; public $username; public $password; public $port = 25; public $timeout = 5; public $newline = "\r\n"; public $crlf = "\r\n"; public $verp = FALSE; public $parameter = ''; public function setTo($to) { $this->to = $to; } public function setFrom($from) { $this->from = $from; } public function addheader($header, $value) { $this->headers[$header] = $value; } public function setSender($sender) { $this->sender = html_entity_decode($sender); } public function setSubject($subject) { $this->subject= '=?UTF-8?B?' . base64_encode($subject) . '?='; } public function setText($text) { $this->text = $text; } public function setHtml($html) { $this->html = $html; } public function addAttachment($file, $filename = '') { if (!$filename) { $filename = basename($file); } $this->attachments[] = array( 'filename' => $filename, 'file' => $file ); } public function send() { if (!$this->to) { exit('Error: E-Mail to required!'); } if (!$this->from) { exit('Error: E-Mail from required!'); } if (!$this->sender) { exit('Error: E-Mail sender required!'); } if (!$this->subject) { exit('Error: E-Mail subject required!'); } if ((!$this->text) && (!$this->html)) { exit('Error: E-Mail message required!'); } if (is_array($this->to)) { $to = implode(',', $this->to); } else { $to = $this->to; } $boundary = '----=_NextPart_' . md5(time()); $header = ''; if ($this->protocol != 'mail') { $header .= 'To: ' . $to . $this->newline; $header .= 'Subject: ' . '=?UTF-8?B?' . base64_encode($this->subject) . '?=' . $this->newline; } $header .= 'Date: ' . date("D, d M Y H:i:s O") . $this->newline; //$header .= 'From: "' . $this->sender . '" <' . $this->from . '>' . $this->newline; //$header .= 'From: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'From: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . '<' . $this->from . '>' . $this->newline; $header .= 'Reply-To: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'Return-Path: ' . $this->from . $this->newline; $header .= 'X-Mailer: PHP/' . phpversion() . $this->newline; $header .= 'MIME-Version: 1.0' . $this->newline; $header .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"' . $this->newline; $header .= 'Content-Transfer-Encoding: 8bit' . $this->newline; $header .= $this->newline; if (!$this->html) { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->text . $this->newline; } else { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '_alt"' . $this->newline . $this->newline; $message .= '--' . $boundary . '_alt' . $this->newline; $message .= '' . $this->newline; $message .= '' . $this->newline; if ($this->text) { $message .= $this->text . $this->newline; } else { $message .= '' . $this->newline; } $message .= '--' . $boundary . '_alt' . $this->newline; $message .= 'Content-Type: text/html; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->html . $this->newline; $message .= '--' . $boundary . '_alt--' . $this->newline; } foreach ($this->attachments as $attachment) { if (file_exists($attachment['file'])) { $handle = fopen($attachment['file'], 'r'); $content = fread($handle, filesize($attachment['file'])); fclose($handle); $message .= '--' . $boundary . $this->newline; $message .= 'Content-Type: application/octetstream' . $this->newline; $message .= 'Content-Transfer-Encoding: base64' . $this->newline; $message .= 'Content-Disposition: attachment; filename="' . basename($attachment['filename']) . '"' . $this->newline; $message .= 'Content-ID: <' . basename($attachment['filename']) . '>' . $this->newline . $this->newline; $message .= chunk_split(base64_encode($content)); } } $message .= '--' . $boundary . '--' . $this->newline; if ($this->protocol == 'mail') { ini_set('sendmail_from', $this->from); if ($this->parameter) { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header, $this->parameter); } else { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header); } } elseif ($this->protocol == 'smtp') { $handle = fsockopen($this->hostname, $this->port, $errno, $errstr, $this->timeout); if (!$handle) { error_log('Error: ' . $errstr . ' (' . $errno . ')'); } else { if (substr(PHP_OS, 0, 3) != 'WIN') { socket_set_timeout($handle, $this->timeout, 0); } while ($line = fgets($handle, 515)) { if (substr($line, 3, 1) == ' ') { break; } } if (substr($this->hostname, 0, 3) == 'tls') { fputs($handle, 'STARTTLS' . $this->crlf); while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 220) { error_log('Error: STARTTLS not accepted from server!'); } } if (!empty($this->username) && !empty($this->password)) { fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: EHLO not accepted from server!'); } fputs($handle, 'AUTH LOGIN' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: AUTH LOGIN not accepted from server!'); } fputs($handle, base64_encode($this->username) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: Username not accepted from server!'); } fputs($handle, base64_encode($this->password) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 235) { error_log('Error: Password not accepted from server!'); } } else { fputs($handle, 'HELO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: HELO not accepted from server!'); } } if ($this->verp) { fputs($handle, 'MAIL FROM: <' . $this->username . '>XVERP' . $this->crlf); } else { fputs($handle, 'MAIL FROM: <' . $this->username . '>' . $this->crlf); } $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: MAIL FROM not accepted from server!'); } if (!is_array($this->to)) { fputs($handle, 'RCPT TO: <' . $this->to . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } else { foreach ($this->to as $recipient) { fputs($handle, 'RCPT TO: <' . $recipient . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } } fputs($handle, 'DATA' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 354) { error_log('Error: DATA not accepted from server!'); } fputs($handle, $header . $message . $this->crlf); fputs($handle, '.' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: DATA not accepted from server!'); } fputs($handle, 'QUIT' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 221) { error_log('Error: QUIT not accepted from server!'); } fclose($handle); } } } } ?> Наличие BOM проверил и ничего не обнаружено Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 идти методом перебора пробовать вместо почты на яндексе указать другой ящик вообще не понимаю - нафига покупать домен, размещать магазин на хостинге, и при этом использовать халявный сторонний ящик :ugeek: пробовать заменить файлы catalog\model\checkout\order.php system\library\mail.php оригинальными из вашего дистрибутива (только копии своих создайте на всякий случай) сравнивать эти ваши файлы с оригинальными, ищите отличия в subject Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 идти методом перебора пробовать вместо почты на яндексе указать другой ящик вообще не понимаю - нафига покупать домен, размещать магазин на хостинге, и при этом использовать халявный сторонний ящик :ugeek: пробовать заменить файлы catalog\model\checkout\order.php system\library\mail.php оригинальными из вашего дистрибутива (только копии своих создайте на всякий случай) сравнивать эти ваши файлы с оригинальными, ищите отличия в subject Добрый день. Пробовал другие ящики, правда бесплатные. Сегодня опробую платный, а-ля Gmail. Вы думаете, что проблема в самом ящике, а не в коде? А вот за эту идею спасибо, с работы вернусь, займусь. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 я про то, что даже если проблема не в ящике/почтовом сервере - все равно стоит использовать одноименное с доменом магазина имя, а не сторонний сервис гораздо больше доверия, когда после заказа приходит письмо с ящика info@домен_магазина, а не с фиг-знает-что-за-имя@mail.ru или подобного ;) Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 я про то, что даже если проблема не в ящике/почтовом сервере - все равно стоит использовать одноименное с доменом магазина имя, а не сторонний сервис гораздо больше доверия, когда после заказа приходит письмо с ящика info@домен_магазина, а не с фиг-знает-что-за-имя@mail.ru или подобного ;) Ну это понятно=) Если быть точным, то мой ящик имеет доменное имя. ***@grossmall.ru Про эти вещи я знаю давно и всегда сужу по себе, потому что когда вижу почту компании а-ля ***@mail.ru, gmail и т.д., то доверие пропадает. А по поводу G-mail я имел ввиду платный ящик с доменным именем, но другого проекта. С Наступающим Новым Годом! Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 Я напряг Сп Рег Ру, они провели тесты, в итоге печальная весть - "Обратитесь к разработчику сайта" - т.е. к самому себе :D Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 Ребята! Решил вопрос. Если у кого будет такая проблема, внимательно посмотрите mail.php в system/library/. В 37-39 строках намутил черт знает что. Вот как было: public function setSubject($subject) { $this->subject = '=?UTF-8?B?' . base64_encode($subject) . '?='; } Вот на что исправил: public function setSubject($subject) {$this->subject = $subject;} Том и Алекс, спасибо за суету, навели на верные мысли :) Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. это принудительное указание кодировки для темы письма. если оно "мешает" - у тебя неправильная кодировка где-то ползет. проверь все свои файлы; особенно те, что касаются заказов (*/checkout/*, и особенно - языковые) - всё должно быть в utf8. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. .. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. скорей всего последний вариант точно не скажу, в деревне сейчас - но по памяти, то ли в 1.5.х, то ли в 2х (а возможно и в обоих) это в оригиналах: $this->subject = $subject; Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. на всякий случай уточню - как было в оригинальном файле движка. Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 1 січня 2016 Автор Share Опубліковано: 1 січня 2016 верни, как было. это принудительное указание кодировки для темы письма. если оно "мешает" - у тебя неправильная кодировка где-то ползет. проверь все свои файлы; особенно те, что касаются заказов (*/checkout/*, и особенно - языковые) - всё должно быть в utf8. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. В кодировке проблем не обнаружено. Проверил файлы на БОМ, проверил скриптом - ничего не обнаружено, ошибка в коде - однозначно. Утверждать точно не смогу, потому что опыт работы с opencart и созданиями сайтов - полтора месяца, но логика подсказывает. Дело в том, что по неопытности, когда еще сайт был на локальном хостинге, не отправлялись письма, поэтому я стал мудрить с кодом (спасибо разным форумам, ресурсам и моему энтузиазму). Видимо перемудренный вариант закинул на сервер, отсюда начались проблемы. До совета Алекса начал спонтанно читать иностранные форумы и ву-аля, нашел правильное отображение $subject. Похимичил и тут все наладилось. Для успокоения души заново скачал клиент OcStore, проверил оригинальный mail.php и там ровно также, как "я исправил" (Алекс - ты прав). Теперь хоть душа спокойна :) P.S у меня OcStore 1.5.5.1.2 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница [Решено] Тема письма =?UTF-8?B?= или =?UTF-8?B?0JLQvtC/0YDQvtGBOiBTd2lzc0RlbnQ=?= Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 Сейчас попробую, отпишусь о результате. Увы, не помогло. Все такая же проблема с темой письма. У меня есть чувство, что проблема в mail.php. Если у вас есть настроение и возможность, посмотрите своим глазом, пож-ста final class Mail { protected $to; protected $from; protected $sender; protected $subject; protected $text; protected $html; protected $attachments = array(); public $protocol = 'mail'; public $hostname; public $username; public $password; public $port = 25; public $timeout = 5; public $newline = "\r\n"; public $crlf = "\r\n"; public $verp = FALSE; public $parameter = ''; public function setTo($to) { $this->to = $to; } public function setFrom($from) { $this->from = $from; } public function addheader($header, $value) { $this->headers[$header] = $value; } public function setSender($sender) { $this->sender = html_entity_decode($sender); } public function setSubject($subject) { $this->subject= '=?UTF-8?B?' . base64_encode($subject) . '?='; } public function setText($text) { $this->text = $text; } public function setHtml($html) { $this->html = $html; } public function addAttachment($file, $filename = '') { if (!$filename) { $filename = basename($file); } $this->attachments[] = array( 'filename' => $filename, 'file' => $file ); } public function send() { if (!$this->to) { exit('Error: E-Mail to required!'); } if (!$this->from) { exit('Error: E-Mail from required!'); } if (!$this->sender) { exit('Error: E-Mail sender required!'); } if (!$this->subject) { exit('Error: E-Mail subject required!'); } if ((!$this->text) && (!$this->html)) { exit('Error: E-Mail message required!'); } if (is_array($this->to)) { $to = implode(',', $this->to); } else { $to = $this->to; } $boundary = '----=_NextPart_' . md5(time()); $header = ''; if ($this->protocol != 'mail') { $header .= 'To: ' . $to . $this->newline; $header .= 'Subject: ' . '=?UTF-8?B?' . base64_encode($this->subject) . '?=' . $this->newline; } $header .= 'Date: ' . date("D, d M Y H:i:s O") . $this->newline; //$header .= 'From: "' . $this->sender . '" <' . $this->from . '>' . $this->newline; //$header .= 'From: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'From: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . '<' . $this->from . '>' . $this->newline; $header .= 'Reply-To: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'Return-Path: ' . $this->from . $this->newline; $header .= 'X-Mailer: PHP/' . phpversion() . $this->newline; $header .= 'MIME-Version: 1.0' . $this->newline; $header .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"' . $this->newline; $header .= 'Content-Transfer-Encoding: 8bit' . $this->newline; $header .= $this->newline; if (!$this->html) { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->text . $this->newline; } else { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '_alt"' . $this->newline . $this->newline; $message .= '--' . $boundary . '_alt' . $this->newline; $message .= '' . $this->newline; $message .= '' . $this->newline; if ($this->text) { $message .= $this->text . $this->newline; } else { $message .= '' . $this->newline; } $message .= '--' . $boundary . '_alt' . $this->newline; $message .= 'Content-Type: text/html; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->html . $this->newline; $message .= '--' . $boundary . '_alt--' . $this->newline; } foreach ($this->attachments as $attachment) { if (file_exists($attachment['file'])) { $handle = fopen($attachment['file'], 'r'); $content = fread($handle, filesize($attachment['file'])); fclose($handle); $message .= '--' . $boundary . $this->newline; $message .= 'Content-Type: application/octetstream' . $this->newline; $message .= 'Content-Transfer-Encoding: base64' . $this->newline; $message .= 'Content-Disposition: attachment; filename="' . basename($attachment['filename']) . '"' . $this->newline; $message .= 'Content-ID: <' . basename($attachment['filename']) . '>' . $this->newline . $this->newline; $message .= chunk_split(base64_encode($content)); } } $message .= '--' . $boundary . '--' . $this->newline; if ($this->protocol == 'mail') { ini_set('sendmail_from', $this->from); if ($this->parameter) { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header, $this->parameter); } else { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header); } } elseif ($this->protocol == 'smtp') { $handle = fsockopen($this->hostname, $this->port, $errno, $errstr, $this->timeout); if (!$handle) { error_log('Error: ' . $errstr . ' (' . $errno . ')'); } else { if (substr(PHP_OS, 0, 3) != 'WIN') { socket_set_timeout($handle, $this->timeout, 0); } while ($line = fgets($handle, 515)) { if (substr($line, 3, 1) == ' ') { break; } } if (substr($this->hostname, 0, 3) == 'tls') { fputs($handle, 'STARTTLS' . $this->crlf); while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 220) { error_log('Error: STARTTLS not accepted from server!'); } } if (!empty($this->username) && !empty($this->password)) { fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: EHLO not accepted from server!'); } fputs($handle, 'AUTH LOGIN' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: AUTH LOGIN not accepted from server!'); } fputs($handle, base64_encode($this->username) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: Username not accepted from server!'); } fputs($handle, base64_encode($this->password) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 235) { error_log('Error: Password not accepted from server!'); } } else { fputs($handle, 'HELO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: HELO not accepted from server!'); } } if ($this->verp) { fputs($handle, 'MAIL FROM: <' . $this->username . '>XVERP' . $this->crlf); } else { fputs($handle, 'MAIL FROM: <' . $this->username . '>' . $this->crlf); } $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: MAIL FROM not accepted from server!'); } if (!is_array($this->to)) { fputs($handle, 'RCPT TO: <' . $this->to . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } else { foreach ($this->to as $recipient) { fputs($handle, 'RCPT TO: <' . $recipient . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } } fputs($handle, 'DATA' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 354) { error_log('Error: DATA not accepted from server!'); } fputs($handle, $header . $message . $this->crlf); fputs($handle, '.' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: DATA not accepted from server!'); } fputs($handle, 'QUIT' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 221) { error_log('Error: QUIT not accepted from server!'); } fclose($handle); } } } } ?> Надіслати Поділитися на інших сайтах More sharing options...
Gross1k Опубліковано: 30 грудня 2015 Автор Share Опубліковано: 30 грудня 2015 Сейчас попробую, отпишусь о результате. Увы, не помогло. Все такая же проблема с темой письма. У меня есть чувство, что проблема в mail.php. Если у вас есть настроение и возможность, посмотрите своим глазом, пож-ста final class Mail { protected $to; protected $from; protected $sender; protected $subject; protected $text; protected $html; protected $attachments = array(); public $protocol = 'mail'; public $hostname; public $username; public $password; public $port = 25; public $timeout = 5; public $newline = "\r\n"; public $crlf = "\r\n"; public $verp = FALSE; public $parameter = ''; public function setTo($to) { $this->to = $to; } public function setFrom($from) { $this->from = $from; } public function addheader($header, $value) { $this->headers[$header] = $value; } public function setSender($sender) { $this->sender = html_entity_decode($sender); } public function setSubject($subject) { $this->subject= '=?UTF-8?B?' . base64_encode($subject) . '?='; } public function setText($text) { $this->text = $text; } public function setHtml($html) { $this->html = $html; } public function addAttachment($file, $filename = '') { if (!$filename) { $filename = basename($file); } $this->attachments[] = array( 'filename' => $filename, 'file' => $file ); } public function send() { if (!$this->to) { exit('Error: E-Mail to required!'); } if (!$this->from) { exit('Error: E-Mail from required!'); } if (!$this->sender) { exit('Error: E-Mail sender required!'); } if (!$this->subject) { exit('Error: E-Mail subject required!'); } if ((!$this->text) && (!$this->html)) { exit('Error: E-Mail message required!'); } if (is_array($this->to)) { $to = implode(',', $this->to); } else { $to = $this->to; } $boundary = '----=_NextPart_' . md5(time()); $header = ''; if ($this->protocol != 'mail') { $header .= 'To: ' . $to . $this->newline; $header .= 'Subject: ' . '=?UTF-8?B?' . base64_encode($this->subject) . '?=' . $this->newline; } $header .= 'Date: ' . date("D, d M Y H:i:s O") . $this->newline; //$header .= 'From: "' . $this->sender . '" <' . $this->from . '>' . $this->newline; //$header .= 'From: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'From: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . '<' . $this->from . '>' . $this->newline; $header .= 'Reply-To: ' . $this->sender . '<' . $this->from . '>' . $this->newline; $header .= 'Return-Path: ' . $this->from . $this->newline; $header .= 'X-Mailer: PHP/' . phpversion() . $this->newline; $header .= 'MIME-Version: 1.0' . $this->newline; $header .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"' . $this->newline; $header .= 'Content-Transfer-Encoding: 8bit' . $this->newline; $header .= $this->newline; if (!$this->html) { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->text . $this->newline; } else { $message = '--' . $boundary . $this->newline; $message .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '_alt"' . $this->newline . $this->newline; $message .= '--' . $boundary . '_alt' . $this->newline; $message .= '' . $this->newline; $message .= '' . $this->newline; if ($this->text) { $message .= $this->text . $this->newline; } else { $message .= '' . $this->newline; } $message .= '--' . $boundary . '_alt' . $this->newline; $message .= 'Content-Type: text/html; charset="utf-8"' . $this->newline; $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; $message .= $this->html . $this->newline; $message .= '--' . $boundary . '_alt--' . $this->newline; } foreach ($this->attachments as $attachment) { if (file_exists($attachment['file'])) { $handle = fopen($attachment['file'], 'r'); $content = fread($handle, filesize($attachment['file'])); fclose($handle); $message .= '--' . $boundary . $this->newline; $message .= 'Content-Type: application/octetstream' . $this->newline; $message .= 'Content-Transfer-Encoding: base64' . $this->newline; $message .= 'Content-Disposition: attachment; filename="' . basename($attachment['filename']) . '"' . $this->newline; $message .= 'Content-ID: <' . basename($attachment['filename']) . '>' . $this->newline . $this->newline; $message .= chunk_split(base64_encode($content)); } } $message .= '--' . $boundary . '--' . $this->newline; if ($this->protocol == 'mail') { ini_set('sendmail_from', $this->from); if ($this->parameter) { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header, $this->parameter); } else { mail($to, '=?UTF-8?B?' . base64_encode($this->subject) . '?=', $message, $header); } } elseif ($this->protocol == 'smtp') { $handle = fsockopen($this->hostname, $this->port, $errno, $errstr, $this->timeout); if (!$handle) { error_log('Error: ' . $errstr . ' (' . $errno . ')'); } else { if (substr(PHP_OS, 0, 3) != 'WIN') { socket_set_timeout($handle, $this->timeout, 0); } while ($line = fgets($handle, 515)) { if (substr($line, 3, 1) == ' ') { break; } } if (substr($this->hostname, 0, 3) == 'tls') { fputs($handle, 'STARTTLS' . $this->crlf); while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 220) { error_log('Error: STARTTLS not accepted from server!'); } } if (!empty($this->username) && !empty($this->password)) { fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: EHLO not accepted from server!'); } fputs($handle, 'AUTH LOGIN' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: AUTH LOGIN not accepted from server!'); } fputs($handle, base64_encode($this->username) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 334) { error_log('Error: Username not accepted from server!'); } fputs($handle, base64_encode($this->password) . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 235) { error_log('Error: Password not accepted from server!'); } } else { fputs($handle, 'HELO ' . getenv('SERVER_NAME') . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: HELO not accepted from server!'); } } if ($this->verp) { fputs($handle, 'MAIL FROM: <' . $this->username . '>XVERP' . $this->crlf); } else { fputs($handle, 'MAIL FROM: <' . $this->username . '>' . $this->crlf); } $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: MAIL FROM not accepted from server!'); } if (!is_array($this->to)) { fputs($handle, 'RCPT TO: <' . $this->to . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } else { foreach ($this->to as $recipient) { fputs($handle, 'RCPT TO: <' . $recipient . '>' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { error_log('Error: RCPT TO not accepted from server!'); } } } fputs($handle, 'DATA' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 354) { error_log('Error: DATA not accepted from server!'); } fputs($handle, $header . $message . $this->crlf); fputs($handle, '.' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 250) { error_log('Error: DATA not accepted from server!'); } fputs($handle, 'QUIT' . $this->crlf); $reply = ''; while ($line = fgets($handle, 515)) { $reply .= $line; if (substr($line, 3, 1) == ' ') { break; } } if (substr($reply, 0, 3) != 221) { error_log('Error: QUIT not accepted from server!'); } fclose($handle); } } } } ?> Наличие BOM проверил и ничего не обнаружено Надіслати Поділитися на інших сайтах More sharing options...
AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 идти методом перебора пробовать вместо почты на яндексе указать другой ящик вообще не понимаю - нафига покупать домен, размещать магазин на хостинге, и при этом использовать халявный сторонний ящик :ugeek: пробовать заменить файлы catalog\model\checkout\order.php system\library\mail.php оригинальными из вашего дистрибутива (только копии своих создайте на всякий случай) сравнивать эти ваши файлы с оригинальными, ищите отличия в subject Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 идти методом перебора пробовать вместо почты на яндексе указать другой ящик вообще не понимаю - нафига покупать домен, размещать магазин на хостинге, и при этом использовать халявный сторонний ящик :ugeek: пробовать заменить файлы catalog\model\checkout\order.php system\library\mail.php оригинальными из вашего дистрибутива (только копии своих создайте на всякий случай) сравнивать эти ваши файлы с оригинальными, ищите отличия в subject Добрый день. Пробовал другие ящики, правда бесплатные. Сегодня опробую платный, а-ля Gmail. Вы думаете, что проблема в самом ящике, а не в коде? А вот за эту идею спасибо, с работы вернусь, займусь. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 я про то, что даже если проблема не в ящике/почтовом сервере - все равно стоит использовать одноименное с доменом магазина имя, а не сторонний сервис гораздо больше доверия, когда после заказа приходит письмо с ящика info@домен_магазина, а не с фиг-знает-что-за-имя@mail.ru или подобного ;) Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 я про то, что даже если проблема не в ящике/почтовом сервере - все равно стоит использовать одноименное с доменом магазина имя, а не сторонний сервис гораздо больше доверия, когда после заказа приходит письмо с ящика info@домен_магазина, а не с фиг-знает-что-за-имя@mail.ru или подобного ;) Ну это понятно=) Если быть точным, то мой ящик имеет доменное имя. ***@grossmall.ru Про эти вещи я знаю давно и всегда сужу по себе, потому что когда вижу почту компании а-ля ***@mail.ru, gmail и т.д., то доверие пропадает. А по поводу G-mail я имел ввиду платный ящик с доменным именем, но другого проекта. С Наступающим Новым Годом! Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 Я напряг Сп Рег Ру, они провели тесты, в итоге печальная весть - "Обратитесь к разработчику сайта" - т.е. к самому себе :D Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 Ребята! Решил вопрос. Если у кого будет такая проблема, внимательно посмотрите mail.php в system/library/. В 37-39 строках намутил черт знает что. Вот как было: public function setSubject($subject) { $this->subject = '=?UTF-8?B?' . base64_encode($subject) . '?='; } Вот на что исправил: public function setSubject($subject) {$this->subject = $subject;} Том и Алекс, спасибо за суету, навели на верные мысли :) Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. это принудительное указание кодировки для темы письма. если оно "мешает" - у тебя неправильная кодировка где-то ползет. проверь все свои файлы; особенно те, что касаются заказов (*/checkout/*, и особенно - языковые) - всё должно быть в utf8. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. .. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. скорей всего последний вариант точно не скажу, в деревне сейчас - но по памяти, то ли в 1.5.х, то ли в 2х (а возможно и в обоих) это в оригиналах: $this->subject = $subject; Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. на всякий случай уточню - как было в оригинальном файле движка. Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 1 січня 2016 Автор Share Опубліковано: 1 січня 2016 верни, как было. это принудительное указание кодировки для темы письма. если оно "мешает" - у тебя неправильная кодировка где-то ползет. проверь все свои файлы; особенно те, что касаются заказов (*/checkout/*, и особенно - языковые) - всё должно быть в utf8. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. В кодировке проблем не обнаружено. Проверил файлы на БОМ, проверил скриптом - ничего не обнаружено, ошибка в коде - однозначно. Утверждать точно не смогу, потому что опыт работы с opencart и созданиями сайтов - полтора месяца, но логика подсказывает. Дело в том, что по неопытности, когда еще сайт был на локальном хостинге, не отправлялись письма, поэтому я стал мудрить с кодом (спасибо разным форумам, ресурсам и моему энтузиазму). Видимо перемудренный вариант закинул на сервер, отсюда начались проблемы. До совета Алекса начал спонтанно читать иностранные форумы и ву-аля, нашел правильное отображение $subject. Похимичил и тут все наладилось. Для успокоения души заново скачал клиент OcStore, проверил оригинальный mail.php и там ровно также, как "я исправил" (Алекс - ты прав). Теперь хоть душа спокойна :) P.S у меня OcStore 1.5.5.1.2 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница [Решено] Тема письма =?UTF-8?B?= или =?UTF-8?B?0JLQvtC/0YDQvtGBOiBTd2lzc0RlbnQ=?= Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 идти методом перебора пробовать вместо почты на яндексе указать другой ящик вообще не понимаю - нафига покупать домен, размещать магазин на хостинге, и при этом использовать халявный сторонний ящик :ugeek: пробовать заменить файлы catalog\model\checkout\order.php system\library\mail.php оригинальными из вашего дистрибутива (только копии своих создайте на всякий случай) сравнивать эти ваши файлы с оригинальными, ищите отличия в subject Добрый день. Пробовал другие ящики, правда бесплатные. Сегодня опробую платный, а-ля Gmail. Вы думаете, что проблема в самом ящике, а не в коде? А вот за эту идею спасибо, с работы вернусь, займусь. Надіслати Поділитися на інших сайтах More sharing options...
AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 я про то, что даже если проблема не в ящике/почтовом сервере - все равно стоит использовать одноименное с доменом магазина имя, а не сторонний сервис гораздо больше доверия, когда после заказа приходит письмо с ящика info@домен_магазина, а не с фиг-знает-что-за-имя@mail.ru или подобного ;) Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 я про то, что даже если проблема не в ящике/почтовом сервере - все равно стоит использовать одноименное с доменом магазина имя, а не сторонний сервис гораздо больше доверия, когда после заказа приходит письмо с ящика info@домен_магазина, а не с фиг-знает-что-за-имя@mail.ru или подобного ;) Ну это понятно=) Если быть точным, то мой ящик имеет доменное имя. ***@grossmall.ru Про эти вещи я знаю давно и всегда сужу по себе, потому что когда вижу почту компании а-ля ***@mail.ru, gmail и т.д., то доверие пропадает. А по поводу G-mail я имел ввиду платный ящик с доменным именем, но другого проекта. С Наступающим Новым Годом! Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 Я напряг Сп Рег Ру, они провели тесты, в итоге печальная весть - "Обратитесь к разработчику сайта" - т.е. к самому себе :D Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 Ребята! Решил вопрос. Если у кого будет такая проблема, внимательно посмотрите mail.php в system/library/. В 37-39 строках намутил черт знает что. Вот как было: public function setSubject($subject) { $this->subject = '=?UTF-8?B?' . base64_encode($subject) . '?='; } Вот на что исправил: public function setSubject($subject) {$this->subject = $subject;} Том и Алекс, спасибо за суету, навели на верные мысли :) Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. это принудительное указание кодировки для темы письма. если оно "мешает" - у тебя неправильная кодировка где-то ползет. проверь все свои файлы; особенно те, что касаются заказов (*/checkout/*, и особенно - языковые) - всё должно быть в utf8. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. .. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. скорей всего последний вариант точно не скажу, в деревне сейчас - но по памяти, то ли в 1.5.х, то ли в 2х (а возможно и в обоих) это в оригиналах: $this->subject = $subject; Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. на всякий случай уточню - как было в оригинальном файле движка. Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 1 січня 2016 Автор Share Опубліковано: 1 січня 2016 верни, как было. это принудительное указание кодировки для темы письма. если оно "мешает" - у тебя неправильная кодировка где-то ползет. проверь все свои файлы; особенно те, что касаются заказов (*/checkout/*, и особенно - языковые) - всё должно быть в utf8. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. В кодировке проблем не обнаружено. Проверил файлы на БОМ, проверил скриптом - ничего не обнаружено, ошибка в коде - однозначно. Утверждать точно не смогу, потому что опыт работы с opencart и созданиями сайтов - полтора месяца, но логика подсказывает. Дело в том, что по неопытности, когда еще сайт был на локальном хостинге, не отправлялись письма, поэтому я стал мудрить с кодом (спасибо разным форумам, ресурсам и моему энтузиазму). Видимо перемудренный вариант закинул на сервер, отсюда начались проблемы. До совета Алекса начал спонтанно читать иностранные форумы и ву-аля, нашел правильное отображение $subject. Похимичил и тут все наладилось. Для успокоения души заново скачал клиент OcStore, проверил оригинальный mail.php и там ровно также, как "я исправил" (Алекс - ты прав). Теперь хоть душа спокойна :) P.S у меня OcStore 1.5.5.1.2 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница [Решено] Тема письма =?UTF-8?B?= или =?UTF-8?B?0JLQvtC/0YDQvtGBOiBTd2lzc0RlbnQ=?= Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 я про то, что даже если проблема не в ящике/почтовом сервере - все равно стоит использовать одноименное с доменом магазина имя, а не сторонний сервис гораздо больше доверия, когда после заказа приходит письмо с ящика info@домен_магазина, а не с фиг-знает-что-за-имя@mail.ru или подобного ;) Ну это понятно=) Если быть точным, то мой ящик имеет доменное имя. ***@grossmall.ru Про эти вещи я знаю давно и всегда сужу по себе, потому что когда вижу почту компании а-ля ***@mail.ru, gmail и т.д., то доверие пропадает. А по поводу G-mail я имел ввиду платный ящик с доменным именем, но другого проекта. С Наступающим Новым Годом! Надіслати Поділитися на інших сайтах More sharing options...
Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 Я напряг Сп Рег Ру, они провели тесты, в итоге печальная весть - "Обратитесь к разработчику сайта" - т.е. к самому себе :D Надіслати Поділитися на інших сайтах More sharing options...
Gross1k Опубліковано: 31 грудня 2015 Автор Share Опубліковано: 31 грудня 2015 Ребята! Решил вопрос. Если у кого будет такая проблема, внимательно посмотрите mail.php в system/library/. В 37-39 строках намутил черт знает что. Вот как было: public function setSubject($subject) { $this->subject = '=?UTF-8?B?' . base64_encode($subject) . '?='; } Вот на что исправил: public function setSubject($subject) {$this->subject = $subject;} Том и Алекс, спасибо за суету, навели на верные мысли :) Надіслати Поділитися на інших сайтах More sharing options...
afwollis Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. это принудительное указание кодировки для темы письма. если оно "мешает" - у тебя неправильная кодировка где-то ползет. проверь все свои файлы; особенно те, что касаются заказов (*/checkout/*, и особенно - языковые) - всё должно быть в utf8. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. .. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. скорей всего последний вариант точно не скажу, в деревне сейчас - но по памяти, то ли в 1.5.х, то ли в 2х (а возможно и в обоих) это в оригиналах: $this->subject = $subject; Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. на всякий случай уточню - как было в оригинальном файле движка. Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 1 січня 2016 Автор Share Опубліковано: 1 січня 2016 верни, как было. это принудительное указание кодировки для темы письма. если оно "мешает" - у тебя неправильная кодировка где-то ползет. проверь все свои файлы; особенно те, что касаются заказов (*/checkout/*, и особенно - языковые) - всё должно быть в utf8. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. В кодировке проблем не обнаружено. Проверил файлы на БОМ, проверил скриптом - ничего не обнаружено, ошибка в коде - однозначно. Утверждать точно не смогу, потому что опыт работы с opencart и созданиями сайтов - полтора месяца, но логика подсказывает. Дело в том, что по неопытности, когда еще сайт был на локальном хостинге, не отправлялись письма, поэтому я стал мудрить с кодом (спасибо разным форумам, ресурсам и моему энтузиазму). Видимо перемудренный вариант закинул на сервер, отсюда начались проблемы. До совета Алекса начал спонтанно читать иностранные форумы и ву-аля, нашел правильное отображение $subject. Похимичил и тут все наладилось. Для успокоения души заново скачал клиент OcStore, проверил оригинальный mail.php и там ровно также, как "я исправил" (Алекс - ты прав). Теперь хоть душа спокойна :) P.S у меня OcStore 1.5.5.1.2 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Песочница [Решено] Тема письма =?UTF-8?B?= или =?UTF-8?B?0JLQvtC/0YDQvtGBOiBTd2lzc0RlbnQ=?=
AlexDW Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. .. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. скорей всего последний вариант точно не скажу, в деревне сейчас - но по памяти, то ли в 1.5.х, то ли в 2х (а возможно и в обоих) это в оригиналах: $this->subject = $subject; Надіслати Поділитися на інших сайтах More sharing options... afwollis Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. на всякий случай уточню - как было в оригинальном файле движка. Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 1 січня 2016 Автор Share Опубліковано: 1 січня 2016 верни, как было. это принудительное указание кодировки для темы письма. если оно "мешает" - у тебя неправильная кодировка где-то ползет. проверь все свои файлы; особенно те, что касаются заказов (*/checkout/*, и особенно - языковые) - всё должно быть в utf8. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. В кодировке проблем не обнаружено. Проверил файлы на БОМ, проверил скриптом - ничего не обнаружено, ошибка в коде - однозначно. Утверждать точно не смогу, потому что опыт работы с opencart и созданиями сайтов - полтора месяца, но логика подсказывает. Дело в том, что по неопытности, когда еще сайт был на локальном хостинге, не отправлялись письма, поэтому я стал мудрить с кодом (спасибо разным форумам, ресурсам и моему энтузиазму). Видимо перемудренный вариант закинул на сервер, отсюда начались проблемы. До совета Алекса начал спонтанно читать иностранные форумы и ву-аля, нашел правильное отображение $subject. Похимичил и тут все наладилось. Для успокоения души заново скачал клиент OcStore, проверил оригинальный mail.php и там ровно также, как "я исправил" (Алекс - ты прав). Теперь хоть душа спокойна :) P.S у меня OcStore 1.5.5.1.2 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
afwollis Опубліковано: 31 грудня 2015 Share Опубліковано: 31 грудня 2015 верни, как было. на всякий случай уточню - как было в оригинальном файле движка. Надіслати Поділитися на інших сайтах More sharing options... Gross1k Опубліковано: 1 січня 2016 Автор Share Опубліковано: 1 січня 2016 верни, как было. это принудительное указание кодировки для темы письма. если оно "мешает" - у тебя неправильная кодировка где-то ползет. проверь все свои файлы; особенно те, что касаются заказов (*/checkout/*, и особенно - языковые) - всё должно быть в utf8. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. В кодировке проблем не обнаружено. Проверил файлы на БОМ, проверил скриптом - ничего не обнаружено, ошибка в коде - однозначно. Утверждать точно не смогу, потому что опыт работы с opencart и созданиями сайтов - полтора месяца, но логика подсказывает. Дело в том, что по неопытности, когда еще сайт был на локальном хостинге, не отправлялись письма, поэтому я стал мудрить с кодом (спасибо разным форумам, ресурсам и моему энтузиазму). Видимо перемудренный вариант закинул на сервер, отсюда начались проблемы. До совета Алекса начал спонтанно читать иностранные форумы и ву-аля, нашел правильное отображение $subject. Похимичил и тут все наладилось. Для успокоения души заново скачал клиент OcStore, проверил оригинальный mail.php и там ровно также, как "я исправил" (Алекс - ты прав). Теперь хоть душа спокойна :) P.S у меня OcStore 1.5.5.1.2 Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1
Gross1k Опубліковано: 1 січня 2016 Автор Share Опубліковано: 1 січня 2016 верни, как было. это принудительное указание кодировки для темы письма. если оно "мешает" - у тебя неправильная кодировка где-то ползет. проверь все свои файлы; особенно те, что касаются заказов (*/checkout/*, и особенно - языковые) - всё должно быть в utf8. еще может быть такое, что сервер(а) при проверках на спам/вирусы портят заголовки и кодировку. В кодировке проблем не обнаружено. Проверил файлы на БОМ, проверил скриптом - ничего не обнаружено, ошибка в коде - однозначно. Утверждать точно не смогу, потому что опыт работы с opencart и созданиями сайтов - полтора месяца, но логика подсказывает. Дело в том, что по неопытности, когда еще сайт был на локальном хостинге, не отправлялись письма, поэтому я стал мудрить с кодом (спасибо разным форумам, ресурсам и моему энтузиазму). Видимо перемудренный вариант закинул на сервер, отсюда начались проблемы. До совета Алекса начал спонтанно читать иностранные форумы и ву-аля, нашел правильное отображение $subject. Похимичил и тут все наладилось. Для успокоения души заново скачал клиент OcStore, проверил оригинальный mail.php и там ровно также, как "я исправил" (Алекс - ты прав). Теперь хоть душа спокойна :) P.S у меня OcStore 1.5.5.1.2 Надіслати Поділитися на інших сайтах More sharing options...
Recommended Posts