[Помогите] Настройка почты

Тема в разделе "OpenCart", создана пользователем mr.Elias, 31 май 2017.

  1. mr.Elias

    mr.Elias

    Регистрация:
    15 июн 2013
    Сообщения:
    319
    Симпатии:
    54
    Друзья, помогите разобраться

    Заполняю форму на странице "свяжитесь с нами", указываю
    ИМЯ - ААА
    ПОЧТА - БББ@ya.ru
    ТЕКСТ ПИСЬМА
    ставлю галку "я не робот"

    и на почту, указанную в общих настройках приходит письмо с Правильным именем, правильным содержанием, но неверным адресом почты (не БББ@ya.ru, а ГГГ@gmail.com), ясен хрен ответить я не могу адресату.

    В настройках Опенкарт есть вкладка "почта"
    Какие там настройки нужно прописать если используется gmail для отправки почты с сайта на gmail?
     
  2. Dotrox

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

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Если ГГГ@gmail.com - это почта админа, то всё правильно.
    Если подставлять отправителем почту из формы, она будет отклоняться всеми (или почти всеми) почтовыми сервисами с ошибкой "550 relay not permitted", потому что нельзя отправлять почту от имени кого угодно - это фишинг.
    Можно добавить к письму поле "Reply-To", тогда проблем быть не должно.
     
    mr.Elias нравится это.
  3. mr.Elias

    mr.Elias

    Регистрация:
    15 июн 2013
    Сообщения:
    319
    Симпатии:
    54
    А как же люди получают письма из этой формы в стандартном опенкарте?
    если мне пишет юзер и я вижу админскую почту - это же дикий баг.
    Как это исправить? может в форме чтото поменять надо?

    Поле стандартной формы на стандартной странице Contact us
    Код:
    <input name="email" value="" id="input-email" class="form-control" type="text">
    Но как мне кажется чтото не то в настройках VPS сервера, потому что я ипользую SMTP Gmail в настройках почты опенкарт, а не PHP mail server
     
    Последнее редактирование: 1 июн 2017
  4. Dotrox

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

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    А вы полистайте форум русскоязычного сообщества ОК - там куча тем о том, что как раз не получают. И во всех случаях решение - поправить класс отправки почты, чтоб отправителем была почта админа, а не из формы.

    Не форме, а в классе Mail. И я уже написал выше, что именно:
     
    mr.Elias нравится это.
  5. mr.Elias

    mr.Elias

    Регистрация:
    15 июн 2013
    Сообщения:
    319
    Симпатии:
    54
    можете ли подсказать куда этот класс добавить? потому что видел человек советует немного иной путь

    Код:
    $mail->setFrom($this->request->post[’email’]);
    
    Вместо нее нужно добавить
    
    $mail->setFrom($this->config->get(‘config_email’)); .
    
    Э, а как я буду узнавать адрес и имя отправителя?
    
    Ищем чуть ниже
    
    $mail->setText(strip_tags(html_entity_decode($this->request->post[‘enquiry’], ENT_QUOTES, ‘UTF-8′)));
    
    и меняем на
    
    $mail->setText(strip_tags(html_entity_decode($this->request->post[‘enquiry’].”\n”.$this->request->post[’email’].” (“.$this->request->post[‘name’].”)”, ENT_QUOTES, ‘UTF-8′)));
    и у меня же VPS, может легче настроить MAIL чем SMTP?
     
    Последнее редактирование: 2 июн 2017
  6. Dotrox

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

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Ну, тут просто адрес отправителя добавляется в тело письма. Это довольно очевидный вариант, который, как я понял, вам не подходит, потому что для ответа нужно вручную прописывать адресата при ответе.

    Если у вас двойка, то всё просто - в /catalog/controller/information/contact.php:
    PHP:
    $mail->setFrom($this->config->get(‘config_email’));
    $mail->setReplyTo($this->request->post[’email’]);
    В 1.5 метода setReplyTo ещё не было, так что там нужно шаманить внутри /system/library/mail.php

    Это ничего не изменит! Дело не в SMTP, а в том, что когда какой-нибудь почтовый сервис получает письмо, он смотрит на адрес отправителя, берёт оттуда домен и проверяет, разрешил ли этот домен отправку почты с ip вашего сервера (а он конечно же не разрешил, как и серверам Gmail). У разных сервисов разная политика на этот счёт: кто-то сразу отклоняет письма с "левых" ip, кто-то отправляет в спам, некоторые делают задержку доставки на какое-то количество часов.
    В общем, нельзя ставить отправителем какие попало адреса.

     
    mr.Elias нравится это.
  7. kas-tet

    kas-tet

    Регистрация:
    1 июн 2018
    Сообщения:
    6
    Симпатии:
    0
    Добрый день, не подскажете эти строки нужно добавить в файл? у меня они есть и все равно нету емейла отправителя в письме(
    Вот участок кода из файла у меня↓
    Код:
        if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
                $mail = new Mail($this->config->get('config_mail_engine'));
                $mail->parameter = $this->config->get('config_mail_parameter');
                $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname');
                $mail->smtp_username = $this->config->get('config_mail_smtp_username');
                $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8');
                $mail->smtp_port = $this->config->get('config_mail_smtp_port');
                $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout');
    
                $mail->setTo($this->config->get('config_email'));
                $mail->setFrom($this->config->get('config_email'));
                 $mail->setFrom($this->config->get(‘config_email’));
                $mail->setReplyTo($this->request->post[’email’]);
                $mail->setReplyTo($this->request->post['email']);
                $mail->setSender(html_entity_decode($this->request->post['name'], ENT_QUOTES, 'UTF-8'));
                $mail->setSubject(html_entity_decode(sprintf($this->language->get('email_subject'), $this->request->post['name']), ENT_QUOTES, 'UTF-8'));
                $mail->setText($this->request->post['enquiry']);
                $mail->send();
    
                $this->response->redirect($this->url->link('information/contact/success'));
            }
    Точнее этот код, там я вставлял для сравнения те строки...

    Код:
    public function index() {
            $this->load->language('information/contact');
    
            $this->document->setTitle($this->language->get('heading_title'));
    
            if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
                $mail = new Mail($this->config->get('config_mail_engine'));
                $mail->parameter = $this->config->get('config_mail_parameter');
                $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname');
                $mail->smtp_username = $this->config->get('config_mail_smtp_username');
                $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8');
                $mail->smtp_port = $this->config->get('config_mail_smtp_port');
                $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout');
    
                $mail->setTo($this->config->get('config_email'));
                $mail->setFrom($this->config->get('config_email'));
                $mail->setReplyTo($this->request->post['email']);
                $mail->setSender(html_entity_decode($this->request->post['name'], ENT_QUOTES, 'UTF-8'));
                $mail->setSubject(html_entity_decode(sprintf($this->language->get('email_subject'), $this->request->post['name']), ENT_QUOTES, 'UTF-8'));
                $mail->setText($this->request->post['enquiry']);
                $mail->send();
    
                $this->response->redirect($this->url->link('information/contact/success'));
            }
    
     
    Lasted edited by : 2 июн 2018
  8. Dotrox

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

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Оно не в письме должно быть, а в заголовках. Если вы попробуете ответить на такое письмо, то адресатом будет почта из ReplyTo.
     
  9. kas-tet

    kas-tet

    Регистрация:
    1 июн 2018
    Сообщения:
    6
    Симпатии:
    0
    Так мне хоть бы и в письме, главное чтобы хоть где-то было. Не подскажешь куда и что вставить?
     
  10. Dotrox

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

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Оно уже должно быть не в письме (выше написал где).
    Если нужно именно в письме, надо приклеить $this->request->post['email'] к $this->request->post['enquiry'].
     
  11. kas-tet

    kas-tet

    Регистрация:
    1 июн 2018
    Сообщения:
    6
    Симпатии:
    0
    Это вот так приклеить?
    Код:
      $mail->setSubject(html_entity_decode(sprintf($this->language->get('email_subject'), $this->request->post['name']), ENT_QUOTES, 'UTF-8'));
                $mail->setText($this->request->post['enquiry'], $this->request->post['email']);
                $mail->send();
    
                $this->response->redirect($this->url->link('information/contact/success'));
    Если так, то так не работает, по другому хз как, пробовал еще варианта 3.... просто я в этом не совсем понимаю:Unknown:
     
    Последнее редактирование: 5 июн 2018
  12. Dotrox

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

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Ну, почти. Для конкатенации строк в php используется символ точки.
    А setText принимает только один аргумент (запятая означает, что вы добавили второй).
     
  13. kas-tet

    kas-tet

    Регистрация:
    1 июн 2018
    Сообщения:
    6
    Симпатии:
    0
    • Не злоупотребляйте размерами шрифта!
    И как быть тогда? Я пробовал:
    Код:
    $mail->setText($this->request->post['enquiry'].$this->request->post['email']);
    
    $mail->setText($this->request->post['enquiry'] + $this->request->post['email']);
    
    $mail->setText($this->request->post['enquiry']. + $this->request->post['email']);
    
    
    Не работает)
    --- Добавлено, 5 июн 2018 ---
    А где вообще менять это все нужно? в
    /catalog/controller/information/contact.php ?????

    Просто я удалил часть текста и никаких изменений, моэет это не этот файл надо? или изменения вступают через какое-то время??
     
    Lasted edited by : 6 июн 2018
  14. Dotrox

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

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Вы знаете, что такое OCMOD (модификаторы)? Знаете, что после любых правок в файлах надо обновлять кеш окмод, чтоб эти правки начали работать?

    Первый вариант правильный. Второй вариант - это конкатенация не для php, а, например, для Python или JS. Третий вариант - полнейший бред.
     
  15. kas-tet

    kas-tet

    Регистрация:
    1 июн 2018
    Сообщения:
    6
    Симпатии:
    0
    А... все, заработало)))) спасибо большущее))) только 1 вопрос, как пробел влепить после текста? а то текст вместе с мейлом слитно приходит...
     
    Последнее редактирование: 6 июн 2018
  16. Dotrox

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

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Точно так же! То есть, просто вклеить между текстом и почтой. Если что, пробел - это вот так: ' '.
     
    skiv14 нравится это.
  17. kas-tet

    kas-tet

    Регистрация:
    1 июн 2018
    Сообщения:
    6
    Симпатии:
    0
    Код:
     $mail->setText($this->request->post['enquiry'].' '.$this->request->post['email']); 
    Если я правильно понял то вот так↑

    Работает) Спасибо еще раз))