2012-02-18 166 views
2

我想用CakePhp 2.0发送电子邮件。在我的控制器我用这个代码(我知道这是很好,我把它从the cookbook):cakephp 2.0 smtp电子邮件

App::uses('CakeEmail', 'Network/Email'); 
$email = new CakeEmail("myConfig"); 
$email->from(array('[email protected]' => 'From Example')); 
$email->to($to); 
$email->subject($msgtitle); 
$ok = $email->send($content); 
app/config/email.php

,我有这个配置:

<?php 
class EmailConfig { 
    public $myConfig = array(
     'host' => 'mail.myServer.com', 
     'port' => 587, 
     'username' => 'mYaccount', 
     'password' => 'secret', 
     'transport' => 'Smtp' 
    ); 
} 
?> 

的问题是服务器则以:

SMTP Error: 530 5.7.0 Must issue a STARTTLS command first. 

帐户名称正确,密码也正确。在雷鸟装起来的时候,这个配置工作,SMTP服务器的连接设置为:

服务器名称:mail.myServer.com
端口:587
连接安全:STARTTLS
认证:普通口令
用户名:我的帐户

+0

如果你想看到发送SMTP命令一些CakePHP的代码,请上网:http://stackoverflow.com/questions/5294751/using-gmails-outgoing-smtp-from-php -using-tls – 2013-01-18 19:51:49

回答

0

从CakePHP的食谱:

您可以配置SSL SMTP服务器,例如Gmail。为此,请在主机的前缀处添加'ssl://',并相应地配置端口值。例如:

class EmailConfig { 
public $gmail = array(
    'host' => 'ssl://smtp.gmail.com', 
(...) 
+2

如果我这样做,我只是'无法连接到SMTP服务器。' – Bogdan 2012-02-18 14:25:34

2

你确定你的SMTP支持TLS?尝试发送EHLO命令:

telnet 1.2.3.4 25 
ehlo testing 

你应该看到:

250-STARTTLS 

在列表中。

如果你看到它,那么它很可能没有启用。您需要启用它。如果你没有看到它,你需要添加它。

+0

好吧,我在列表中看到它,我如何检查它是否启用? (请记住它正在使用电子邮件客户端,而STARTTLS是电子邮件客户端正在使用的报告) – Bogdan 2012-02-19 19:35:43

+0

然后,您应该能够创建主机'ssl:// mail.myServer.com'并且它应该连接。如果没有,您可能需要验证您使用的是正确的用户名和密码。你是否尝试将用户名作为电子邮件地址? 'username @ myServer.com' – 2012-02-20 17:22:47

0

给一个尝试以下操作:

<?php 
class EmailConfig { 
    public $myConfig = array(
     'host' => 'ssl://mail.myServer.com', 
     'port' => 465, 
     'username' => 'mYaccount', 
     'password' => 'secret', 
     'transport' => 'Smtp' 
    ); 
} 
?> 
0

确保您

php_openssl.dll

延长运行。

您可以在php.ini文件上查看。

如果您使用的XAMPP的php.ini应该是C:\xampp\php

php.ini: 

;extension=php_oci8.dll  ; Use with Oracle 10gR2 Instant Client 
;extension=php_oci8_11g.dll ; Use with Oracle 11gR2 Instant Client 
extension=php_openssl.dll 
;extension=php_pdo_firebird.dll 
1

下面的代码在GoDaddy的服务器使用CakePHP SMTP电子邮件为我工作:

config文件夹内的文件Email.php - CakePHP的2。4 MVC版本:

// for Live Server GoDaddy.com domain 
    public $smtp = array(
     'transport' => 'Smtp', 
     'host' => 'ssl://smtpout.asia.secureserver.net', <-- important 
     'port' => 465, <-- important 
     #'timeout' => 30, 
     'username' => '[email protected]', 
     'password' => 'password', 
     #'tls' => false, 
     #'log' => false, 
     'charset' => 'utf-8', 
     'headerCharset' => 'utf-8', 
    ); 

这里是下面的控制文件代码:

// Controller Code to Send Actual Email 
    // email configuration 
    $Email = new CakeEmail('smtp'); 
    $Email->from(array('[email protected]' => 'App Name')) 
     ->sender('[email protected]', 'App Name') 
     ->to(array($email)) 
     ->bcc(array('[email protected]')) 
     ->subject('Test Email from GoDaddy') 
     ->emailFormat('both') 
     ->send($hash.'<br><strong>My</strong> message 45 قبل الميلاد، مما يجعله أكثر من'); 

希望它能帮助!

感谢

1
public $smtp = array(
     ................., 
     'tls' => true 
    ); 
+0

添加一些解释并回答这个答案如何帮助OP解决当前问题 – 2016-01-21 11:27:50