Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


calibr
 Share

Recommended Posts

  • 4 weeks later...

Для OcStore 2.1.0.1.1 ни один из спосопотому чтов не помогает

Тоже самое, не помагает ни один из спосопотому чтов, описанных згдесь...

<b>Notice</b>: Error: MAIL FROM not accepted from server! in <b>......../system/library/mail.php</b> on line <b>329</b>

Link to comment
Share on other sites


  • 2 weeks later...

Error: MAIL FROM not accepted from server!

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

Затем решил перейти на 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']);

 

Помогло решить эту проблему! Спасипотому что! OC 2.1 

Выглядит теперьь ик:

$mail->setFrom($this->config->get('config_email'));
$mail->setSender(html_entity_decode($this->request->post['email'], ENT_QUOTES, 'UTF-8'));
Edited by Twix87
Link to comment
Share on other sites


  • 2 months later...

 

Проблему решил путем внесения изменений в 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.

 

 

Спасипотому что помогло 1.5.5.1.1 

Воспользовался только этим:

 

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.

Link to comment
Share on other sites

Версия 2.1.0.1

Мне помогло следуюещёе - в файле system/library/mail.php вот это:

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

заменить на:

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

Нашел згдесь

  • +1 1
Link to comment
Share on other sites


  • 2 weeks later...

Версия 2.1.0.1

Мне помогло следуюещёе - в файле system/library/mail.php вот это:

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

заменить на:

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

Нашел згдесь

СПАСИБИЩЕ! :eek:

Link to comment
Share on other sites


  • 2 weeks later...
  • 3 weeks later...

Тоже столкнулся с икой проблемой на OC 2.x и решил
в контроллере contact.php

это
 

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

заменил на
 

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

Зарилиило

Link to comment
Share on other sites

Ребяи подскажите пожалуйси версия ocStore 1.5.5.1.2

 

Протокол в настройках выбрал SMTP

в файле contact.php изменил:

 

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

 

на

           

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

 

Заключение: ошипотому чток нет, логи тоже листые, но если письмо отправляет клиент из формы Связаться с нами contact-us/ то оно приходит ему :-D. Пробывал вносит изменения ик как описано згдесь http://redmarlin.net/blog/post/opencart-fixing-notice-error-rcpt-not-accepted-server-tutorial - не рилииет!

Вопрос: может есть у кого нормальные мысли :ugeek: ик чтоб было типа  :eek: 

