Обратный звонок не отправляет SMTP

Тема в разделе "OpenCart", создана пользователем Andreyлф, 3 ноя 2014.

  1. Andreyлф

    Andreyлф

    Регистрация:
    25 янв 2013
    Сообщения:
    144
    Симпатии:
    10
    Настроил отправку почты SMTP уведомления о заказах приходят, а уведомления о просьбе перезвонить нет.

    В логе ошибки

    2014-11-03 2:55:55 - PHP Notice: Error: MAIL FROM not accepted from server! in public_html/system/library/mail.php on line 290
    2014-11-03 2:58:27 - PHP Notice: Error: EHLO not accepted from server! in public_html/system/library/mail.php on line 200
    2014-11-03 2:58:37 - PHP Notice: Error: EHLO not accepted from server! in public_html/system/library/mail.php on line 200
    2014-11-03 3:04:35 - PHP Notice: Error: MAIL FROM not accepted from server! in public_html/system/library/mail.php on line 290

    Может кто сталкивался?
     
  2. chukcha

    chukcha

    Регистрация:
    9 окт 2014
    Сообщения:
    448
    Симпатии:
    119
    обратных звонков бывает хуча туева.
    Возможно, что идет попытка отправки на несуществующий адрес.
    А может... показать может только код.
     
  3. Andreyлф

    Andreyлф

    Регистрация:
    25 янв 2013
    Сообщения:
    144
    Симпатии:
    10
    PHP:
    public function send() {
                    
    $this->language->load('module/callbackphone');

                    
    $sendsemail $this->config->get('callbackphone_email');
                    if (!empty(
    $sendsemail)) {
                      
    $ourmail $this->config->get('callbackphone_email');
                   } else {
                        
    $ourmail $this->config->get('config_email');
                    }

                   
    $mail = new Mail();
                    
    $mail->protocol $this->config->get('config_mail_protocol');
                    
    $mail->parameter $this->config->get('config_mail_parameter');
                    
    $mail->hostname $this->config->get('config_smtp_host');
                    
    $mail->username $this->config->get('config_smtp_username');
                    
    $mail->password $this->config->get('config_smtp_password');
                    
    $mail->port $this->config->get('config_smtp_port');
                    
    $mail->timeout $this->config->get('config_smtp_timeout');
                   
    $mail->setTo($ourmail);
                   
    $mail->setFrom('info@'.substr(preg_replace("#/$#"""$this->config->get('config_url')), 7));
                   
    $mail->setSender('info@'.substr(preg_replace("#/$#"""$this->config->get('config_url')), 7));
                   
    $mail->setSubject("Заказ обратного звонка");
                
                   
    $callbackphonename $this->request->post['callbackphonename'];
                    
    $callbackphonetel $this->request->post['callbackphonetel'];
                    
    $callbackphonecomment $this->request->post['callbackphonecomment'];
                    
    $callup $this->request->post['callup'];
                    
    $callto $this->request->post['callto'];

                    
    $email_callbackphone_name $this->language->get('email_callbackphone_name');
                    
    $email_callbackphone_tel $this->language->get('email_callbackphone_tel');
                    
    $email_callbackphone_comment $this->language->get('email_callbackphone_comment');
                    
    $email_callbackphone_callup $this->language->get('email_callbackphone_callup');
                    
    $email_callbackphone_callto $this->language->get('email_callbackphone_callto');

                      
    $MailCom "$email_callbackphone_name$callbackphonename\r\n$email_callbackphone_tel$callbackphonetel\r\n$email_callbackphone_comment$callbackphonecomment\r\n$email_callbackphone_callup$callup\r\n$email_callbackphone_callto$callto";
                
                   
    $mail->setText(strip_tags(html_entity_decode($MailComENT_QUOTES'UTF-8')));

                    if (!empty(
    $callbackphonename) && !empty($callbackphonetel) && preg_match('/^\p{L}+$/u'$callbackphonename)) {

                    echo 
    $success "Заказ обратного звонка отправлен успешно!<br />Наш менеджер Вам перезвонит.";

                   
    $mail->send();
                  
                    } else {

                    echo 
    $error "Вы не заполнили обязательные поля!";
                  
                    }
    Все настройки как я понимаю берутся из настроек магазина, но письма не отправляются
     
    Lasted edited by : 4 ноя 2014
  4. chukcha

    chukcha

    Регистрация:
    9 окт 2014
    Сообщения:
    448
    Симпатии:
    119
    $sendsemail = $this->config->get('callbackphone_email');
    Это не настройка магазина, а настройка модуля.
    Здесь и должен быть адрес получателя уведомления.
    Если там ПУСТО, то из настроек магазина
    $this->config->get('config_email')
     
  5. Andreyлф

    Andreyлф

    Регистрация:
    25 янв 2013
    Сообщения:
    144
    Симпатии:
    10
    да там пусто, все настройки берутся из настроек магазина, уведомления о заказах приходят, а уведомления о просьбе перезвонить нет.
     
  6. chukcha

    chukcha

    Регистрация:
    9 окт 2014
    Сообщения:
    448
    Симпатии:
    119
    Ну... есть еще фишечка...
    Код:
                   $mail->setFrom('info@'.substr(preg_replace("#/$#", "", $this->config->get('config_url')), 7));
                   $mail->setSender('info@'.substr(preg_replace("#/$#", "", $this->config->get('config_url')), 7));
    Попробуйте это убрать...
    потому что это неверный адрес
     
  7. Andreyлф

    Andreyлф

    Регистрация:
    25 янв 2013
    Сообщения:
    144
    Симпатии:
    10
    Ошибка в логах сменилась на

    2014-11-04 14:45:03 - PHP Notice: Error: E-Mail from required! in public_html/system/library/mail.php on line 56
     
  8. chukcha

    chukcha

    Регистрация:
    9 окт 2014
    Сообщения:
    448
    Симпатии:
    119
    Вы и дальше будете использовать метод тыка?
    Я вам попытаюсь объяснить, что здесь происходит

    Код:
                   $mail->setFrom('info@'.substr(preg_replace("#/$#", "", $this->config->get('config_url')), 7));
                   $mail->setSender('info@'.substr(preg_replace("#/$#", "", $this->config->get('config_url')), 7));
    Устанавливаются два поля заголовков

    Код:
    $header .= 'From: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . '<' . $this->from . '>' . $this->newline;
    Т.е. эти два поля должны существовать
    если $this->sender - это всего лишь текстовое(строковое значение), то $this->from - это адрес.
    From - может быть как от себя к себе

    Отправьте самим себе письмо - посмотрите на служебные заголовки - поймете о чем я говорю
     
    Andreyлф нравится это.