简体   繁体   中英

OpenCart mail error on mail.php line 153

I'm getting this error on my OpenCart site while I trying to register using social media bundle plugin :

Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/wankersh/public_html/system/library/mail.php on line 153Warning: fsockopen(): unable to connect to pds14.servikus.com :465 (php_network_getaddresses: getaddrinfo failed: Name or service not known) in /home/wankersh/public_html/system/library/mail.php on line 153Notice: Error: php_network_getaddresses: getaddrinfo failed: Name or service not known (0) in /home/wankersh/public_html/system/library/mail.php on line 156

This is a code from mail.php :

<?php

class Mail {

    protected $to;

    protected $from;

    protected $sender;

    protected $subject;

    protected $text;

    protected $html;

    protected $attachments = array();

    public $protocol = 'mail';

    public $hostname;

    public $username;

    public $password;

    public $port = 25;

    public $timeout = 5;

    public $newline = "\n";

    public $crlf = "\r\n";

    public $verp = false;

    public $parameter = '';



    public function setTo($to) {

        $this->to = $to;

    }



    public function setFrom($from) {

        $this->from = $from;

    }



    public function setSender($sender) {

        $this->sender = $sender;

    }



    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 (is_array($this->to)) {

            $to = implode(',', $this->to);

        } else {

            $to = $this->to;

        }



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



        $header = '';



        $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: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . ' <' . $this->from . '>' . $this->newline;

        $header .= 'Reply-To: ' . '=?UTF-8?B?' . base64_encode($this->sender) . '?=' . ' <' . $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') {

            $handle = fsockopen($this->hostname, $this->port, $errno, $errstr, $this->timeout);



            if (!$handle) {

                trigger_error('Error: ' . $errstr . ' (' . $errno . ')');

                exit();                 

            } else {

                if (substr(PHP_OS, 0, 3) != 'WIN') {

                    socket_set_timeout($handle, $this->timeout, 0);

                }



                while ($line = fgets($handle, 515)) {

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

                        break;

                    }

                }



                if (substr($this->hostname, 0, 3) == 'tls') {

                    fputs($handle, 'STARTTLS' . $this->crlf);



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

                    }

                }



                if (!empty($this->username)  && !empty($this->password)) {

                    fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . $this->crlf);



                    $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' . $this->crlf);



                    $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->username) . $this->crlf);



                    $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->password) . $this->crlf);



                    $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') . $this->crlf);



                    $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' . $this->crlf);

                } else {

                    fputs($handle, 'MAIL FROM: <' . $this->from . '>' . $this->crlf);

                }



                $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 . '>' . $this->crlf);



                    $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 . '>' . $this->crlf);



                        $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' . $this->crlf);



                $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 . $this->crlf);

                        } else {

                            fputs($handle, str_replace("\n", "\r\n", $result) . $this->crlf);

                        }                           

                    }

                }



                fputs($handle, '.' . $this->crlf);



                $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' . $this->crlf);



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

            }

        }

    }

}

?>

I created fb app regulary with no problems and connected with plugin. After clicking on fb login button, its ask me to allow app on my fb profile and after that bring me to step to fill informations, like country, postcode, address, etc. After filling that page, i get error i mention above. I noticed that when i try again with same fb profile, its autologin me. But, in administration there is no such a user http://screencast.com/t/jJrUOnLw .

I have latest version of OpenCart 1.5.6.4

I instantly created ticked and asked "social media bundle" support about what causing this problem.

This is their response:

I believe this is a problem related to the email configuration of your store. It seems your store uses SMTP to send emails. I tried to sign up with the regular registration method and the same error message occured during this proccess. This leads me to believe that there is a misconfiguration in your store mail settings. You can check them by going to the Admin panel -> System -> Settings -> Your store -> Mail tab. Please pay attention to your SMTP credentials and configured SMTP port as more often than not the error stems from there.

Hope this helps!

Regards, Angel Metaxov - iSenseLabs team

This is my opencart settings for mail: http://screencast.com/t/3KrPSpnlqcN

If you need more information, let me know.

Stefan

Update: I talked with server guy, and he told me to use domain name in SMTP host.

After I tried to register manually (without plugin social login), I get this error:

Notice: Error: EHLO not accepted from server! in /home/wankersh/public_html/system/library/mail.php on line 200`

OpenCart has a bug with SMTP; read more on that here

You can fix it by configuring SMTP the right way as below;

The problem occurred here, on the last line with the value attributed to $mail->smtp_hostname :

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

The solution: make it's value $this->config->get('config_mail_smtp_hostname') instead of the later, as seen in the snippet below;

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM