SMTP服务器不接受密码

时间:2017-01-05 09:50:32

标签: email cakephp-2.0 sendgrid

我写过以下代码来发送电子邮件。

static function sendEmail($email,$data,$type){


    $Email = new CakeEmail();       
    $Email->config('general');
    switch($type){
        case 1:
            $Email->template('confirmation_free', null);
            $Email->subject('Confirmation of registration with XXXXXXXXXXXXX');
            $Email->viewVars(array('Email'=>$data["Email"],'full_name'=>$data['full_name'],'Id'=>$data['Id'],'url'=>$_SERVER['SERVER_NAME'], 'password'=>$data['password']));
            break;
        case 2:
            $Email->template('group-invite', 'default');
            $Email->subject('XXXXXXXX Group Invite - Notification');
            $Email->viewVars(array('Email'=>$data["Email"],'Username'=>$data['Username'],'Id'=>$data['Id'],'url'=>$_SERVER['SERVER_NAME']));
            break;
        case 3:
            $Email->template('forgot_password', null);
            $Email->subject('XXXXXXXX - Forgot Password');
            $Email->viewVars(array('Email'=>$data["Email"],'Key'=>$data['Key'],'url'=>$_SERVER['SERVER_NAME'],'Id'=>$data['id']));
            break;
    }
    $Email->to($email);
    if($Email->send())
        return true;
    else
        return false;
}

使用以下sendgrid smtp设置。

public $general = array(
    'transport' => 'Smtp',
    'from' => array('XXXXX@XXXXXXX' => 'XXXXXX Administrator'),
    'host' => 'smtp.sendgrid.net',
    'port' => 587,
    'timeout' => 30,
    'username' => 'XXXXXXX',
    'password' => 'XXXXXX',
    'client' => null,
    'log' => false,
    'emailFormat' => 'html'
);

它在我的本地和开发服务器上工作得非常好。但是在我们在开发服务器上安装SSL后,它开始抛出以下错误“SMTP服务器不接受密码”

请注意我使用的是sendgrid免费帐户。我是否需要付费帐户才能从具有SSL的服务器发送电子邮件?

2 个答案:

答案 0 :(得分:0)

您需要在CakeEmail配置中使用tls选项,或在主机前加ssl:// https://book.cakephp.org/2.0/en/core-utility-libraries/email.html

答案 1 :(得分:0)

Xylon,请试试这个。

在Email.php中

public $smtp = array(
    'host' => 'ssl://smtp.gmail.com',
            'port' => 465,
            'username'  => 'your email',
            'password'  => 'password',
            'transport' => 'Smtp',
            'log' => true,
            'auth' => true,
            'charset' => 'utf-8',
            'headerCharset' => 'utf-8',
    );
    $Email = new CakeEmail('smtp'); // In Controller where you want send mail
    $Email->viewVars(array("data" => $data));
                    $Email->template($template)
                        ->emailFormat('html')
                        ->to($reciever)                            
                        ->from(array($mail_from => "Ecotrak"))
                        ->subject($subject)
                        ->send();

我希望这会解决问题。