前天看了下,有人用phpmailer发邮件的例子,在thinkphp普通模式下。而我是想实现linux下计划任务(需TP的CLI模式不然url参数的地址请求打不过去,可能也有别的办法吧...)去定时发邮件目的。大部分顺利 当然也有注意的地方, 过程分享下废话说多了,往下看。
1. 基于tp实现首先得下载个完整在tp,我是tp3.1
http://www.thinkphp.cn/down/338.html
2.phpmailer也少不了
https://github.com/PHPMailer/PHPMailer,解压后在ThinkPHP\Extend\Vendor\PHPMailer
3.配置参数
index.php 加一句
define('MODE_NAME', 'cli'); // 采用CLI运行模式运行
还有包含thinkphp目录要写绝对路径
项目下config.php
//邮件
'THINK_EMAIL' => array(
'SMTP_HOST' => 'smtp.163.com', //SMTP服务器
'SMTP_PORT' => '25', //SMTP服务器端口
'SMTP_USER' => '**********', //SMTP服务器用户名
'SMTP_PASS' => '**********', //SMTP服务器密码
'FROM_EMAIL' => '**********', //发件人EMAIL
'FROM_NAME' => '', //发件人名称
'REPLY_EMAIL' => '', //回复EMAIL(留空则为发件人EMAIL)
'REPLY_NAME' => '', //回复名称(留空则为发件人名称)
),
4.发送函数写在common下便于使用
/**
* 系统邮件发送函数
* @param string $to 接收邮件者邮箱
* @param string $name 接收邮件者名称
* @param string $subject 邮件主题
* @param string $body 邮件内容
* @param string $attachment 附件列表
* @return boolean
*/
function send_mail($to, $name, $subject = '', $body = '', $attachment = null){
$config = C('THINK_EMAIL');
vendor('PHPMailer.class#phpmailer'); //从PHPMailer目录导class.phpmailer.php类文件
$mail = new PHPMailer();
$mail->CharSet = 'UTF-8'; //设定邮件编码
$mail->IsSMTP(); // 设定使用SMTP服务
$mail->SMTPDebug = 1; // 0关闭SMTP调试功能
// 1 = errors and messages
// 2 = messages only
$mail->SMTPAuth = true; // 启用 SMTP 验证功能
//$mail->SMTPSecure = 'ssl'; // 使用安全协议
$mail->Host = $config['SMTP_HOST']; // SMTP 服务器
$mail->Port = $config['SMTP_PORT']; // SMTP服务器的端口号
$mail->Username = $config['SMTP_USER']; // SMTP服务器用户名
$mail->Password = $config['SMTP_PASS']; // SMTP服务器密码
$mail->SetFrom($config['FROM_EMAIL'], $config['FROM_NAME']);
$replyEmail = $config['REPLY_EMAIL']?$config['REPLY_EMAIL']:$config['FROM_EMAIL'];
$replyName = $config['REPLY_NAME']?$config['REPLY_NAME']:$config['FROM_NAME'];
$mail->AddReplyTo($replyEmail, $replyName);
$mail->Subject = $subject;
$mail->MsgHTML($body);
if(is_array($to)){
foreach ($to as $mail_add){
$mail->AddAddress($mail_add, '');
}
}
if(is_array($attachment)){ // 添加附件
foreach ($attachment as $file){
is_file($file) && $mail->AddAttachment($file);
}
}
return $mail->Send() ? true : false;
}
5. 模块/动作
//crontab 自动发邮件
class IndexAction extends Action {
public function auto(){
$config = C('EMAIL_CONTENT_INFO');
//发送邮件
$res = send_mail($config['EMAIL'], '', $config['SUBJECT'], $config['CONTENT'], $filename);//filename 有附件添加附加附件
......
}
6.添加到crontab 5分钟发一次
调用:模块/动作/参数
*/5 * * * * root /usr/local/php/bin/php -f /home/www/index.php Index/auto
记录了简单日志后发现,哈哈 大功告成 ! 不知是不是调的太频繁 只有一条发送失败了。