• About Me




    Lily@Melbourne, Australia

    Login

  • Follow 静水深流 || Still waters run deep on WordPress.com
  • Archives

CakePHP-Email

我觉得很难用中文写技术文章。第一我的翻译能力远远够不上“信达雅”的境界。第二科技文章更新的太快,连活学活用还在摸索中,更不必说建立一套参考标准了。第三,这些接触到的术语都是英语,我并不知道统一的翻译模式。但就像前面说过的那样,我太想做一点普及的共zo了,而且也实在受不了有些人闭着眼睛的照搬照抄,所以试试看吧

2.0的email升级为class而不是 1.3的component,所以可用的资料很少,这是官方版本,但写得不太精确,至少对入门者很难一下子搞明白。

首先设置email的服务器,官方代码如下,但很不幸并没有指出该在哪里添加gmail的配置,大概觉得这是惯例,约定俗成的事情,不值一提。 在app/config/下,把emal.php.default 文件改名为email.php 

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

第二步: 在需要用到email的controller上的拷贝这一行, 使用这个自带class

App::uses('CakeEmail', 'Network/Email');

第三步:基本使用方式

$email = new CakeEmail('gmail');  //使用前面的gmail配置
$email->from(array('me@example.com' => 'My Site')); 
$email->to('you@example.com');
$email->subject('About');
$email->send('My message');
you@example.com收到me@example.com发出的信,标题是‘About’,内容是‘My message’。功能达成,但毫无意义是吧,所以得进入下一步。

第四步:带变量的使用方式

$email->from($this->data['Contact']['email']); //Contact 是Model, email是它的一个field
$email->subject('Contact message from ' . $this->data['Contact']['name']);
$email->subject('Contact message ' . $this->data['Contact']['content'])
);

这样收到的信包含着内容,收件人知道是谁发出的信而不是从地址上猜测,以及从信头来估摸内容,算是真正意义上的一次交流。但是没有格式,所有文字都挤在一堆,迷失在[‘Contact’][‘content’]的信息汪洋中。
第五步:带模板的使用方式

$email->template('recover', 'default') //recover是template, default是layout
->emailFormat('html') //用html的格式发送,可选还有text,both

app/view/email/html/recover.ctp 部分代码:

<b>Dear <?php echo $user['User']['fname'] . " " .$user['User']['sname']; ?></b>,  //显示 Dear firstname lastname

app/view/layouts/email/html/default.ctp代码

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title><?php echo $title_for_layout;?></title>
</head>
<body>
<?php echo $content_for_layout;?>
<p>This email was sent by <a href="">Lily</a></p>
</body>
</html> //格式和html的差不多,只需要加上两句cake语句(绿色),它就会自动把template上的内容加载到这个大框架下

注意到在recover.ctp中的变量了么$user[‘User’][‘fname’],这又是哪里来的呢,马上揭晓
在controller上加上一句

$email->viewVars(array( 'user' =>$user  ));//$user是array,
这是用email来重置密码的一个样本
CakePHP Email

CakePHP Email

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: