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

7 篇文章 0 订阅
5 篇文章 0 订阅

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

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






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值