如何把php导出的Excel 作为邮件发送

hxl5u 2014-06-11 05:00:33
现在实现了点击后下载excel,和发送文本邮件的功能,怎么能结合下,把php导出的excel作为附件发送就完美了。
1 .生成excel:

header("Content-type:application/octet-stream");
header("Accept-Ranges:bytes");
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:attachment;filename=".$filename.".xls");
header("Pragma: no-cache");
header("Expires: 0");

if (!empty($title)){
foreach ($title as $k => $v) {
$title[$k]=iconv("UTF-8", "GB2312",$v);
}
$title= implode("\t", $title);
echo "$title\n";
}
if (!empty($data)){
foreach($data as $key=>$val){
foreach ($val as $ck => $cv) {
$data[$key][$ck]=iconv("UTF-8", "GB2312", $cv);
}
$data[$key]=implode("\t", $data[$key]);
}
echo implode("\n",$data);
}


2 . 发送邮件:
用了phpmailer类库

$mail = new PHPMailer();
$mail->CharSet = 'UTF-8';
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = '';
$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);
$mail->AddAddress($to, $name);
if(is_file($attachment)){ // 添加附件
$mail->AddAttachment($attachment);
}
return $mail->Send()
...全文
700 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
snowyzhao 2015-07-13
  • 打赏
  • 举报
回复
引用 10 楼 hxl5u 的回复:
[quote=引用 9 楼 chinmo 的回复:] 提个思路,你可参考下: 先把excel保存在服务器上,然后获得该excel的路径,然后作为附件进行email发送,如果你不需要这个文件了,然后再执行删除操作就OK了
en 就是不想生成文件 直接获取内容发送文件 然后删除临时文件。。 已经按 @xuzuning 大哥的方法实现 谢谢你[/quote] 亲,为什么我用了ob_get_clean 还弹出另存 ???
hxl5u 2014-06-27
  • 打赏
  • 举报
回复
引用 9 楼 chinmo 的回复:
提个思路,你可参考下: 先把excel保存在服务器上,然后获得该excel的路径,然后作为附件进行email发送,如果你不需要这个文件了,然后再执行删除操作就OK了
en 就是不想生成文件 直接获取内容发送文件 然后删除临时文件。。 已经按 @xuzuning 大哥的方法实现 谢谢你
  • 打赏
  • 举报
回复
提个思路,你可参考下: 先把excel保存在服务器上,然后获得该excel的路径,然后作为附件进行email发送,如果你不需要这个文件了,然后再执行删除操作就OK了
  • 打赏
  • 举报
回复
汗!那样导出的还没有路径,你如何作为附件发送呢?? 你这不是天方夜谭么?
hxl5u 2014-06-12
  • 打赏
  • 举报
回复
可能要写到磁盘上 ,在发送这个磁盘文件。。
xuzuning 2014-06-12
  • 打赏
  • 举报
回复
看了还问? ob_get_clean
hxl5u 2014-06-12
  • 打赏
  • 举报
回复
引用 4 楼 xuzuning 的回复:
肯定是你哪里出错了,认真检查一下 你实际输出的是文本文件,用记事本就可打开 ob 函数的功能、用法,手册中都有
嗯嗯 看了用法 能做到禁止输出吗? 写完附件清除。。 不弹出另存
xuzuning 2014-06-12
  • 打赏
  • 举报
回复
肯定是你哪里出错了,认真检查一下 你实际输出的是文本文件,用记事本就可打开 ob 函数的功能、用法,手册中都有
hxl5u 2014-06-12
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
第7行处加入
ob_start();

第23行后加入
$s = ob_get_flush();
file_put_contents($filename.".xls", $s);
$attachment = $filename.".xls";
执行邮件发送

加了ob_start() excel打不开了,怎么能做到不弹出另存excel的输出呢,就附件只送到$s = ob_get_flush();这里。 不再浏览器界面上任何弹出
hxl5u 2014-06-11
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
第7行处加入 ob_start(); 第23行后加入 $s = ob_get_flush(); file_put_contents($filename.".xls", $s); $attachment = $filename.".xls"; 执行邮件发送
好的好的 我也试了ob_get_contents 半天还是没思路 谢谢老大指点 我试试看
xuzuning 2014-06-11
  • 打赏
  • 举报
回复
第7行处加入 ob_start(); 第23行后加入 $s = ob_get_flush(); file_put_contents($filename.".xls", $s); $attachment = $filename.".xls"; 执行邮件发送

20,396

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