Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


calibr

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>

Надіслати
Поділитися на інших сайтах


  • 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'));
Змінено користувачем Twix87
Надіслати
Поділитися на інших сайтах


  • 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('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 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:

Надіслати
Поділитися на інших сайтах


  • 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']);

Заработало

Надіслати
Поділитися на інших сайтах

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

 

 

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

 

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

Надіслати
Поділитися на інших сайтах

  • 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('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 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

Змінено користувачем Sigizmund
Надіслати
Поділитися на інших сайтах


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

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

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

Надіслати
Поділитися на інших сайтах


  • 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
Надіслати
Поділитися на інших сайтах


  • 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'));

 

Надіслати
Поділитися на інших сайтах


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

 

 

 

 

Надіслати
Поділитися на інших сайтах


  • 5 months later...

Вот со всеми этими косячками справился, но вылез другой прикол: почта настроена на 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 косячит. Сабака, столько времени забрал....)

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.