5

我在我的 CAKEPHP 项目中使用 SMTP 发送电子邮件。我的电子邮件配置如下

class EmailConfig {

    public $Smtp = array(
         'transport' => 'Smtp',
         'from' => array('contact@mydomainname.com' => 'domainname.com'),
         'host' => 'myhostingserver',
         'port' => 2525,
         'timeout' => 60,
         'username' => 'username@mydomainname.com',
         'password' => 'secret',
         'client' => null,
         'log' => false
    );

和我的邮件功能代码如下

    $email    = new CakeEmail('Smtp');
    $result   = $email->template('welcome_mail','default')
                       ->emailFormat('html')
                        ->to($to_email)
                        ->from('contact@mydomainname.com')
                        ->subject('Welcome to my domain name')
                        ->viewVars($contents);

    if($email ->send('Smtp'))
    {   
        echo ('success');

    }

当我发送邮件时,它会抛出以下错误 SMTP 超时。我的 SMTP 服务器详细信息是正确的,它在现有服务器中工作正常。我不知道我错在哪里

4

3 回答 3

7

检查加密类型(如果适用),例如 ssl 或 tls

在这种情况下,您的主机 URL 应如下所示

'host' => 'ssl://myhostingserver'

或者

'host' => 'tls://myhostingserver'
于 2012-06-26T12:45:59.067 回答
1

如果您的 SMTP 服务器有 SSL,您必须启用php_opensslinphp.ini才能使用此服务。您可以使用此代码进行测试

if(!in_array('openssl',get_loaded_extensions())){
    die('you have to enable php_openssl in php.ini to use this service');       
}
于 2012-06-26T09:57:50.177 回答
0

除了这里已经建议必须加载模块之外。我发现某些服务器的某些端口被阻止。我用这个脚本来测试一些服务器:

<?php

if(!in_array('openssl',get_loaded_extensions())){
    die('you have to enable php_openssl in php.ini to use this service');       
} else {
    echo "php_openssl in php.ini is enabled <br />";
}

// fill out here the smpt server that you want to use
$host = 'ssl://smtp.gmail.com';
// add here the port that you use for for the smpt server
$ports = array(80, 465);

foreach ($ports as $port)
{
    $connection = @fsockopen($host, $port);
    if (is_resource($connection))
    {
        echo $host . ':' . $port . ' ' . '(' . getservbyport($port, 'tcp') . ') is open.<br />' . "\n";
        fclose($connection);
    } else {
        echo $host . ':' . $port . ' is not responding.<br />' . "\n";
    }
}

?>
于 2013-09-05T19:44:15.747 回答