如何使用CakEmail和SMTP设置从gmail帐户发送电子邮件


CakePHP-2.0: How can i send email from a gmail account using CakEmail and SMTP setting?

我正在尝试使用CakEmail和SMTP设置从gmail帐户发送电子邮件。

如果有人一步一步地告诉这个过程该怎么做就好了。

我在app/Config/email.php中添加了以下内容=>

<?php
class EmailConfig {
    public $smtp = array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => 465,
        'username' => 'my@gmail.com',
        'password' => 'secret'
    );
}

现在我如何从"my@gmail.com"发送电子邮件到任何电子邮件帐户?

这是cakephp - 2.0

From the docs:

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

<?php
class EmailConfig {
    public $gmail = array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => 465,
        'username' => 'my@gmail.com',
        'password' => 'secret'
    );
}

http://book.cakephp.org/2.0/en/core-utility-libraries/email.html?highlight=cakeemail CakeEmail

正确的配置是:

public $gmail = array(
    'host' => 'ssl://smtp.gmail.com',
    'port' => 465,
    'username' => 'my@gmail.com',
    'password' => 'secret',
    'transport' => 'Smtp'
);
所以,不要忘记transport元素

设置from:

<?php
$email = new CakeEmail();
$email->from(array('my@gmail.com' => 'Your Name'));
$email->to('foo@stackoverflow.com');
$email->subject('Sent from Gmail');
$email->send('My message'); // or use a template etc

应该做这件事。

您可能还想设置sender;我不是100%,但我想这将是有用的,当发送电子邮件"从"gmail通过自己的网站;也许是为了防止电子邮件被当作垃圾邮件接收。

$email->sender('noreply@mydomain.com', 'MyApp emailer');

我目前使用gmail帐户发送出站邮件。我使用模板和可重复使用的电子邮件设置功能。这是我的工作代码的副本:

// app/controllers/users_controller.php
function sendemail($subject, $body, $to, $template) {
    $this->Email->smtpOptions = array(
        'port'=>'465',
        'timeout'=>'30',
        'host' => 'ssl://smtp.gmail.com',
        'username'=>'username@domain.com',
        'password'=>'secret',
    );
    $this->Email->delivery = 'smtp';
    //$this->Email->delivery = 'debug';
    $this->Email->from    = 'Username <username@Domain.com>';
    $this->Email->to      = $to;
    $this->Email->subject = $subject;
    $this->set('body', $body);
    $this->set('smtp_errors', $this->Email->smtpError);
    $this->Email->send($content, $template);
}
// app/controllers/users_controller.php 
// Excerpt from new user method in users controller:
function add() {
    // ...other stuff
    $body['user'] = $user['User']['username'];
    $this->sendemail('Domain.com New User Signup!', $body, 'destination@Domain.com', 'newuser');
    // ...other stuff
}
// app/views/elements/email/text/newuser.ctp
Everyone,
Another new user just signed up for Domain. Stats below:
User: <?php echo $body['user'] . "'r'r"; ?>
Just thought you'd like to know :)
-Janet

使用Swiftmailer组件;这是最容易使用的组件。

http://bakery.cakephp.org/articles/mhuggins/2008/06/11/improved-swiftmailer-component

在使用CakePHP 2.0以后的版本时,需要做一些更改。CakePHP 2.0提供了一个"email"视图目录,用于存储所有的电子邮件模板。

组件的更改:

  1. 将所有var声明更改为public
  2. public $layout = 'Emails';更改为public $viewPath = '/Emails';

  3. 改变_getBodyText的渲染路径:

$body = $this->controller->render($this->viewPath . DS . 'text' . DS . $view, $this->layout . DS . 'text'.DS.'default');

  • 改变_getBodyHtml的渲染路径:
  • $body = $this->controller->render($this->viewPath . DS . 'html' . DS . $view, $this->layout . DS . 'html'.DS.'default');

  • 注释掉这些行:
  • $bodyText = $this->_getBodyText($view); $message->setBody($bodyText, "text/plain");

    Swiftmailer组件发送一个空白的电子邮件如果你设置了HTML &文本活跃。它读取电子邮件视图&添加文本主体。这就是为什么要注释这两行,如果你想发送html电子邮件。

    第二个原因是如果两者都被激活&你在email.html.ctp &email.text.ctp文件,它创建了一个标题问题,只有文本格式在电子邮件中显示(在现实中这两种格式都存在于标题中,但它抑制了html部分&显示文本部分)。