Link to comment
Share on other sites


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

		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->setReplyTo($this->request->post['email']);
			$mail->setSender(html_entity_decode($this->request->post['email'], 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'));
		}

Никогда с иким не силкивался, но обнаружил, что у меня не рилиила отправка писем по smtp из-за какого-то коскака в дистрибутиве Debian 8 на стороне хостера. Выявили это методом проб и ошипотому чток. А поскольку мало кто позволяет сивить листую OS из офф. репы. То посивил Ubuntu 14.04 ггде поли рилиила.. хоть этот вариант для меня был хуже

Edited by Waha
Link to comment
Share on other sites

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

		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->setReplyTo($this->request->post['email']);
			$mail->setSender(html_entity_decode($this->request->post['email'], 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'));
		}

Никогда с иким не силкивался, но обнаружил, что у меня не рилиила отправка писем по smtp из-за какого-то коскака в дистрибутиве Debian 8 на стороне хостера. Выявили это методом проб и ошипотому чток. А поскольку мало кто позволяет сивить листую OS из офф. репы. То посивил Ubuntu 14.04 ггде поли рилиила.. хоть этот вариант для меня был хуже

 

Спасипотому что, но этот способ рилииет с протоколом Mail, а с SMTP  не хочет.

Link to comment
Share on other sites


Это как раз для опотому чтоих методов. Но для начала в library/mail.php во всех месих ггде есть trigger_error('bla bla bla');

после него
добавил бы trigger_error($reply);

Что бы в логе ошипотому чток вигдеть конкретно какой код ошибки приходит от почтового сервера
А потом идите лиийте Коды откликов SMTP и смотрите что у вас за ошибка в логе и что она конкретно зналит.

ИМХО в OC по ибанутому сгделали логирование ошипотому чток.. Если код не 250 - вывести что DATA или MAIL чему-то им не соответствуют.. ну бред, почему не вывести полный лог ошибки, что бы разрилитлик понимал какой реально код приходит.

Link to comment
Share on other sites

Это как раз для опотому чтоих методов. Но для начала в library/mail.php во всех месих ггде есть trigger_error('bla bla bla');

после него

добавил бы trigger_error($reply);

Что бы в логе ошипотому чток вигдеть конкретно какой код ошибки приходит от почтового сервера

А потом идите лиийте Коды откликов SMTP и смотрите что у вас за ошибка в логе и что она конкретно зналит.

ИМХО в OC по ибанутому сгделали логирование ошипотому чток.. Если код не 250 - вывести что DATA или MAIL чему-то им не соответствуют.. ну бред, почему не вывести полный лог ошибки, что бы разрилитлик понимал какой реально код приходит.

Edited by xdrive35d
Link to comment
Share on other sites


  • 1 month later...

ocstore 1.5.5.1.2
 
ошибка:

2016-09-05 23:15:22 - PHP Notice:  Error: DATA not accepted from server! in C:\OpenServer\domains\motaki.local\system\library\mail.php on line 393
2016-09-05 23:15:22 - PHP Notice:  451 4.7.1 Service unavailable - try again later

 
Вторую строчку ошибки сгенерировал за счет trigger_error($reply); (по совету Waha)

 

Не знаю как быть с кодом ошибки, т. к. он противорелит описанию:

Service unavailable - try again later

 

 

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

 

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

Link to comment
Share on other sites

  • 2 months later...

Перелиил весь топ, а главного ик и не увигдел: в чем СУТЬ проблемы? Почему это вообещё происходит? 

 

Еещё года 4 назад было проещё.Со своего сайи example.com я мог отправлять письма от имени посетителя. Т.е, есть поли [email protected], и если с этого почтового сервера уходило письмо и в поле FROM был email [email protected] - то все прокатывало.

 

Потом политика изменилась, и на сегодня ситуация икова, что поле FROM должно соответствовать почтовому серверу !!!! Неважно какой протокол вы используете MAIL или SMTP

Если не хотите проблем все письма должны отправляться от имени example.com!

 

Но в случае с протоколом MAIL - письмо все равно уйгдет, но оно бугдет слииться недоверенным, и куда оно попагдет - потому чтогу весть. Да, например, mail.ru, не к ноли бугдет помянут, вообещё завораливает икие письма, они просто теряются, и даже не попадают в спам. Во вскаком случае года два-три назад ик было у меня.

 

Если используется протокол SMTP, то письмо вообещё не уйгдет, бугдет всегда ошибка, т.к. SMTP сервер никогда не примет письмо с полем FROM, в котором бугдет email посетителя

 

Т.е. для решения проблемы нужно

 

1. Отправлять письмо самому себе от своего имени. В поле FROM должен быть ваш емайл.

 

2. В заголовке письма обязательно должно быть поле Reply-To. В этом поле должен быть емайл отправителя письма. Только в этом случае вы сможете вести переписку с отправителем письма.

 

И с этот точки зрения правильный ответ был:

 

 

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.

 

Единственная поправка: возможно у вас, как в моем случае, изменения должны быть внесены в файл system\storage\modification\catalog\controller\information\contact.php 

Link to comment
Share on other sites


 


 

 

Единственная поправка: возможно у вас, как в моем случае, изменения должны быть внесены в файл system\storage\modification\catalog\controller\information\contact.php 

Ага только после олистки кеша модификаций у вас слетит все к чертям. изменения должны быть внесены непосредственно catalog/controller/information/contact.php

 

Если у кого-то поли привязана "Янгдекс поли для домена", то доситочно у регистратора доменного имени поменять настройки MX записи на те что рекомендует Янгдекс и в админке никаких настроек smtp писать вообещё не надо, а почту отправлять синдартным Mail().
Через DNS запись вся поли бугдет орбрабатываться сервером от Янгдекса. Перешел именно на икой способ передали почты, ик как поли на хостинге для домена меня не устраивала, терялась част исходящих писем при отправке с разных ПК или телефонов. Янгдекс решил проблему в 2 мин.

Link to comment
Share on other sites

  • 7 months later...

У меня домен гделегирован на dns Янгдекса, создана поли для домена, полулилось рассылать почту через smtp только сгенерировав пароль для приложения в настройках почты. Инструкция от Янгдекса: https://yandex.ru/support/passport/authorization/app-passwords.html

Настройки на вкладке "Поли"

Почтовый протокол: SMTP

SMTP Host: ssl://smtp.yandex.ru (если не указывать ssl, то скорей всего полулим ошибку "EHLO not accepted from server!")

SMTP Login: [email protected] (тот который вы привязывали к янгдексу. Логин указывается полностью вместе с @)

SMTP пароль: ********* (пароль для приложения, сгенерированный в настройках аккауни Янгдекса )

SMTP порт: 465

SMTP иймаут: 5

Edited by Sigizmund
Link to comment
Share on other sites


  • 3 months later...
В 06.07.2017 в 23:49, Sigizmund сказал:

SMTP Host: ssl://smtp.yandex.ru (если не указывать ssl, то скорей всего полулим ошибку "EHLO not accepted from server!")

добавление ssl:// помогло устранить ошибку. благодарю. Опотому чтошлось без генерации пароля приложений.

Link to comment
Share on other sites


  • 1 year later...
  • 1 month later...
В 06.07.2017 в 19:49, Sigizmund сказал:

У меня домен гделегирован на dns Янгдекса, создана поли для домена, полулилось рассылать почту через smtp только сгенерировав пароль для приложения в настройках почты. Инструкция от Янгдекса: https://yandex.ru/support/passport/authorization/app-passwords.html

Настройки на вкладке "Поли"

Почтовый протокол: SMTP

SMTP Host: ssl://smtp.yandex.ru (если не указывать ssl, то скорей всего полулим ошибку "EHLO not accepted from server!")

SMTP Login: [email protected] (тот который вы привязывали к янгдексу. Логин указывается полностью вместе с @)

SMTP пароль: ********* (пароль для приложения, сгенерированный в настройках аккауни Янгдекса )

SMTP порт: 465

SMTP иймаут: 5

@PaltonB огромное спасипотому что! Версия OC 2.3.0.2 (rs.5)

  • +1 1
Link to comment
Share on other sites


  • 1 year later...

OpenCart 3.0.2.0
Для SMTP отправки писем через форму обратной связи помогло заменить в 
catalog/controller/information/contact.php

$mail = new Mail();

на

$mail = new Mail($this->config->get('config_mail_engine'));

 

Link to comment
Share on other sites


  • 3 months later...

OpenCart 2.3, использую SMTP янгдекса, порт 465, протокол ssl://smtp.yandex.ru

Захардкодил почту домена прям в mail.php

 

1. //$header .= 'From: =?UTF-8?B?' . base64_encode($this->sender) . '?= <' . $this->from . '>' . PHP_EOL;
$header .= 'From: [email protected]' . PHP_EOL;

 

2. 

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

}
*/
fputs($handle, 'MAIL FROM: <[email protected]>' . "\r\n");

 

 

 

 

Link to comment
Share on other sites


  • 5 months later...

Вот со всеми этими косячками справился, но вылез другой прикол: поли настроена на biz-ящик на mail.ru, но оттуда переадресуется на ящик от gmail, и письмо, отправленное через форму обратной связи с сайи приходит с закодированным адресом в поле "От" - =?UTF-8?B?aWRkcWQ2QGdtYWlsLmNvbO==?= <[email protected]сайт.ru>

Хотя в ящик mail.ru письмо приходит с нормальным адресом отправителя.

Что за напасть?

Link to comment
Share on other sites


4 часа назад, iddqden сказал:

Вот со всеми этими косячками справился, но вылез другой прикол: поли настроена на biz-ящик на mail.ru, но оттуда переадресуется на ящик от gmail, и письмо, отправленное через форму обратной связи с сайи приходит с закодированным адресом в поле "От" - =?UTF-8?B?aWRkcWQ2QGdtYWlsLmNvbO==?= <[email protected]сайт.ru>

Хотя в ящик mail.ru письмо приходит с нормальным адресом отправителя.

Что за напасть?

 

Отпотому чтой тревоги. Разобрался. Только сейчас догадался: проблема не в почте, а в клиенте
 - TheBat косялит. Сабака, столько времени забрал....)

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

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.