Нет писем только с Обратная свзяь с сайта

Тема в разделе "Ошибки и их решения", создана пользователем PakiToBY, 15 ноя 2016.

  1. PakiToBY

    PakiToBY Новичок

    Сообщения:
    6
    Симпатии:
    0
    При попытки отправить письмо через обратную связь с сайта вылазит ошибка:
    Notice: Error: E-Mail to required! in /.../system/library/mail.php on line 61
    Содержимое:
    public function send() {
    if (!$this->to) {
    trigger_error('Error: E-Mail to required!'); ----вот это 61 строка
    exit();
    }
    Письмо не отправляется...
    Поиском пользовался, дело в том что все остальное работает, регистрация, заказы все в норме...

    Opencart Version 2.1.0.2 (rs.1)
    php+ 5.5
     
    Последнее редактирование: 15 ноя 2016
  2. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    вроде небыло такой ошибки по умолчанию. Вы скорей всего сломали обратную связь... контроллер не тот или модификатор какой нибудь подсунули. Тут нужно смотреть по месту более конкретно.
     
  3. PakiToBY

    PakiToBY Новичок

    Сообщения:
    6
    Симпатии:
    0
    что нужно от меня что бы решить проблему?(а то как то не правильно)
    <?php
    class Mail {
    protected $to;
    protected $from;
    protected $sender;
    protected $reply_to;
    protected $subject;
    protected $text;
    protected $html;
    protected $attachments = array();
    public $protocol = 'mail';
    public $smtp_hostname;
    public $smtp_username;
    public $smtp_password;
    public $smtp_port = 25;
    public $smtp_timeout = 5;
    public $newline = "\n";
    public $verp = false;
    public $parameter = '';

    public function __construct($config = array()) {
    foreach ($config as $key => $value) {
    $this->$key = $value;
    }
    }

    public function setTo($to) {
    $this->to = $to;
    }

    public function setFrom($from) {
    $this->from = $from;
    }

    public function setSender($sender) {
    $this->sender = $sender;
    }

    public function setReplyTo($reply_to) {
    $this->reply_to = $reply_to;
    }

    public function setSubject($subject) {
    $this->subject = $subject;
    }

    public function setText($text) {
    $this->text = $text;
    }

    public function setHtml($html) {
    $this->html = $html;
    }

    public function addAttachment($filename) {
    $this->attachments[] = $filename;
    }

    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();
    }

    if (is_array($this->to)) {
    $to = implode(',', $this->to);
    } else {
    $to = $this->to;
    }

    $boundary = '----=_NextPart_' . md5(time());

    $header = 'MIME-Version: 1.0' . $this->newline;

    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: =?UTF-8?B?' . base64_encode($this->sender) . '?=' . ' <' . $this->from . '>' . $this->newline;

    if (!$this->reply_to) {
    $header .= 'Reply-To: =?UTF-8?B?' . base64_encode($this->sender) . '?=' . ' <' . $this->from . '>' . $this->newline;
    } else {
    $header .= 'Reply-To: =?UTF-8?B?' . base64_encode($this->reply_to) . '?=' . ' <' . $this->reply_to . '>' . $this->newline;
    }

    $header .= 'Return-Path: ' . $this->from . $this->newline;
    $header .= 'X-Mailer: PHP/' . phpversion() . $this->newline;
    $header .= 'Content-Type: multipart/related; boundary="' . $boundary . '"' . $this->newline . $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 .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline;
    $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline;

    if ($this->text) {
    $message .= $this->text . $this->newline;
    } else {
    $message .= 'This is a HTML email and your email client software does not support HTML email!' . $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)) {
    $handle = fopen($attachment, 'r');

    $content = fread($handle, filesize($attachment));

    fclose($handle);

    $message .= '--' . $boundary . $this->newline;
    $message .= 'Content-Type: application/octet-stream; name="' . basename($attachment) . '"' . $this->newline;
    $message .= 'Content-Transfer-Encoding: base64' . $this->newline;
    $message .= 'Content-Disposition: attachment; filename="' . basename($attachment) . '"' . $this->newline;
    $message .= 'Content-ID: <' . basename(urlencode($attachment)) . '>' . $this->newline;
    $message .= 'X-Attachment-Id: ' . basename(urlencode($attachment)) . $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') {
    $tls = substr($this->smtp_hostname, 0, 3) == 'tls';
    $hostname = $tls ? substr($this->smtp_hostname, 6) : $this->smtp_hostname;

    $handle = fsockopen($hostname, $this->smtp_port, $errno, $errstr, $this->smtp_timeout);

    if (!$handle) {
    trigger_error('Error: ' . $errstr . ' (' . $errno . ')');
    exit();
    } else {
    if (substr(PHP_OS, 0, 3) != 'WIN') {
    socket_set_timeout($handle, $this->smtp_timeout, 0);
    }

    while ($line = fgets($handle, 515)) {
    if (substr($line, 3, 1) == ' ') {
    break;
    }
    }

    fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . "\r\n");

    $reply = '';

    while ($line = fgets($handle, 515)) {
    $reply .= $line;

    if (substr($line, 3, 1) == ' ') {
    break;
    }
    }

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

    if ($tls) {
    fputs($handle, 'STARTTLS' . "\r\n");

    $reply = '';

    while ($line = fgets($handle, 515)) {
    $reply .= $line;

    if (substr($line, 3, 1) == ' ') {
    break;
    }
    }

    if (substr($reply, 0, 3) != 220) {
    trigger_error('Error: STARTTLS not accepted from server!');
    exit();
    }

    stream_socket_enable_crypto($handle, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
    }

    if (!empty($this->smtp_username) && !empty($this->smtp_password)) {
    fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . "\r\n");

    $reply = '';

    while ($line = fgets($handle, 515)) {
    $reply .= $line;

    if (substr($line, 3, 1) == ' ') {
    break;
    }
    }

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

    fputs($handle, 'AUTH LOGIN' . "\r\n");

    $reply = '';

    while ($line = fgets($handle, 515)) {
    $reply .= $line;

    if (substr($line, 3, 1) == ' ') {
    break;
    }
    }

    if (substr($reply, 0, 3) != 334) {
    trigger_error('Error: AUTH LOGIN not accepted from server!');
    exit();
    }
     
  4. PakiToBY

    PakiToBY Новичок

    Сообщения:
    6
    Симпатии:
    0
    fputs($handle, base64_encode($this->smtp_username) . "\r\n");

    $reply = '';

    while ($line = fgets($handle, 515)) {
    $reply .= $line;

    if (substr($line, 3, 1) == ' ') {
    break;
    }
    }

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

    fputs($handle, base64_encode($this->smtp_password) . "\r\n");

    $reply = '';

    while ($line = fgets($handle, 515)) {
    $reply .= $line;

    if (substr($line, 3, 1) == ' ') {
    break;
    }
    }

    if (substr($reply, 0, 3) != 235) {
    trigger_error('Error: Password not accepted from server!');
    exit();
    }
    } else {
    fputs($handle, 'HELO ' . getenv('SERVER_NAME') . "\r\n");

    $reply = '';

    while ($line = fgets($handle, 515)) {
    $reply .= $line;

    if (substr($line, 3, 1) == ' ') {
    break;
    }
    }

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

    if ($this->verp) {
    fputs($handle, 'MAIL FROM: <' . $this->from . '>XVERP' . "\r\n");
    } else {
    fputs($handle, 'MAIL FROM: <' . $this->from . '>' . "\r\n");
    }

    $reply = '';

    while ($line = fgets($handle, 515)) {
    $reply .= $line;

    if (substr($line, 3, 1) == ' ') {
    break;
    }
    }

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

    if (!is_array($this->to)) {
    fputs($handle, 'RCPT TO: <' . $this->to . '>' . "\r\n");

    $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)) {
    trigger_error('Error: RCPT TO not accepted from server!');
    exit();
    }
    } else {
    foreach ($this->to as $recipient) {
    fputs($handle, 'RCPT TO: <' . $recipient . '>' . "\r\n");

    $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)) {
    trigger_error('Error: RCPT TO not accepted from server!');
    exit();
    }
    }
    }

    fputs($handle, 'DATA' . "\r\n");

    $reply = '';

    while ($line = fgets($handle, 515)) {
    $reply .= $line;

    if (substr($line, 3, 1) == ' ') {
    break;
    }
    }

    if (substr($reply, 0, 3) != 354) {
    trigger_error('Error: DATA not accepted from server!');
    exit();
    }

    // According to rfc 821 we should not send more than 1000 including the CRLF
    $message = str_replace("\r\n", "\n", $header . $message);
    $message = str_replace("\r", "\n", $message);

    $lines = explode("\n", $message);

    foreach ($lines as $line) {
    $results = str_split($line, 998);

    foreach ($results as $result) {
    if (substr(PHP_OS, 0, 3) != 'WIN') {
    fputs($handle, $result . "\r\n");
    } else {
    fputs($handle, str_replace("\n", "\r\n", $result) . "\r\n");
    }
    }
    }

    fputs($handle, '.' . "\r\n");

    $reply = '';

    while ($line = fgets($handle, 515)) {
    $reply .= $line;

    if (substr($line, 3, 1) == ' ') {
    break;
    }
    }

    if (substr($reply, 0, 3) != 250) {
    trigger_error('Error: DATA not accepted from server!');
    exit();
    }

    fputs($handle, 'QUIT' . "\r\n");

    $reply = '';

    while ($line = fgets($handle, 515)) {
    $reply .= $line;

    if (substr($line, 3, 1) == ' ') {
    break;
    }
    }

    if (substr($reply, 0, 3) != 221) {
    trigger_error('Error: QUIT not accepted from server!');
    exit();
    }

    fclose($handle);
    }
    }
    }
    }
    хостер предлагает изменить sendmail_path
    .
    пробовал не помогает((
    может нужно какие-то файлы из стд сборки заменить(для пробы), если да то какие?
     
  5. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    1. проверить, нет ли гадости типа вкумода
    2. проверить нет ли измененного файла в кеше модификатора mail.php
    3. потом попробовать из соответсвующей версии заменить файл system/library/mail.php
     
  6. PakiToBY

    PakiToBY Новичок

    Сообщения:
    6
    Симпатии:
    0
    помоги со 2-м пунктом что куда копать?
    vqmod вообще нету как я понимаю стоит ocmod
    3-й пункт попробовал без результата((
     
    Последнее редактирование: 16 ноя 2016
  7. Ecsiron

    Ecsiron Продвинутый пользователь

    Сообщения:
    415
    Симпатии:
    53
    В студию /system/storage/logs/ocmod.log
     
  8. PakiToBY

    PakiToBY Новичок

    Сообщения:
    6
    Симпатии:
    0
     

    Вложения:

    • ocmod.txt
      Размер файла:
      97,7 КБ
      Просмотров:
      9
  9. Ecsiron

    Ecsiron Продвинутый пользователь

    Сообщения:
    415
    Симпатии:
    53
    ХЗ
    catalog/controller/information/contact.php проверь. Во всех остальных случаях отправитель сайтовый ящик! А в контактах конфликт, потому-что ящик пользователя, мы там строчки добавляли. Я модификацию выкладывал.Попробуй в этом направлении капнуть.

    Было
    Код:
            if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
                $mail = new Mail();
                $mail->protocol = $this->config->get('config_mail_protocol');
                $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->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'));
            }
    Стало:
    Код:
            if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
                $mail = new Mail();
                $mail->protocol = $this->config->get('config_mail_protocol');
                $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->setSender(html_entity_decode('noreply', ENT_QUOTES, 'UTF-8'));
                $mail->setReplyTo($this->request->post['email']);
            
                $mail->setSubject(html_entity_decode(sprintf($this->language->get('email_subject'), $this->request->post['name']), ENT_QUOTES, 'UTF-8'));
                
                $my_text = $this->request->post['name'] . " " . $this->request->post['email'] . "\r\n" . $this->request->post['telephone'] . "\r\n" . $this->request->post['address'] . "\r\n" . $this->request->post['enquiry'];
                $mail->setText($my_text);
                //$customer_id = $this->model_account_customer->addCustomer($this->request->post);
            
                $mail->send();
    
                $this->response->redirect($this->url->link('information/contact/success'));
            }
    
     
    Последнее редактирование: 17 ноя 2016
    Antony-M и PakiToBY нравится это.
  10. PakiToBY

    PakiToBY Новичок

    Сообщения:
    6
    Симпатии:
    0
    ух ты, красавчик сработало ;) с меня магарыч ;)
    тут правда маленький нюанс вылез)
    дублируется колонка аккаунта которая должна быть справа как я понимаю, и тянется на весь сайт
     

    Вложения:

    • ы.png
      ы.png
      Размер файла:
      33,5 КБ
      Просмотров:
      11
  11. VMS

    VMS Новичок

    Сообщения:
    1
    Симпатии:
    0
    Мне помог такой вариант для ocStore 2.3.0.2
    if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
    $mail = new Mail();
    $mail->protocol = $this->config->get('config_mail_protocol');
    $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->setSender(html_entity_decode('Обратная связь', ENT_QUOTES, 'UTF-8'));
    $mail->setReplyTo($this->request->post['email']);
    $mail->setSubject(html_entity_decode(sprintf($this->language->get('email_subject'), $this->request->post['name']), ENT_QUOTES, 'UTF-8'));
    $mail->setText($this->request->post['name'] . " " . $this->request->post['email'] . "\r\n" . $this->request->post['enquiry']);
    $mail->send();

    $this->response->redirect($this->url->link('information/contact/success'));
    }
     
  12. zaga28

    zaga28 Новичок

    Сообщения:
    7
    Симпатии:
    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->setSender(html_entity_decode('noreply', ENT_QUOTES, 'UTF-8'));
    $mail->setReplyTo($this->request->post['email']);

    $mail->setSubject(html_entity_decode(sprintf($this->language->get('email_subject'), $this->request->post['name']), ENT_QUOTES, 'UTF-8'));

    $my_text = $this->request->post['name'] . " " . $this->request->post['email'] . "\r\n" . $this->request->post['telephone'] . "\r\n" . $this->request->post['address'] . "\r\n" . $this->request->post['enquiry'];
    $mail->setText($my_text);
    //$customer_id = $this->model_account_customer->addCustomer($this->request->post);

    $mail->send();

    с чем мб проблема?
     
  13. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    Проверяйте папку спам. Попереписывайтесь с хостером, пусть посмотрит, вдруг ошибки. Пробуйте настроить смтп, итд. Как говорил ранее, нужно изучить подробно почему не доходит или может не отправляется. Это разное если что.