Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

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


calibr
 Поделиться

Рекомендованные сообщения

  • 4 недели спустя...

Для 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>

Ссылка на комментарий
Поделиться на других сайтах


  • 2 недели спустя...

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'));
Изменено пользователем Twix87
Ссылка на комментарий
Поделиться на других сайтах


  • 2 месяца спустя...

 

Проблему решил путем внесения изменений в 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('moc.niamodym@pohs');

  • 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('moc.niamodym@pohs');

  • 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.

Ссылка на комментарий
Поделиться на других сайтах

Версия 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
Ссылка на комментарий
Поделиться на других сайтах


  • 2 недели спустя...

Версия 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:

Ссылка на комментарий
Поделиться на других сайтах


  • 2 недели спустя...
  • 3 недели спустя...

Тоже столкнулся с такой проблемой на 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']);

Заработало

Ссылка на комментарий
Поделиться на других сайтах

Ребята подскажите пожалуйста версия 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: 

Ссылка на комментарий
Поделиться на других сайтах


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

		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 где почта работала.. хоть этот вариант для меня был хуже

Изменено пользователем Waha
Ссылка на комментарий
Поделиться на других сайтах

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

		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  не хочет.

Ссылка на комментарий
Поделиться на других сайтах


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

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

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

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

Ссылка на комментарий
Поделиться на других сайтах

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

после него

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

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

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

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

Изменено пользователем xdrive35d
Ссылка на комментарий
Поделиться на других сайтах


  • 1 месяц спустя...

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

 

 

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

 

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

Ссылка на комментарий
Поделиться на других сайтах

Яндекс!!!

Письма приходят с задержкой!

Ссылка на комментарий
Поделиться на других сайтах

  • 2 месяца спустя...

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

 

Еще года 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('moc.niamodym@pohs');

  • 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 

Ссылка на комментарий
Поделиться на других сайтах


 


 

 

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

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

 

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

Ссылка на комментарий
Поделиться на других сайтах

  • 7 месяцев спустя...

У меня домен делегирован на 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

Изменено пользователем Sigizmund
Ссылка на комментарий
Поделиться на других сайтах


  • 3 месяца спустя...
В 06.07.2017 в 23:49, Sigizmund сказал:

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

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

Ссылка на комментарий
Поделиться на других сайтах


  • 1 год спустя...
  • 1 месяц спустя...
В 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
Ссылка на комментарий
Поделиться на других сайтах


  • 1 год спустя...

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

$mail = new Mail();

на

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

 

Ссылка на комментарий
Поделиться на других сайтах


  • 3 месяца спустя...

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");

 

 

 

 

Ссылка на комментарий
Поделиться на других сайтах


  • 5 месяцев спустя...

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

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

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

Ссылка на комментарий
Поделиться на других сайтах


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

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

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

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

 

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

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.