如何纠正使用codeigniter发送电子邮件的方式

问题描述

| 嗨,我正在尝试使用codeiginiter邮件功能发送电子邮件,但是我发现smtp协议存在问题。我使用gmail smtp协议。 我在本地计算机上运行它。 我正在使用Xampp 1.7.4软件包,并且我尝试过如下设置:
function index()
{

    $config[\'protocol\'] = \'smtp\'; // mail,sendmail,or smtp    The mail sending protocol.
    $config[\'smtp_host\'] = \'smtp.gmail.com\'; // SMTP Server Address.
    $config[\'smtp_user\'] = \'[email protected]\'; // SMTP Username.
    $config[\'smtp_pass\'] = \'123\'; // SMTP Password.
    $config[\'smtp_port\'] = \'25\'; // SMTP Port.
    $config[\'smtp_timeout\'] = \'5\'; // SMTP Timeout (in seconds).
    $config[\'wordwrap\'] = TRUE; // TRUE or FALSE (boolean)    Enable word-wrap.
    $config[\'wrapchars\'] = 76; // Character count to wrap at.
    $config[\'mailtype\'] = \'html\'; // text or html Type of mail. If you send HTML email you must send it as a complete web page. Make sure you don\'t have any relative links or relative image paths otherwise they will not work.
    $config[\'charset\'] = \'utf-8\'; // Character set (utf-8,iso-8859-1,etc.).
    $config[\'validate\'] = FALSE; // TRUE or FALSE (boolean)    Whether to validate the email address.
    $config[\'priority\'] = 3; // 1,2,3,4,5    Email Priority. 1 = highest. 5 = lowest. 3 = normal.
    $config[\'crlf\'] = \"\\r\\n\"; // \"\\r\\n\" or \"\\n\" or \"\\r\" Newline character. (Use \"\\r\\n\" to comply with RFC 822).
    $config[\'newline\'] = \"\\r\\n\"; // \"\\r\\n\" or \"\\n\" or \"\\r\"    Newline character. (Use \"\\r\\n\" to comply with RFC 822).
    $config[\'bcc_batch_mode\'] = FALSE; // TRUE or FALSE (boolean)    Enable BCC Batch Mode.
    $config[\'bcc_batch_size\'] = 200; // Number of emails in each BCC batch.

    $this->load->library(\'email\');
    $this->email->initialize($config);


    $this->email->from(\'[email protected]\',\'Me\');
    $this->email->reply_to(\'[email protected]\',\'Me\');
    $this->email->to(\'[email protected]\');
    $this->email->subject(\'testing my mail function with CodeIgniter\');
    $this->email->message(\'<html><body>this is the content</body></html>\');

    if ( ! $this->email->send()){
        echo \'error! <br />\';
        // Generate error
    }
    echo $this->email->print_debugger();

}
在我的浏览器中显示以下错误
error!
220 mx.google.com ESMTP b8sm581192pbj.46

hello: 250-mx.google.com at your service,[118.96.231.25]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES

Failed to send AUTH LOGIN command. Error: 530 5.7.0 Must issue a STARTTLS command first. b8sm581192pbj.46

from: 530 5.7.0 Must issue a STARTTLS command first. b8sm581192pbj.46

The following SMTP error was encountered: 530 5.7.0 Must issue a STARTTLS command first. b8sm581192pbj.46

to: 530 5.7.0 Must issue a STARTTLS command first. b8sm581192pbj.46

The following SMTP error was encountered: 530 5.7.0 Must issue a STARTTLS command first. b8sm581192pbj.46

data: 530 5.7.0 Must issue a STARTTLS command first. b8sm581192pbj.46

The following SMTP error was encountered: 530 5.7.0 Must issue a STARTTLS command first. b8sm581192pbj.46
502 5.5.1 Unrecognized command. b8sm581192pbj.46
The following SMTP error was encountered: 502 5.5.1 Unrecognized command. b8sm581192pbj.46
Unable to send email using PHP SMTP. Your server might not be configured to send mail using this method.

User-Agent: CodeIgniter
Date: Wed,1 Jun 2011 09:27:21 +0700
From: \"Me\" 
Return-Path: 
Reply-To: \"Me\" 
To: [email protected]
Subject: =?utf-8?Q?testing_my_mail_function_with_CodeIgniter?=
X-Sender: [email protected]
X-Mailer: CodeIgniter
X-Priority: 3 (normal)
Message-ID: <[email protected]>
Mime-Version: 1.0


Content-Type: multipart/alternative; boundary=\"B_ALT_4de5a38938733\"

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

--B_ALT_4de5a38938733
Content-Type: text/plain; charset=utf-8
Content-transfer-encoding: 8bit

this is the content


--B_ALT_4de5a38938733
Content-Type: text/html; charset=utf-8
Content-transfer-encoding: quoted-printable

<html><body>this is the content</body></html>

--B_ALT_4de5a38938733--
    

解决方法

        出于安全原因,Google的电子邮件服务器需要SSL或TLS才能发送邮件。它没有使用标准的未加密端口25的方法。 您基本上有两个选择。 1)使用sendmail或您自己的服务器上的邮件来传递消息,或2)使用此处介绍的方法使用SSL通过Google的服务器发送电子邮件。祝您好运,希望对您有所帮助。     ,        您正在尝试通过标准SMTP端口25上的Gmail发送出站邮件。Gmail不接受该端口(或任何端口)上未加密的连接。您必须在SSL上使用端口“ 2”。 您必须将
$config[\'smtp_port\']
更改为
465
,并将
$config[\'smtp_host\']
更改为
\'ssl://smtp.googlemail.com\'
更多信息在这里     ,        您甚至可以使用端口587:
$config[\'smtp_port\'] = \'587\';
和smtp-host为:
$config[\'smtp_host\'] = \'ssl://smtp.gmail.com\';
    ,        我通过在
smtp_host
上包含ssl前缀来解决此问题,方法如下:
$config[\'smtp_host\'] = \'ssl://smtp.gmail.com\';
并确保使用465端口(即Google的smtp端口):
$config[\'smtp_port\'] = \'465\';
否则,默认情况下google会阻止\'低安全性连接\',因此您可以输入自己的google帐户并配置此选项。 允许安全性较低的应用访问帐户 激活此选项,然后重试。希望这可以帮到你!。     ,        1)您的smtp端口必须为
465
。 2)您的smtp主机必须为
ssl://smtp.gmail.com
$config[\'smtp_host\'] = \'ssl://smtp.gmail.com\'; // SMTP Server Address.

$config[\'smtp_port\'] = \'465\'; // SMTP Port.