Jump to content
Sign in to follow this  
calibr

[Решено {yandex такой yandex}] Не отправляются письма выдает ошибку DATA not accepted from server

Recommended Posts

А как теперь узнать обратный адрес покупателя? Он нигде не отображается

Share this post


Link to post
Share on other sites

 

 

Короче я просто удалил весь код и скопировал новый system/library/mail.php. Вроде работает:

 <?phpfinal 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: ' . $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);            }        }    }}?>

 

Cпасибо, вопрос решился.

Share this post


Link to post
Share on other sites

Есть ли простое решение без замены целого файла ?

Share this post


Link to post
Share on other sites

 

Спасибо. Работает, только не:

$mail->setTo($this->config->get('config_email'));

а точнее:

$mail->setFrom($this->config->get('config_email')); 

 

В этом случае действительно теряется мэйл отправителя.

 

Нашел альтернативный способ решения проблемы:

Я меня к сайту прибита "почта для домена" от Яндекса. И в админке Опенкарта для почты выбрано SMTP (smtp.yandex.ru и т.д.).

В такой конфигурации форма обратной связи пытается отправить сообщение с адреса покупателя через SMTP и естественно терпит неудачу.

Для формы обратной связи нужен протокол "mail".

 

Поэтому в файле catalog\controller\information\contact.php я в лоб указал 

Цитирую код начиная с 11-й строки:

 

$mail = new Mail();
//$mail->protocol = $this->config->get('config_mail_protocol');
$mail->protocol = 'mail'; // - принудительный выбор протокола
 
Все работает как часики и не нужно тревожить саппорт яндекса - у них и так много проблем.

 

Share this post


Link to post
Share on other sites

 

 

Короче я просто удалил весь код и скопировал новый system/library/mail.php. Вроде работает:

 
<?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: ' . $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);
            }
        }
    }
}
?>

 

Помогло

Share this post


Link to post
Share on other sites

 

В этом случае действительно теряется мэйл отправителя.

 

Нашел альтернативный способ решения проблемы:

Я меня к сайту прибита "почта для домена" от Яндекса. И в админке Опенкарта для почты выбрано SMTP (smtp.yandex.ru и т.д.).

В такой конфигурации форма обратной связи пытается отправить сообщение с адреса покупателя через SMTP и естественно терпит неудачу.

Для формы обратной связи нужен протокол "mail".

 

Поэтому в файле catalog\controller\information\contact.php я в лоб указал 

Цитирую код начиная с 11-й строки:

 

$mail = new Mail();
//$mail->protocol = $this->config->get('config_mail_protocol');
$mail->protocol = 'mail'; // - принудительный выбор протокола
 
Все работает как часики и не нужно тревожить саппорт яндекса - у них и так много проблем.

 

При отправке письма ошибку не говорит, в логах тоже все чисто, однако на почту ничего не приходит.

Share this post


Link to post
Share on other sites

При отправке письма ошибку не говорит, в логах тоже все чисто, однако на почту ничего не приходит.

Нужно смотреть спам. если там нет то параметры mail. Возможно, что у меня все ок из-за того, что хоть почта у меня от Яши. но на хостинге стоит постфикс с настроеным мэйлом для домена. экспериментировать и отключать его не буду - сайт "боевой"

Share this post


Link to post
Share on other sites

Нужно смотреть спам. если там нет то параметры mail. Возможно, что у меня все ок из-за того, что хоть почта у меня от Яши. но на хостинге стоит постфикс с настроеным мэйлом для домена. экспериментировать и отключать его не буду - сайт "боевой"

Ну видимо поэтому и приходит.

Списался с яшой, посмотрим что ответят. Пока вижу самый простой вариант перейдти на google для бизнеса, как на другом магазине.

Share this post


Link to post
Share on other sites

Помогло

 

На ocStore 1.5.5.1.2 тоже помог данный способ (stb45 сказал(а) 13 Окт 2013 - 4:06 PM:).

Спасибо!

Share this post


Link to post
Share on other sites

Пока использовал почту на своем виртуальном сервере было все ОК.

Затем решил перейти на biz.mail.ru. Установил SMTP протокол, прописал настройки. Уведомления о заказах работают.

 

Но не работает форма обратной связи. Письмо никуда не приходит. 

 

 

РЕШЕНО:

 

