CakePHP-2.0:如何使用CakEmail和SMTP设置从gmail帐户发送电子邮件?

CakePHP-2.0:如何使用CakEmail和SMTP设置从gmail帐户发送电子邮件?,php,email,cakephp,cakephp-2.0,Php,Email,Cakephp,Cakephp 2.0,我正在尝试使用CakEmail和SMTP设置从gmail帐户发送电子邮件 如果有人一步一步地告诉这个过程该做什么,那就太好了 我在app/Config/email.php=> <?php class EmailConfig { public $smtp = array( 'host' => 'ssl://smtp.gmail.com', 'port' => 465, 'username' => 'my@gmail.c

我正在尝试使用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'
    );
}

只需从
设置

<?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
文件中的

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

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

我目前正在使用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
//app/controllers/users\u controller.php
函数sendmail($subject、$body、$to、$template){
$this->Email->smtpOptions=array(
“端口”=>“465”,
“超时”=>“30”,
'主机'=>'ssl://smtp.gmail.com',
'用户名'=>'username@domain.com',
“密码”=>“密码”,
);
$this->Email->delivery='smtp';
//$this->Email->delivery='debug';
$this->Email->from='Username';
$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\u controller.php
//摘自用户控制器中的新用户方法:
函数add(){
//…其他东西
$body['user']=$user['user']['username'];
$this->sendmail('Domain.com新用户注册!',$body,'destination@Domain.com“,”新用户“);
//…其他东西
}
//app/views/elements/email/text/newuser.ctp
每个人
另一个新用户刚刚注册域。统计数据如下:
用户:
只是想让你知道:)
-珍妮特

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

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

组件的更改:

  • 将所有
    var
    声明更改为
    public
  • 更改
    public$layout='Emails'
    public$viewPath='/Emails'

  • 更改
    \u getBodyText
    中的渲染路径:

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

  • \u getBodyHtml
    中更改渲染路径:
  • $body=$this->controller->render($this->viewPath.DS.html.DS.view,$this->layout.DS.html.DS.default))

  • 注释掉以下行:
  • $bodyText=$this->\u getBodyText($view);
    $message->setBody($bodyText,“text/plain”)

    如果将HTML和文本都设置为活动状态,则Swiftmailer组件将发送一封空白电子邮件。它从两个电子邮件视图中读取并添加文本正文。这就是为什么要评论这两行,如果你想发送html电子邮件


    第二个原因是,如果两者都被激活&您在
    email.html.ctp
    email.text.ctp
    文件中都有内容,则会产生标题问题,因为只有文本格式显示在电子邮件中(实际上,两种格式都显示在标题中,但它会抑制html部分并显示文本部分).

    正确的配置是:

    public $gmail = array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => 465,
        'username' => 'my@gmail.com',
        'password' => 'secret',
        'transport' => 'Smtp'
    );
    

    因此,不要忘记传输元素。

    这是较旧的电子邮件组件。