【问题标题】:cakephp 2.0 smtp emailcakephp 2.0 smtp 电子邮件
【发布时间】:2012-03-09 15:38:42
【问题描述】:

我正在尝试使用 CakePhp 2.0 发送电子邮件。在我的控制器中,我使用了这段代码(我知道这很好,我从 the cookbook 拿来的):

App::uses('CakeEmail', 'Network/Email');
$email = new CakeEmail("myConfig");
$email->from(array('from@example.com' => '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.

帐户名正确,密码也正确。配置在 Thunderbird 中加载时有效,与 smtp 服务器的连接设置为:

服务器名称:mail.myServer.com
端口:587
连接安全:STARTTLS
身份验证:普通密码
用户名:我的帐户

【问题讨论】:

标签: php smtp cakephp-2.0 starttls


【解决方案1】:

您确定您的 SMTP 支持 tls 吗?尝试发送 ehlo 命令:

telnet 1.2.3.4 25
ehlo testing

你应该看到类似的东西:

250-STARTTLS

在列表中。

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

【讨论】:

  • 好的,我确实在列表中看到了它,我如何检查它是否已启用? (请记住,它正在使用电子邮件客户端工作,并且电子邮件客户端报告正在使用 STARTTLS)
  • 那么您应该能够使主机ssl://mail.myServer.com 并且它应该连接。如果没有,您可能需要验证您使用的是正确的用户名和密码。您是否尝试将用户名作为电子邮件地址? username@myServer.com
【解决方案2】:
public $smtp = array(
        .................,
        'tls'   =>  true
    );

【讨论】:

  • 添加一些解释,说明此答案如何帮助 OP 解决当前问题
【解决方案3】:

以下代码在 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' => 'no-reply@godaddy-domain.com',
        '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('no-reply@godaddy-domain.com' => 'App Name'))
        ->sender('no-reply@godaddy-domain.com', 'App Name')
        ->to(array($email))
        ->bcc(array('xyz@xyz.com'))
        ->subject('Test Email from GoDaddy')
        ->emailFormat('both')
        ->send($hash.'<br><strong>My</strong> message 45 قبل الميلاد، مما يجعله أكثر من');

希望对你有帮助!

谢谢

【讨论】:

    【解决方案4】:

    来自 CakePHP 食谱:

    您可以配置 SSL SMTP 服务器,例如 GMail。为此,请将“ssl://”放在主机的前缀中,并相应地配置端口值。示例:

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

    【讨论】:

    • 如果我这样做,我会得到Unable to connect to SMTP server.
    【解决方案5】:

    试试下面的:

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

    【讨论】:

      【解决方案6】:

      确保你的

      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
      

      【讨论】:

        猜你喜欢
        • 2012-01-04
        • 2014-06-23
        • 1970-01-01
        • 2011-05-24
        • 1970-01-01
        • 2014-08-05
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        相关资源
        最近更新 更多