linux 计划任务定时发邮件 phpmailer 和 thinkphp

来源:互联网 发布:知乎双刀周杰伦 编辑:程序博客网 时间:2024/04/28 14:45

前天看了下,有人用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

记录了简单日志后发现,哈哈 大功告成 ! 不知是不是调的太频繁 只有一条发送失败了。






0 0