使用代码点火器和 gmail smtp 从本地主机上的 xampp 发送电子邮件

Posted

技术标签:

【中文标题】使用代码点火器和 gmail smtp 从本地主机上的 xampp 发送电子邮件【英文标题】:Send email from xampp on localhost using code igniter and gmail smtp 【发布时间】:2015-07-12 08:33:50 【问题描述】:

我正在尝试使用 xampp 服务器在本地主机上的代码点火器应用程序中创建和测试电子邮件功能。我正在尝试通过在 php.ini 和 sendmail.ini 中配置来使用 Google SMTP 邮件服务器。我收到很多我无法理解的错误。我的 gmail 帐户使用两步验证。那有关系吗?这是我的代码

控制器:

$this->load->library('email');
$from =$this->input->post('email');

$econfig=
    array(
        'protocol'=>'smtp', 
        'smtp_host'=>"smtp.gmail.com",
        'smtp_port'=>465,
        '_smtp_auth'=>TRUE, 
        'smtp_user'=>"deb.pratyush@gmail",
        'smtp_pass'=>"xxxxxxxx",
        'smtp_crypto'=>'ssl',               
        'mailtype'=>'html', 
        'charset'=>'utf-8',
        'validate'=>TRUE);


        $this->email->initialize($econfig);
        $this->email->set_newline("\r\n");
        $msg=$this->input->post('msg');

        $subject = "Contact Request From ".$from ;


        $name=$this->input->post('uname');

        $this->email->to("deb.pratyush@gmail.com");
        $this->email->from($from, stripslashes($name));
        $this->email->subject($subject);
        $this->email->message($msg);

        if($this->email->send())
        
            $this->session->set_flashdata('msg', "Message Sent");
            $url = base_url().'cms/contact-us';
            redirect($url);
        
        else

            echo "fail<br>";
            //echo "m=".mail("deb.pratyush@gmail.com", $subject, $msg)."<br>";
            echo $this->email->print_debugger();
        

PHP INI:

SMTP = smtp.gmail.com
smtp_port = 465
sendmail_from = deb.pratyush@gmail.com   
sendmail_path = "\"D:\xampp\sendmail\sendmail.exe\" -t"

发送邮件 INI:

smtp_server=smtp.gmail.com
smtp_port=465
smtp_ssl=auto

error_logfile=error.log
debug_logfile=debug.log

auth_username=deb.pratyush@gmail.com
auth_password=xxxxxxxx
force_sender=deb.pratyush@gmail.com

错误:

fail
220 mx.google.com ESMTP jp10sm8036081pbb.9 - gsmtp

hello: 250-mx.google.com at your service, [223.239.160.146]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN XOAUTH
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8

Failed to authenticate password. Error: 535-5.7.8 Username and Password  not accepted. 
Learn more at 535 5.7.8 http://support.google.com/mail/bin/answer.py?answer=14257 jp10sm8036081pbb.9 - gsmtp

from: 530-5.5.1 Authentication Required. 
Learn more at
    530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257     jp10sm8036081pbb.9 - gsmtp

The following SMTP error was encountered: 530-5.5.1 Authentication Required. 
Learn more at 530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 jp10sm8036081pbb.9 - gsmtp

to: 530-5.5.1 Authentication Required. 
Learn more at
530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 jp10sm8036081pbb.9 - gsmtp

The following SMTP error was encountered: 530-5.5.1 Authentication Required. 
Learn more at 530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 jp10sm8036081pbb.9 - gsmtp

data: 530-5.5.1 Authentication Required. 
Learn more at
530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 jp10sm8036081pbb.9 - gsmtp

The following SMTP error was encountered: 530-5.5.1 Authentication Required. 
Learn more at 530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 jp10sm8036081pbb.9 - gsmtp
502 5.5.1 Unrecognized command. jp10sm8036081pbb.9 - gsmtp
The following SMTP error was encountered: 502 5.5.1 Unrecognized command. jp10sm8036081pbb.9 - gsmtp
 Unable to send email using PHP SMTP. 
Your server might not be configured to send mail using this method.

