2015-05-08 2 views
1

Я недавно обновил OpenCart 1.5.6.4 до OpenCart 2.0.2.0.OpenCart 2.0.2.0 fsockopen() ошибка после обновления

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

Кроме того, я не могу отправить электронное письмо.

Ниже приведены параметры почты, которые я использую в OpenCart 2.0.2.0:

Mail Protocol : SMTP 
SMTP Hostname : mail.mydomain.com 
SMTP Username : [email protected] 
SMTP Password : myPassword 
SMTP Port  : 25 
SMTP Timeout : 10 

Каждый раз, когда я пытаюсь зарегистрировать пользователя или восстановить пароль, я получаю следующее сообщение об ошибке:

Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/xxxxx/public_html/system/library/mail.php on line 168Warning: fsockopen(): unable to connect to :25 (php_network_getaddresses: getaddrinfo failed: Name or service not known) in /home/xxxxxx/public_html/system/library/mail.php on line 168Notice: Error: php_network_getaddresses: getaddrinfo failed: Name or service not known (0) in /home/xxxxxx/public_html/system/library/mail.php on line 171

Кодекса для /system/library/mail.php ниже:

<?php 
    class Mail { 
    protected $to; 
    protected $from; 
    protected $sender; 
    protected $replyto; 
    protected $subject; 
    protected $text; 
    protected $html; 
    protected $attachments = array(); 
    public $protocol = 'mail'; 
    public $smtp_hostname; 
    public $smtp_username; 
    public $smtp_password; 
    public $smtp_port = 25; 
    public $smtp_timeout = 5; 
    public $newline = "\n"; 
    public $verp = false; 
    public $parameter = ''; 

    public function __construct($config = array()) { 
     foreach ($config as $key => $value) { 
      $this->$key = $value; 
     } 
    } 

    public function setTo($to) { 
     $this->to = $to; 
    } 

    public function setFrom($from) { 
     $this->from = $from; 
    } 

    public function setSender($sender) { 
     $this->sender = $sender; 
    } 

    public function setReplyTo($reply_to) { 
     $this->replyto = $reply_to; 
    } 

    public function setSubject($subject) { 
     $this->subject = $subject; 
    } 

    public function setText($text) { 
     $this->text = $text; 
    } 

    public function setHtml($html) { 
     $this->html = $html; 
    } 

    public function addAttachment($filename) { 
     $this->attachments[] = $filename; 
    } 

    public function send() { 
     if (!$this->to) { 
      trigger_error('Error: E-Mail to required!'); 
      exit(); 
     } 

     if (!$this->from) { 
      trigger_error('Error: E-Mail from required!'); 
      exit(); 
     } 

     if (!$this->sender) { 
      trigger_error('Error: E-Mail sender required!'); 
      exit(); 
     } 

     if (!$this->subject) { 
      trigger_error('Error: E-Mail subject required!'); 
      exit(); 
     } 

     if ((!$this->text) && (!$this->html)) { 
      trigger_error('Error: E-Mail message required!'); 
      exit(); 
     } 

     if (!$this->replyto) { 
      $this->setReplyTo($this->sender); 
     } 

     if (is_array($this->to)) { 
      $to = implode(',', $this->to); 
     } else { 
      $to = $this->to; 
     } 

     $boundary = '----=_NextPart_' . md5(time()); 

     $header = 'MIME-Version: 1.0' . $this->newline; 

     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 .= 'Reply-To: ' . $this->replyto . ' <' . $this->from . '>' . $this->newline; 
     $header .= 'Return-Path: ' . $this->from . $this->newline; 
     $header .= 'X-Mailer: PHP/' . phpversion() . $this->newline; 
     $header .= 'Content-Type: multipart/related; boundary="' . $boundary . '"' . $this->newline . $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 .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline; 
      $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; 

      if ($this->text) { 
       $message .= $this->text . $this->newline; 
      } else { 
       $message .= 'This is a HTML email and your email client software does not support HTML email!' . $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)) { 
       $handle = fopen($attachment, 'r'); 

       $content = fread($handle, filesize($attachment)); 

       fclose($handle); 

       $message .= '--' . $boundary . $this->newline; 
       $message .= 'Content-Type: application/octet-stream; name="' . basename($attachment) . '"' . $this->newline; 
       $message .= 'Content-Transfer-Encoding: base64' . $this->newline; 
       $message .= 'Content-Disposition: attachment; filename="' . basename($attachment) . '"' . $this->newline; 
       $message .= 'Content-ID: <' . basename(urlencode($attachment)) . '>' . $this->newline; 
       $message .= 'X-Attachment-Id: ' . basename(urlencode($attachment)) . $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') { 
      $tls = substr($this->smtp_hostname, 0, 3) == 'tls'; 
      $hostname = $tls ? substr($this->smtp_hostname, 6) : $this->smtp_hostname; 

      $handle = fsockopen($hostname, $this->smtp_port, $errno, $errstr, $this->smtp_timeout); 

      if (!$handle) { 
       trigger_error('Error: ' . $errstr . ' (' . $errno . ')'); 
       exit(); 
      } else { 
       if (substr(PHP_OS, 0, 3) != 'WIN') { 
        socket_set_timeout($handle, $this->smtp_timeout, 0); 
       } 

       while ($line = fgets($handle, 515)) { 
        if (substr($line, 3, 1) == ' ') { 
         break; 
        } 
       } 

       fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . "\r\n"); 

       $reply = ''; 

       while ($line = fgets($handle, 515)) { 
        $reply .= $line; 

        if (substr($line, 3, 1) == ' ') { 
         break; 
        } 
       } 

       if (substr($reply, 0, 3) != 250) { 
        trigger_error('Error: EHLO not accepted from server!'); 
        exit(); 
       } 

       if ($tls) { 
        fputs($handle, 'STARTTLS' . "\r\n"); 

        $reply = ''; 

        while ($line = fgets($handle, 515)) { 
         $reply .= $line; 

         if (substr($line, 3, 1) == ' ') { 
          break; 
         } 
        } 

        if (substr($reply, 0, 3) != 220) { 
         trigger_error('Error: STARTTLS not accepted from server!'); 
         exit(); 
        } 

        stream_socket_enable_crypto($handle, true, STREAM_CRYPTO_METHOD_TLS_CLIENT); 
       } 

       if (!empty($this->smtp_username) && !empty($this->smtp_password)) { 
        fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . "\r\n"); 

        $reply = ''; 

        while ($line = fgets($handle, 515)) { 
         $reply .= $line; 

         if (substr($line, 3, 1) == ' ') { 
          break; 
         } 
        } 

        if (substr($reply, 0, 3) != 250) { 
         trigger_error('Error: EHLO not accepted from server!'); 
         exit(); 
        } 

        fputs($handle, 'AUTH LOGIN' . "\r\n"); 

        $reply = ''; 

        while ($line = fgets($handle, 515)) { 
         $reply .= $line; 

         if (substr($line, 3, 1) == ' ') { 
          break; 
         } 
        } 

        if (substr($reply, 0, 3) != 334) { 
         trigger_error('Error: AUTH LOGIN not accepted from server!'); 
         exit(); 
        } 

        fputs($handle, base64_encode($this->smtp_username) . "\r\n"); 

        $reply = ''; 

        while ($line = fgets($handle, 515)) { 
         $reply .= $line; 

         if (substr($line, 3, 1) == ' ') { 
          break; 
         } 
        } 

        if (substr($reply, 0, 3) != 334) { 
         trigger_error('Error: Username not accepted from server!'); 
         exit(); 
        } 

        fputs($handle, base64_encode($this->smtp_password) . "\r\n"); 

        $reply = ''; 

        while ($line = fgets($handle, 515)) { 
         $reply .= $line; 

         if (substr($line, 3, 1) == ' ') { 
          break; 
         } 
        } 

        if (substr($reply, 0, 3) != 235) { 
         trigger_error('Error: Password not accepted from server!'); 
         exit(); 
        } 
       } else { 
        fputs($handle, 'HELO ' . getenv('SERVER_NAME') . "\r\n"); 

        $reply = ''; 

        while ($line = fgets($handle, 515)) { 
         $reply .= $line; 

         if (substr($line, 3, 1) == ' ') { 
          break; 
         } 
        } 

        if (substr($reply, 0, 3) != 250) { 
         trigger_error('Error: HELO not accepted from server!'); 
         exit(); 
        } 
       } 

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

       $reply = ''; 

       while ($line = fgets($handle, 515)) { 
        $reply .= $line; 

        if (substr($line, 3, 1) == ' ') { 
         break; 
        } 
       } 

       if (substr($reply, 0, 3) != 250) { 
        trigger_error('Error: MAIL FROM not accepted from server!'); 
        exit(); 
       } 

       if (!is_array($this->to)) { 
        fputs($handle, 'RCPT TO: <' . $this->to . '>' . "\r\n"); 

        $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)) { 
         trigger_error('Error: RCPT TO not accepted from server!'); 
         exit(); 
        } 
       } else { 
        foreach ($this->to as $recipient) { 
         fputs($handle, 'RCPT TO: <' . $recipient . '>' . "\r\n"); 

         $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)) { 
          trigger_error('Error: RCPT TO not accepted from server!'); 
          exit(); 
         } 
        } 
       } 

       fputs($handle, 'DATA' . "\r\n"); 

       $reply = ''; 

       while ($line = fgets($handle, 515)) { 
        $reply .= $line; 

        if (substr($line, 3, 1) == ' ') { 
         break; 
        } 
       } 

       if (substr($reply, 0, 3) != 354) { 
        trigger_error('Error: DATA not accepted from server!'); 
        exit(); 
       } 

       // According to rfc 821 we should not send more than 1000 including the CRLF 
       $message = str_replace("\r\n", "\n", $header . $message); 
       $message = str_replace("\r", "\n", $message); 

       $lines = explode("\n", $message); 

       foreach ($lines as $line) { 
        $results = str_split($line, 998); 

        foreach ($results as $result) { 
         if (substr(PHP_OS, 0, 3) != 'WIN') { 
          fputs($handle, $result . "\r\n"); 
         } else { 
          fputs($handle, str_replace("\n", "\r\n", $result) . "\r\n"); 
         } 
        } 
       } 

       fputs($handle, '.' . "\r\n"); 

       $reply = ''; 

       while ($line = fgets($handle, 515)) { 
        $reply .= $line; 

        if (substr($line, 3, 1) == ' ') { 
         break; 
        } 
       } 

       if (substr($reply, 0, 3) != 250) { 
        trigger_error('Error: DATA not accepted from server!'); 
        exit(); 
       } 

       fputs($handle, 'QUIT' . "\r\n"); 

       $reply = ''; 

       while ($line = fgets($handle, 515)) { 
        $reply .= $line; 

        if (substr($line, 3, 1) == ' ') { 
         break; 
        } 
       } 

       if (substr($reply, 0, 3) != 221) { 
        trigger_error('Error: QUIT not accepted from server!'); 
        exit(); 
       } 

       fclose($handle); 
      } 
     } 
    } 
} 