В файле \catalog\controller\information\contact.php заменить:
$mail->setFrom($this->request->post['email']);
$mail->setSender($this->request->post['name']);
 

НА это:

$mail->setFrom($this->config->get('config_email'));
$mail->setSender($this->request->post['email']);

Share this post


Link to post
Share on other sites

Большое спасибо stb45! все заработало!

Edited by denisdolgop

Share this post


Link to post
Share on other sites

Сделал как в посте  stb45, ошибки исчезли, но письма по прежнему не приходят ни при регистрации не при других действиях с уведомлениями на почту. Пользую яндекс пдд.

Пробовал и mail и smtp результат все время один и тот же. Действие завершается, письмо не приходит.

 

Проблема решена. Новое правило яндекса, что ящик обязательно должен пройти дорегистрацию, в противном случае он не работает. Зашел в веб интерфейс ящика, заполнил данные и все заработало. Но бещ соыета от stb45 все равно бы ничего не работало, потому что вылезали ошибки. Поэтому спасибо!

Share this post


Link to post
Share on other sites

Перестали приходить письма о новых заказах, не приходят на почту админа и на почту клиента.

Началось со вчерашнего дня, до этого все работало, в логах вот что:

 

2014-12-25 10:54:54 - PHP Warning:  fsockopen() [<a href='function.fsockopen'>function.fsockopen</a>]: unable to connect to ssl://smtp.yandex.ru:465 (Connection timed out) in /home/m/site/ekip/public_html/system/library/mail.php on line 153
2014-12-25 10:54:54 - PHP Notice:  Error: Connection timed out (110) in /home/m/site/ekip/public_html/system/library/mail.php on line 156
2014-12-25 10:57:25 - PHP Warning:  fsockopen() [<a href='function.fsockopen'>function.fsockopen</a>]: unable to connect to ssl://smtp.yandex.ru:465 (Connection timed out) in /home/m/site/ekip/public_html/system/library/mail.php on line 153
2014-12-25 10:57:25 - PHP Notice:  Error: Connection timed out (110) in /home/m/site/ekip/public_html/system/library/mail.php on line 156
2014-12-25 13:07:08 - PHP Warning:  fsockopen() [<a href='function.fsockopen'>function.fsockopen</a>]: unable to connect to ssl://smtp.yandex.ru:465 (Connection timed out) in /home/m/site/ekip/public_html/system/library/mail.php on line 153
2014-12-25 13:07:08 - PHP Notice:  Error: Connection timed out (110) in /home/m/site/ekip/public_html/system/library/mail.php on line 156
 

Share this post


Link to post
Share on other sites

google говорит, что на хабре упоминают возможность использовать порты 25 и 587 для ssl-smtp-yandex вместо 465, и что сам яндекс "это не афиширует":

На 465 порте живёт устаревший SMTPS, который подразумевает установку защищённого содениня сразу. STARTTLS работает на портах 25 и 587, фиг знает почему Яндекс это не афиширует.

__habrahabr.ru/post/237899/#comment_8132881

попробуйте их в настройке

Share this post


Link to post
Share on other sites

google говорит, что на хабре упоминают возможность использовать порты 25 и 587 для ssl-smtp-yandex вместо 465, и что сам яндекс "это не афиширует":

попробуйте их в настройке

Пробовал, ещё больше ошибок

Share this post


Link to post
Share on other sites

информацию из вас пытками доставать? ))

какие ошибки с другими портами?

Share this post


Link to post
Share on other sites

2014-12-25 15:42:23 - PHP Warning:  fsockopen() [<a href='function.fsockopen'>function.fsockopen</a>]: unable to connect to ssl://smtp.yandex.ru:587 (Connection timed out) in /home/m/site/ekip/public_html/system/library/mail.php on line 153

2014-12-25 15:42:23 - PHP Notice:  Error: Connection timed out (110) in /home/m/site/ekip/public_html/system/library/mail.php on line 156

Edited by afwollis
не нужен нам ваш файл

Share this post


Link to post
Share on other sites

ошибки те же самые.

к чему было

Пробовал, ещё больше ошибок

?

верните прежний порт и пинайте поддержку яндекса.

Share this post


Link to post
Share on other sites

ошибки те же самые.

к чему было

?

верните прежний порт и пинайте поддержку яндекса.

Написал им письмо

Share this post


Link to post
Share on other sites

ошибки те же самые.

к чему было

?