User-Agent: CodeIgniter
Date: Sat, 2 May 2015 18:31:32 +0200
To: deb.pratyush@gmail.com
From: "John D\'Costa" <jd@mailinator.com>
Return-Path: <jd@mailinator.com>
Subject: =?utf-8?Q?Contact_Request_From_jd@mailinator.com?=
Reply-To: "jd@mailinator.com" <jd@mailinator.com>
X-Sender: jd@mailinator.com
X-Mailer: CodeIgniter
X-Priority: 3 (Normal)
Message-ID: <5544fbe4a6133@mailinator.com>
Mime-Version: 1.0


Content-Type: multipart/alternative; boundary="B_ALT_5544fbe4a6133"

This is a multi-part message in MIME format.
Your email application may not support this format.

--B_ALT_5544fbe4a6133
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

tyftyttrtv jhvyugu


--B_ALT_5544fbe4a6133
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

tyftyttrtv jhvyugu

--B_ALT_5544fbe4a6133--

【问题讨论】:

看看这个***.com/questions/29972179/… 【参考方案1】:

我找到了解决方案。我的 gmail 帐户使用两步验证。因此,我需要创建一个应用专用密码,并将我之前的密码替换为应用专用密码,以通过 PHP 获得对我的 gmail 帐户的完全访问权限。 我在 sendmail.exe 的错误日志中找到了下面给出的链接

https://support.google.com/accounts/bin/answer.py?answer=185833

它会详细告诉您如何创建应用专用密码

代码如下:

$econfig=
    array(
        'protocol'=>'smtp', 
        'smtp_host'=>"smtp.gmail.com",
        'smtp_port'=>465,
        '_smtp_auth'=>TRUE, 
        'smtp_user'=>"deb.pratyush@gmail",
        'smtp_pass'=>"<app-specific password>",
        'smtp_crypto'=>'ssl',               
        'mailtype'=>'html', 
        'charset'=>'utf-8',
        'validate'=>TRUE);

发送邮件 INI:

smtp_server=smtp.gmail.com
smtp_port=465
smtp_ssl=auto

error_logfile=error.log
debug_logfile=debug.log

auth_username=deb.pratyush@gmail.com
auth_password=<app-specific password>
force_sender=deb.pratyush@gmail.com

【讨论】:

【参考方案2】:

这使我走上了正确的道路。不过,

我所要做的就是将“允许不太安全的应用访问您的帐户”切换为开启状态。我想这是创建应用专用密码的替代方法。

https://support.google.com/accounts/answer/6010255 了解详情

https://www.google.com/settings/security/lesssecureapps 用于开关

出于安全目的,在完成后可能值得将其关闭。

【讨论】:

【参考方案3】:
        $config = array();
        $config['protocol']    = 'smtp';
        $config['smtp_host']    = 'xyz.com';
        $config['smtp_port']    = '25';
        $config['smtp_timeout'] = '100';
        $config['smtp_user']    = 'aaa@xyz.com';
        $config['smtp_pass']    = '*******';
        $config['charset']    = 'utf-8';
        $config['newline']    = "\r\n";
        $config['mailtype'] = 'html'; // or text
        $config['validation'] = TRUE;



       $this->email->initialize($config);
        //$this->email->set_newline("\r\n");
        $this->email->from('aaa@xyz.com', 'TESTING');
        $this->email->to('abc@gmail.com'); 
        $this->email->subject('Email Test');
        $body = read_file(base_url().'resources/img/index.html');
        $this->email->message($body);  

        if($this->email->send())
        
           echo $this->email->print_debugger(); echo 'mail send'.$body;
        
        else
        echo $this->email->print_debugger();

       but not recive any mail

【讨论】:

以上是关于使用代码点火器和 gmail smtp 从本地主机上的 xampp 发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

gmail smtp 在我使用 codeigniter 框架的主机中不起作用

PHPMailer使用GMAIL SMTP和多个GMAIL帐户用于多个虚拟主机

无法与主机 smtp.gmail.com 建立连接 Network is unreachable #101 error in Laravel email

无法与主机 smtp.gmail.com [#0] 建立连接 - LARAVEL / XAMPP / PHP7

来自本地主机的 XAMPP 和 PHP 邮件

如何解决“无法与主机smtp.gmail.com建立连接”?