mail.php行153上的OpenCart邮件错误 [英] OpenCart mail error on mail.php line 153

查看:100
本文介绍了mail.php行153上的OpenCart邮件错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试使用社交媒体包插件注册时,我在OpenCart网站上遇到此错误:

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

警告:fsockopen():php_network_getaddresses:getaddrinfo失败:在第153行的/home/wankersh/public_html/system/library/mail.php中未知的名称或服务警告:fsockopen():无法连接至pds14.servikus.第153行/home/wankersh/public_html/system/library/mail.php中的com:465(php_network_getaddresses:getaddrinfo失败:名称或服务未知)注意:错误:php_network_getaddresses:getaddrinfo失败:名称或服务未知(0) /home/wankersh/public_html/system/library/mail.php,第156行

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

这是来自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);

            }

        }

    }

}

?>

我定期创建fb应用程序,没有任何问题,并与插件连接.在点击fb登录按钮后,它要求我在我的fb个人资料上允许该应用,然后使我进入步骤来填写信息,例如国家/地区,邮政编码,地址等. 我注意到当我使用相同的fb配置文件重试时,它会自动登录我.但是,在管理中,没有这样的用户 http://screencast.com/t/jJrUOnLw .

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.

我拥有OpenCart 1.5.6.4的最新版本

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.

这是他们的回应:

我认为这是与您商店的电子邮件配置有关的问题.您的商店似乎使用SMTP发送电子邮件.我尝试使用常规注册方法进行注册,并且在此过程中发生了相同的错误消息.这使我相信您的商店邮件设置中存在配置错误.您可以通过进入管理面板->系统->设置->您的商店->邮件标签来检查它们.请注意您的SMTP凭据和配置的SMTP端口,而不是错误源于此.

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.

希望这会有所帮助!

关于, Angel Metaxov-iSenseLabs团队

Regards, Angel Metaxov - iSenseLabs team

这是我对邮件的opencart设置: http://screencast.com/t/3KrPSpnlqcN

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

如果您需要更多信息,请告诉我.

If you need more information, let me know.

Stefan

更新:我与服务器人员交谈,他告诉我在SMTP主机中使用域名.

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:

注意:错误:服务器未接受EHLO!在第200行的/home/wankersh/public_html/system/library/mail.php中`

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

推荐答案

OpenCart的SMTP存在错误;在此处上了解更多信息

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

您可以通过以下正确的方式配置SMTP来解决此问题;

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

问题出现在最后一行,其值归于$mail->smtp_hostname:

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

解决方案:将其值设置为$this->config->get('config_mail_smtp_hostname')而不是后面的值,如下面的代码片段所示;

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

这篇关于mail.php行153上的OpenCart邮件错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