верните прежний порт и пинайте поддержку яндекса.

Яндекс вот что ответил:

 

Пожалуйста, пришлите нам tcpdump в момент повторения проблемы – это поможет нашим администраторам найти причину, если она возникает с нашей стороны.

 

Где взять этот tcpdump ?

Share this post


Link to post
Share on other sites

Ребята у меня похожая проблема:

 

2015-01-11 0:09:40 - PHP Notice:  Error: RCPT TO not accepted from server! in /share/CACHEDEV1_DATA/.qpkg/OpenCart/web/system/library/mail.php on line 308

 

Только разница в том, что письма ходят, а проблема возникает при попытке написать обращение во вкладке связаться с нами. Как проблему решать ума не дам, прошу помочь.

Share this post


Link to post
Share on other sites

Ребята у меня похожая проблема:

 

2015-01-11 0:09:40 - PHP Notice:  Error: RCPT TO not accepted from server! in /share/CACHEDEV1_DATA/.qpkg/OpenCart/web/system/library/mail.php on line 308

 

Только разница в том, что письма ходят, а проблема возникает при попытке написать обращение во вкладке связаться с нами. Как проблему решать ума не дам, прошу помочь.

Проблему решил путем внесения изменений в contact.php и mail.php: http://www.expertsos.net/blog/opencart-fixing-notice-error-rcpt-to-not-accepted-from-server/

 

Позволю сделать копирайт решения:

