[Решено] Нужна помощь в настройке кодировки писем

Тема в разделе "OpenCart", создана пользователем cotto51rus, 3 янв 2016.

Статус темы:
Закрыта.
  1. cotto51rus

    cotto51rus

    Регистрация:
    3 янв 2016
    Сообщения:
    232
    Симпатии:
    8
    Делаю тестовый заказ и на почту приходят письма в кодировке такой:
    _alt
    Content-Type: text/plain; charset="utf-8"
    Content-Transfer-Encoding: 8bit

    Благодарим за интерес к товарам LORESS. Ваш заказ получен и поступит в обработку после подтверждения оплаты.

    № заказа: 36
    Дата заказа: 03.01.2016
    Состояние заказа: В обработке

    Р

    ____________________________________________________________

    _alt
    Content-Type: text/html; charset="utf-8"
    Content-Transfer-Encoding: 8bit

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/strict.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>LORESS - заказ 36</title>
    </head>
    <body style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000;">
    <div style="width: 680px;"><a href="http://loress.ru/" title="LORESS"><img src="http://loress.ru/image/data/005-002.png" alt="LORESS" style="margin-bottom: 20px; border: none;" /></a>

    тех поддержка хостинга мне сейчас ответила так: "очевидно у вас в коде где-то переопределяется кодировка письма. Можно попробовать поискать где находится скрипт отправки и добавить заголовок кодировки"
    Теперь остался вопрос за малым где это смотреть))
     
    Lasted edited by : 3 янв 2016
  2. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Клас для отправки почты здесь: /system/library/mail.php
    Но там уже и так везде, где надо, стоят правильные заголовки для utf-8.

    Попробуйте отправить письмо на ящик другого почтового сервиса (лучше всего Gmail).
    Посмотрите, нет ли чего в журнале ошибок.
    Если устанавливали какие-то модули связанные с отправкой почты, отключите их.
     
  3. skiv14

    skiv14

    Регистрация:
    9 июн 2015
    Сообщения:
    437
    Симпатии:
    180
    Я 3 раза заходил в эту тему, у меня тоже самое было.
    Но так и не смог вспомнить как я это решил.

    Помню, что я тогда перешёл с бесплатного тарифа на хостинге и завёл ящик на яндексе (почта для домена).
    Т.е. ящик у меня стал админ@домен-сайта.ru
    При этом, чтобы сделать этот ящик, я менял настройки днс и правил mx записи.

    После этого ошибка исчезла, но что конкретно решило проблему - не подскажу. Возможно, просто так совпало, возможно, что-то из этого списка.
     
  4. cotto51rus

    cotto51rus

    Регистрация:
    3 янв 2016
    Сообщения:
    232
    Симпатии:
    8
    перепробовала все ящики: и гмайл и яндекс и от домена, везде одно и то же..в админке меняла в настройках и майл ставила и smtp, прописывала хост, вобщем все пункты.. ничего не помогло.. уже руки опускаются, что делать то? пока я еще только создаю сайт это не критично, но через неделю буду запускать, как с такими сообщениями вообще работать?(
    у меня кстати стоит симпл, ставил мне его сам создатель модуля Simpl лично, я ему доступ давала в админку, могут быть из за модуля проблемы?
    поковырялась и вот что то нашла.. в этом mail.php

    $this->text = iconv("cp1251", "UTF-8", $this->text);
    cp1251 это ведь тоже кодировка? так и должно быть?
    --- Добавлено, 4 янв 2016 ---
    и что вот это еще значит? Смотрю одни Error, так и должно быть?
    PHP:
    public function send() {
            if (!
    $this->to) {
                
    trigger_error('Error: E-Mail to required!');
                exit();         
            }
            if (!
    $this->from) {
                
    trigger_error('Error: E-Mail from required!');
                exit();                 
            }
            if (!
    $this->sender) {
                
    trigger_error('Error: E-Mail sender required!');
                exit();                 
            }
            if (!
    $this->subject) {
                
    trigger_error('Error: E-Mail subject required!');
                exit();                 
            }
            if ((!
    $this->text) && (!$this->html)) {
                
    trigger_error('Error: E-Mail message required!');
                exit();                 
            }
    и вот это..
    PHP:
            if (substr($reply03) != 220) {
                            
    trigger_error('Error: STARTTLS not accepted from server!');
                            exit();                             
                        }
                    }

                        if (
    substr($reply03) != 250) {
                            
    trigger_error('Error: EHLO not accepted from server!');
                            exit();                             
                        }

                        
    fputs($handle'AUTH LOGIN' $this->crlf);

                        
    $reply '';

           

                        if (
    substr($reply03) != 334) {
                            
    trigger_error('Error: AUTH LOGIN not accepted from server!');
                            exit();                     
                        }

                        
    fputs($handlebase64_encode($this->username) . $this->crlf);

          

                        if (
    substr($reply03) != 334) {
                            
    trigger_error('Error: Username not accepted from server!');
                            exit();                             
                        }


                        if (
    substr($reply03) != 235) {
                            
    trigger_error('Error: Password not accepted from server!');
                            exit();                             
                        }
                    } else {
                        
    fputs($handle'HELO ' getenv('SERVER_NAME') . $this->crlf);

                        
    $reply '';

                        while (
    $line fgets($handle515)) {
                            
    $reply .= $line;

                            if (
    substr($line31) == ' ') {
                                break;
                            }
                        }

                        if (
    substr($reply03) != 250) {
                            
    trigger_error('Error: HELO not accepted from server!');
                            exit();                         
                        }
         

                    if (
    substr($reply03) != 250) {
                        
    trigger_error('Error: MAIL FROM not accepted from server!');
                        exit();                         
                    }

                    if (!
    is_array($this->to)) {
                        
    fputs($handle'RCPT TO: <' $this->to '>' $this->crlf);

                        
    $reply '';

                        while (
    $line fgets($handle515)) {
                            
    $reply .= $line;

                            if (
    substr($line31) == ' ') {
                                break;
                            }
                        }

                        if ((
    substr($reply03) != 250) && (substr($reply03) != 251)) {
                            
    trigger_error('Error: RCPT TO not accepted from server!');
                            exit();                         
                        }
                    } else {
                        foreach (
    $this->to as $recipient) {
                            
    fputs($handle'RCPT TO: <' $recipient '>' $this->crlf);

                            
    $reply '';

                            while (
    $line fgets($handle515)) {
                                
    $reply .= $line;

                                if (
    substr($line31) == ' ') {
                                    break;
                                }
                            }

                            if ((
    substr($reply03) != 250) && (substr($reply03) != 251)) {
                                
    trigger_error('Error: RCPT TO not accepted from server!');
                                exit();                             
                            }
    --- Добавлено, 4 янв 2016 ---
    Мальчики, я вроде решила проблему, не знаю еще толком даже..решила или нет.
    Вобщем в строке $this->text = iconv("cp1251", "UTF-8", $this->text); я cp1251 поменяла на ютф 8 тоже и стало приходить не кракозябра а вот такое
    И еще заметила только что, что в админке в деталях заказа прописаны а вот такие строки, так тоже должно быть?
    User Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
    Accept Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
    Дата добавления: 04.01.2016
    Правильно или нет? подскажите, пожалуйста.
    --- Добавлено, 4 янв 2016 ---
    вобщем получается, что я поменяла в mail.php через нотепад вот так:
    Вместо $this->text = iconv("cp1251", "UTF-8", $this->text);
    сделала $this->text = iconv("UTF-8", "UTF-8", $this->text);
    Я ничего этим не испорчу? сделала копию на всякий пожарный файла
     
    Lasted edited by : 4 янв 2016
  5. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Там такой строки вообще не должно быть (ни в стандартном ОК, ни в ocStore). Нужно было начинать вопрос с того, что у вас нестандартная сборка, а вы вообще не указали ни сборку ни версию.
    В этой строке не надо ничего редактировать, её надо просто полностью закомментировать.

    А почему не должно? Это обработка ошибок при отправке.

    Это данные браузера покупателя. Что вам в них не нравится?
    И вообще, всё, что у вас там есть - всё должно быть (по крайней мере, по замыслу автора сборки) за исключением сообщений об ошибках, которых у вас нет (по крайней мере, вы их не выкладывали). Так что перестаньте спрашивать про всё подряд.

    P.S. Код нужно оборачивать в соответствующие теги, а длинные тексты скрывать под спойлером.
     
  6. cotto51rus

    cotto51rus

    Регистрация:
    3 янв 2016
    Сообщения:
    232
    Симпатии:
    8
    Вопрос решен и тема закрыта, спасибо за помощь!
     
Статус темы:
Закрыта.