Как его решить?

+0

Вы не пробовали спрашивать это в OpenCart форумах? Вы можете получить помощь там быстрее. –

ответ

0

OpenCart 2.0.2.0 имеет ошибку с SMTP

http://www.opencart.com/index.php?route=extension/extension/info&extension_id=22107&filter_search=smtp

Это исправление. Если вы настроите правильный SMTP, он должен работать нормально.

ПРОБЛЕМА>

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

FIX =>

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'); 
+0

Ovi: Это сработало для меня. Хотя мне нужно перезапустить службу httpd, но она сработала. Спасибо. – pradeep

+0

Застрял в новом выпуске: 'SyntaxError: JSON.parse: неожиданный символ в строке 1 колонки 1 из JSON data' ' OK' 'Уведомление: Неопределенная переменная: в JSON /дома/xxxxxx/public_html/admin/controller/sale/order.php on line Превышение ошибки при всплывании при каждом попытке изменить информацию о заказе клиента. – pradeep

0

Посмотрите, как проблема с DNS, он не может правильно найти адрес электронной почты. В любом случае, попробуйте настройки, которые работают на моем сайте OpenCart 2.0.2.0.

Моей электронной почты [email protected]

Mail Protocal: Mail 
Mail Parameters: [email protected] 
SMTP Hostname: mydomain.com 
SMTP Username: [email protected] 
SMTP Password: myemailpassword 
SMTP Port: 25 
SMTP Timeout: 5 

Помните, что это "-F" перед моей электронной почтой в почтовых параметрах

+0

Когда я использую ** Почтовый протокол: Почта **. Это заставляет меня ждать бесконечно. Не работает для меня – pradeep

Смежные вопросы