Opencart 1.5 Fix
  • First edit the file catalog/controller/information/contact.php

    Look for line:

    $mail->setFrom($this->request->post['email']);

    in my version it is line 20

    Change it to:

    $mail->setFrom($this->config->get('config_email'));

    What this will do is set the FROM field to be the same as your shop’s main email address.

    You can hardcode (but I wouldn’t recommend it) an email adress here if you want by changing this line to ie:

    $mail->setFrom('[email protected]');

  • Now find the line:

    $mail->setSender($this->request->post['name']);

    It should be below the line we just edited or somwhere near.

    Change it to:

    $mail->setReplyTo($this->request->post['email']);

    $mail->setSender($this->config->get('config_email'));

    What this will do is set your client’s email provided by him in the contact form as reply-to email, so that you’re able to respond automatically to contact form messages by clicking on Reply button.

    It is also setting your shop email address as sender’s name.

  • OK so now we need to edit system/library/mail.php file

    In the beginning you will have line:

    protected $subject;

    Just add this before it:

    protected $replyto;

  • Find line:

    public function setSender($sender) {

    and before it add:

    public function setReplyTo($reply_to) {

    $this->replyto = html_entity_decode($reply_to, ENT_QUOTES, 'UTF-8');

    }

    What we did here is to add REPLY-TO function which is missing in 1.5 (but is present in 2.0) and allows us to set different reply-to addresses than FROM address.

  • Finally find this line:

    $header .= 'Reply-To: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . ' <' . $this->from . '>' . $this->newline;

    and change it to:

    $header .= 'Reply-To: =?UTF-8?B?' . base64_encode($this->replyto) . '?=' . ' <' . $this->replyto . '>' . $this->newline;

    Here we are correcting the way reply-to address is set (it will use the email address your client introduced in the contact form).

    And that’s it!

Opencart 2.0 fix

It is simplier to change in the newest version of OC because there is already a funciton to set Reply-To address.

  • First edit the file catalog/controller/information/contact.php

    Look for line:

    $mail->setFrom($this->request->post['email']);

    in my version it is line 20

    Change it to:

    $mail->setFrom($this->config->get('config_email'));

    What this will do is set the FROM field to be the same as your shop’s main email address.

    You can hardcode (but I wouldn’t recommend it) an email adress here if you want by changing this line to ie:

    $mail->setFrom('[email protected]');

  • Now find this line:

    $mail->setSender($this->request->post['name']);

    It should be below the line we just edited or somwhere around.

    Change it to:

    $mail->setReplyTo($this->request->post['email']);

    $mail->setSender($this->config->get('config_email'));

    What this will do is set your client’s email provided by him in the contact form as reply-to email, so that you’re able to respond automatically to contact form messages by clicking on Reply button.

    It is also setting your shop email address as sender’s name.

  • No we need to edit system/library/mail.php file

    You just need to change one line:

    $header .= 'Reply-To: =?UTF-8?B?' . base64_encode($this->replyto) . '?=' . ' <' . $this->from . '>' . $this->newline;

    change it to:

    $header .= 'Reply-To: =?UTF-8?B?' . base64_encode($this->replyto) . '?=' . ' <' . $this->replyto . '>' . $this->newline;

    Here we are correcting the way reply-to address is set (it will use the email address your client introduced in the contact form).

    Refresh your contact form and try sending a test email.

Share this post


Link to post
Share on other sites

Пока использовал почту на своем виртуальном сервере было все ОК.

Затем решил перейти на biz.mail.ru. Установил SMTP протокол, прописал настройки. Уведомления о заказах работают.

 

Но не работает форма обратной связи. Письмо никуда не приходит. 

 

 

РЕШЕНО:

 

В файле \catalog\controller\information\contact.php заменить:

$mail->setFrom($this->request->post['email']);

$mail->setSender($this->request->post['name']);

 

НА это:

$mail->setFrom($this->config->get('config_email'));

$mail->setSender($this->request->post['email']);

 

Благодарю, помогло на  Ubuntu 14.04.3 LTS+LAMP+OpenCart Version 2.1.0.1 (rs.2)

Edited by Salt

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By Sony
      Доброго времени суток, подскажите может кто устанавливал модуль Yandex Метрики.
      Столкнулся с необходимостью, очень упростил бы работу.
    • By Razrab2018
      При нажатии на кнопку добавления изображения не открывается окно загрузки. Такая проблема по всей админке . OCstore установлен на хостинг. Дефолтный шаблон не менял. 


    • By louise170
      1 200.00 руб
      Скачать/Купить дополнение


      Модуль доставки Почта России
      Модуль предназначен для расчета стоимости доставки Почтой России.
      Цены автоматически берутся через API с сайта http://postcalc.ru
      Обратите внимание на правила использования данного API, в частности на пункты 1, 5 и 6.
      Также имейте ввиду, что Посткальк умеет рассчитывать цены для отправки из России по всему миру. 
      Т.е. если вы находитесь, например, в Корее и хотите отправлять из Кореи через EMS, то эти цены не могут быть получены, так как API таких данных не предоставляет.
       
      Внимание, с 1 июня Посткальке перешел на API 2.0, рекомендуется обновить модуль до версии 4.1

      Возможности
      Доступны различные виды отправлений для отправки заказов по России и по всему миру. Каждый вид отправления может отображаться в зависимости от суммы и веса заказа, кол-ва товаров в заказе, Гео-зоны, городов, групп покупателей, языка. Каждому виду отправления для коррекции цен можно назначить дополнительно вес упаковки и мин. стоимость доставки данного отправления. Различные виды наценок для каждого из видов отправлений. По-умолчанию можно задать регион получателя и средний вес заказа. Ограничения в зависимости от суммы и веса заказа есть не только для каждого вида отправления, но и общие для всего модуля. Есть возможность брать доп. плату за отправку заказа в виде конкретной суммы, либо в виде процента от стоимости заказа. Доп. плата также может быть отрицательной. Для всего заказа можно задать доп. вес упаковки, причем не только конкретное значение, но и в виде процента от веса товаров в заказе. Можно отображать или нет сроки доставки. Можно включить разбиение заказов на несколько отправлений (актуально для больших заказов, в которых несколько товаров и их можно разделить). Гибкая настройка общей заглушки. В качестве суммы заказа можно брать разные суммы, например, только стоимость товаров, или стоимость товаров с учетом скидок. Есть работа с наложенным платежом. Есть разные округления конечной стоимости доставки. Бэкап настроек модуля. При совместной работе с модулем Габариты товаров в каждом отправлении можно учитывать габариты товаров в корзине. При совместной работе с модулем Группы товаров можно учитывать в корзине товары в зависимости от принадлежности к определенной группе. В модуле учитывается вес заказа, то есть для заказов 50 г - будут отображаться письма, для заказов до 2 кг - будут отображаться только способы отправки различного вида бандеролями (те которые отмечены галочками), для заказов более 2 кг и менее 20 кг будут отображаться только способы доставки посылками. Посылки весом больше 20 кг Почта России не отправляет, так что такие заказы нужно разбивать на несколько, если, конечно, это возможно. Для международных отправлений учитывается макс. возможная ценность отправления, и если она превысила 50000 руб. в корзине, то модуль сам выставляет ценность для данного вида отправлений 50000 руб. Для отправлений по России учитывается макс. возможная ценность отправления, и если она превысила 100000 руб. в корзине, то модуль сам выставляет ценность для данного вида отправлений 100000 руб. Можно менять название отправлений. Есть возможность делать разбиение отправлений по максимальному весу указанному в основных настройках модуля, чтобы можно было отправить, например, несколько посылок весом 1 кг - они доходят быстрее. Сроки доставки можно отображать в названии доставки или в описании. Есть возможность заменить индексы, для которых нет инфы по доставке на индексы, для которых инфа есть. К сроку доставки можно добавить любое кол-во дней в настройках модуля. Размер наложенного платежа можно отображать в названии доставки или в описании. Есть поле для ввода множителя для случая наложенного платежа, чтобы можно было брать, например, двойную стоимость за доставку туда-обратно на случай отказа.
        Важная информация для продавцов
      У почты России есть 769 отделений связи (ОПС) сезонной и круглогодичной труднодоступности. Посылки туда в зимнее время не доставляются - только бандероли 1 класс. Модуль автоматически не отображает покупателям из этих регионов другие виды отправлений, кроме 1 класса.
       
      Модуль доставки Почта России совместим с модулями:
      Simple Габариты товаров Группы товаров Автозаполнение адреса, города, индекса, региона по полю адрес - сервис Dadata
        Для второго Опенкарта модуль Почты России совместим с оформлением заказа fastorder, oct_fastorder (шаблоны Shop-store2 и Luxury), с корзинами
      шаблона journal2, Maxystore, Newstorecheckout, Quickcheckout.ocmod, Supercheckout, Unicheckout.
       
      Для Опенкарта 3.x модуль Почты России совместимость с указанными выше корзинами будет делаться по мере необходимости, по запросу людей купивших модуль. Совместная работа с модулями Габариты товаров и Группы товаров появится, когда эти модули будут переведены под Опенкарта 3.x
       
      Никакие системные файлы не затираются, модуль работает на vqmod/ocmod.
       
      Модуль тестировался на OpenCart:
      1.5.4.1 1.5.5.1 1.5.6 1.5.6.4 2.0.0.0 2.0.1.0 2.0.1.1 2.0.2.0 2.0.3.1 2.1.0.1 2.2.0.0 2.3.0.2 3.0.2.0
        Ocstore: 2.3.0.2
       
      Поддерживаемые языки
      русский английский
        Пример работы модуля
      http://ocstore1541.opencartplus.ru/
      http://opencart2.opencartplus.ru/
      http://ocstore2302.opencartplus.ru/
      http://opencart3020.opencartplus.ru/
       
      Демо админки
      http://ocstore1541.opencartplus.ru/admin/
      http://opencart2.opencartplus.ru/admin/
      http://ocstore2302.opencartplus.ru/admin/
      http://opencart3020.opencartplus.ru/admin/
      доступ: demo / demo
       
      Лицензия
      При покупке данного модуля, Вы получаете право установки его на один домен. Лицензионный ключ можно получить по запросу на e-mail, который вы увидите на странице модуля, после его установки.
       
      Установка
      Инструкция по установке находится в файле readme.txt в архиве модуля.
       
      Требования к серверу
      Для работы модуля необходима библиотека curl (на большинстве хостингов она установлена). Проверить это можно с помощью функции phpinfo(); На хостинге должен быть установлен ionCube Loader последней версии (минимум версия 10.0). Чтобы проверить его наличие скачайте этот файл, разархивируйте его содержимое и закачайте в корневую директорию Вашего сайта. После этого откройте в браузере http://ваш_домен/test_ioc_php.php FAQ
      FAQ по модулю Почта России FAQ общие вопросы по Опенкарту  
      Добавил louise170 Добавлено 10.05.2013 Категория Доставки Системные требования наличие curl, PHP 5.6+, ionCube Loader 10+ Метод активации Автоматическая активация Ioncube Loader Требуется OpenCart 3.0
      2.3
      2.2
      2.1
      2.0
      1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.5.1
      1.5.5
      1.5.4.1 ocStore 3.0
      2.3
      2.2
      2.1
      1.5.5.1.2
      1.5.5.1.1
      1.5.5.1
      1.5.4.1.2
      1.5.4.1.1
      1.5.4.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х
      OcShop 1.5.6.4.х Обращение к серверу разработчика Да Старая цена 0  
    • By Leingard
      450.00 руб
      Скачать/Купить дополнение


      CrashReport - отчет о проблемах сайта
      Модуль для обнаружения и последующего решения ошибок и проблем Ваших покупателей. Используя модуль, Вы сможете найти проблемные места Вашего сайта с которыми сталкиваются покупатели. Ошибка 404 - теперь не загадка. Вы будете знать где, когда и как покупатель вышел на отсутствующую страницу или подозрительный запрос.
       
      Обнаружение битых ссылок в поисковой системе на Ваш сайт, так же можно обнаружить при помощи модуля.  
       
      DEMO: OC 3: http://oc30.gameshara.ru/
      DEMO: OC 2.3: http://gameshara.ru/module/
      DEMO: OC 2.1: http://gameshara.ru/ocstore21/
      Админ часть: Admin (Логин и пароль: demo)
       
      Возможности модуля:
      Посещение покупателями страниц с ошибокой 404 Вашего магазина. Откуда перешел и когда. Битые товары которые до сих пор отображаются в поисковой системе или на сайте. При заходе на такие, Вы увидите отчёт. Ошибки категорий или старые категории которые нужно убрать (а посетитель их видит). При посещение таких покупателями, Вы увидите. Старые или отсутствующие производители по которым прошелся пользователь. Отображение IP адресов Подозрительные запросы так же будут отображены в отчёте.  
      Инструкция в архиве.
       
      Лицензия:
      Модуль продается с лицензией на сайт. Одна покупка = Один домен Покупая копию модуля вы получаете право на использование. Распространения модуль платно или бесплатно нарушает лицензию и грозит обнулением покупки, а так же уголовной ответственность предусмотренной статей 146 УК РФ (Нарушение авторских и смежных прав)  Автор оставляет за собой право изменят условия предоставления лицензии, изменения цены и стоков продления лицензии. Все доработки, переработки и изменения функционала не входят в стоимость модуля и оплачиваются отдельно по письменной договоренности с автором.  
      Тип распространения:
      Как есть Добавил Leingard Добавлено 15.04.2019 Категория Отчеты Системные требования PHP 5.6+ Метод активации По запросу в ЛС
      По запросу на почту Ioncube Loader Нет OpenCart 3.0
      2.3
      2.1 ocStore 3.0
      2.3
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х Обращение к серверу разработчика Да Старая цена 500  
    • By Leingard
      Модуль для обнаружения и последующего решения ошибок и проблем Ваших покупателей. Используя модуль, Вы сможете найти проблемные места Вашего сайта с которыми сталкиваются покупатели. Ошибка 404 - теперь не загадка. Вы будете знать где, когда и как покупатель вышел на отсутствующую страницу или подозрительный запрос.
       
      Обнаружение битых ссылок в поисковой системе на Ваш сайт, так же можно обнаружить при помощи модуля.  
       
      DEMO: OC 3: http://oc30.gameshara.ru/
      DEMO: OC 2.3: http://gameshara.ru/module/
      DEMO: OC 2.1: http://gameshara.ru/ocstore21/
      Админ часть: Admin (Логин и пароль: demo)
       
      Возможности модуля:
      Посещение покупателями страниц с ошибокой 404 Вашего магазина. Откуда перешел и когда. Битые товары которые до сих пор отображаются в поисковой системе или на сайте. При заходе на такие, Вы увидите отчёт. Ошибки категорий или старые категории которые нужно убрать (а посетитель их видит). При посещение таких покупателями, Вы увидите. Старые или отсутствующие производители по которым прошелся пользователь. Отображение IP адресов Подозрительные запросы так же будут отображены в отчёте.  
      Инструкция в архиве.
       
      Лицензия:
      Модуль продается с лицензией на сайт. Одна покупка = Один домен Покупая копию модуля вы получаете право на использование. Распространения модуль платно или бесплатно нарушает лицензию и грозит обнулением покупки, а так же уголовной ответственность предусмотренной статей 146 УК РФ (Нарушение авторских и смежных прав)  Автор оставляет за собой право изменят условия предоставления лицензии, изменения цены и стоков продления лицензии. Все доработки, переработки и изменения функционала не входят в стоимость модуля и оплачиваются отдельно по письменной договоренности с автором.  
      Тип распространения:
      Как есть
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.