想在thinkphp框架中使用zendframe mail的功能,故把操作过程记录以下:
把zendframe Lib下的文件目录全部复制到thinkphp的org目录下,(ThinkPHPExtendLibraryORG)这是thinkphp3.0的目录路径,其他版本可能有所不同。然后写个脚本把文件的后缀由.php改为.class.php
然后就可以调用了,但是如果一个一个的去引用文件会很不爽,所以thinkphp的Config.php文件中加入'APP_AUTOLOAD_PATH' =>'ORG',(自定义搜索路径)。不过这还没完,由于thinkphp的autoload方法里并不能映射zend的类名到相应的文件路径,不得已只好修改thinkphp的autoload方法(通过类名中的下划线来分割拼装路径)。同时还要修改import函数(因为import函数会自动将最后一段的字符串当作类名)
然后,就可以使用我要用的zend_mail类了,代码下面给出.
- autoload//shi_mody
- $classPart = explode('_',$class);
- $class2 = implode('.',$classPart);
- //shi_mody end
- foreach ($paths as $path){
- //var_dump($path.'.'.$class2);
- if(import($path.'.'.$class2))//shi_mody:$class=>$class2
- // 如果加载类成功则返回
- return ;
- }
import函数:
- if(strpos($class,'ORG/Zend')==0){
- $classname = preg_replace('///','_',substr($class,4));
- }else{
- $classname = basename($class);
- }
- if (!class_exists($classname,false)) {
- // 如果类不存在 则导入类库文件
- return require_cache($classfile);
- }
改文件名脚本:
- $dir = "Validate/";
- traceDir($dir,"reClass");
- function reClass($file){
- if(strpos($file,"class.php")){
- $nFile = preg_replace('/.php/',"class.php",$file);//文件名后缀记得满足条件
- rename($file,$nFile);
- }
- }
- function traceDir($dir,$callback){
- $h = opendir($dir);
- while(($file=readdir($h))){
- if($file=="." || $file=="..")
- continue;
- if(is_dir($dir.$file)){
- traceDir($dir.$file."/",$callback);
- }else{
- call_user_func_array($callback,array($dir.$file));
- }
- }
- }
调用zend_mail:
- class RssAction extends BaseAction{
- public function send(){
- $email = addslashes($_POST['email']);
- $title = addslashes($_POST['title']);
- $cont = $_POST['cont'];
- // import("ORG.Zend.Mail");//这里可以不用import了,另外tp框架里面默认的zend类库是放在ThinkPHPExtend里面的,如果使用tp默认的方法,则需要事先import,这时候如果类文件里面又引用了其他的类名,就需要实现import一大串的类
- $smtp = new Zend_Mail();
- $host="smtp.qq.com";
- $config = array(
- "port"=>25,
- "auth"=>"Login",
- "username"=>"werwer@qq.com",
- "password"=>"werwer23"
- );
- try{
- $smtpTrans = new Zend_Mail_Transport_Smtp($host,$config);
- $mail = new Zend_Mail();
- $mail->setDefaultTransport($smtpTrans);
- $mail->setBodyHtml($cont);
- $mail->setFrom($config["username"],"kindlerss.net")
- ->addTo($email, $email)
- ->setSubject($title);
- $mail->send();
- }catch(Exception $ex){
- echo $ex->message;
- }
- }
- }