[PHP-users 6766] Re: pdfファイルをメール添付する方法
FUJIMOTO Yoshihiko
php-users@php.gr.jp
Tue, 09 Apr 2002 14:52:58 +0900
こんにちは。藤本@おまかせコムです。
いつも参考にさせていただいております。
たまにはお役に立ちたいと思いまして、投稿します。
と思ったのですが、今、解決のメールが流れた様で恐縮です..f^^;
> ・・・
> 岡崎です。
こんにちは。
> ・・・
> phpで、pdfファイルを作成し、それをメールで添付して送りたい
> のですが、
>
> http://ns1.php.gr.jp/php-jp/archives/msg10005.html を参考に
> 松嶋様が、自社のページで提供されている sendAttachMail を利用
> して、送信しようとしています。
> メールの添付と送信は上手くいくのですが、受け取ったpdfファイルが
> 開けません。
> ・・・
私事ですが、以前 PDFlib 3.03 で利用していたスクリプトを、現在
PDFlib 4.0.2 に移行し、各ブラウザの表示チェック等をちょうど行
っていたところで、岡崎さんの投稿に出会いましたので、同サイト
を参考にさせてもらいながら、自分の環境で試験的に作ってみたと
ころ、無事、メールの添付が確認できました。
<実行環境>
OS : LASER5 Secure Server 6.9
Databse : PostgreSQL 7.1.1
Apache : 1.3.23
PHP : 4.1.2 (register_globals=off,safe_mode=on
PDFlib : 4.0.2
<クライアント>
ウェブの操作
OS : Win2k SP1
Browser : IE 5.00.3103.1000
メールの受信
OS : Win98 SE
Mailer : Netscape Messenger 4.75
Plug-in : Acrobat Reader 4.0.0421 01:12
<実行したスクリプト>
session_start();
//ログイン認証他
//DB検索
//計算実行
//◆新規PDFオブジェクト作成宣言
$pdf=pdf_new();
pdf_open_file($pdf,"");
//◆ドキュメント情報の設定
pdf_set_info($pdf,"Author","FUJIMOTO Yoshihiko");
pdf_set_info($pdf,"Keywords","debui,manui,pipin");
pdf_set_info($pdf,"Title", "Test of PDF document");
pdf_set_info($pdf, "Subject", "Are you debui ?");
//◆ページ開始
pdf_begin_page($pdf,$pageWpix,$pageHpix);
//PDF描画
//◆ページ終了
pdf_end_page($pdf);
//◆クローズ
pdf_close($pdf);
//メールヘの出力処理
$buf = pdf_get_buffer($pdf);
$MAIL_userMail="fujimoto@omakase.com";
$boundary="-*-*-*-*-*-*-*-*-Boundary_".uniqid("b");
$attach=base64_encode($buf);
//▼ヘッダ生成
$MAIL_head="";
$MAIL_head=$MAIL_head."Mime-Version: 1.0\n";
$MAIL_head=$MAIL_head."Content-Type: multipart/mixed;
boundary=\"".$boundary."\"\n";
$MAIL_head=$MAIL_head."Content-Transfer-Encoding: Base64\n";
$MAIL_head=$MAIL_head."From: ".$userFROM."\n";
$MAIL_head=$MAIL_head."Reply-To: ".$userRPLY."\n";
$MAIL_head=$MAIL_head."X-Mailer: ".$userXMLR."\n";
//▼メール内容
$MAIL_body="";
$MAIL_body=$MAIL_body."--".$boundary."\n";
$MAIL_body=$MAIL_body."Content-Type: text/plain;
charset=\"ISO-2022-JP\"\n";
$MAIL_body=$MAIL_body."\n";
$MAIL_body=$MAIL_body."###################################\n";
$MAIL_body=$MAIL_body."## ##\n";
$MAIL_body=$MAIL_body."## ほげほげ ##\n";
$MAIL_body=$MAIL_body."## ##\n";
$MAIL_body=$MAIL_body."###################################\n";
$MAIL_body=$MAIL_body."\n";
$MAIL_body=$MAIL_body.$MAIL_userName." 様\n";
$MAIL_body=$MAIL_body."\n";
$MAIL_body=$MAIL_body."日頃、××サービスをご利用いただき誠にありがとう
ございます。\n";
$MAIL_body=$MAIL_body."○○の出力結果を送るだピョン\n";
$MAIL_body=$MAIL_body."\n";
$MAIL_body=$MAIL_body.$MAIL_link.$MAIL_sig;
$MAIL_body=$MAIL_body."\n";
$MAIL_body=$MAIL_body."--".$boundary."\n";
$MAIL_body=$MAIL_body."Content-Type: application/octet-stream;
name=\"hoge.pdf\"\n";
$MAIL_body=$MAIL_body."Content-Transfer-Encoding: Base64\n";
$MAIL_body=$MAIL_body."Content-Disposition: attachment;
filename=\"hoge.pdf\"\n";
$MAIL_body=$MAIL_body."\n";
$MAIL_body=$MAIL_body.$attach."\n";
$MAIL_body=$MAIL_body."\n";
$MAIL_body=$MAIL_body."--".$boundary."--\n";
//▼メール送信
$set2=mb_send_mail($MAIL_userMail,"PDF出力テスト
",$MAIL_body,$MAIL_head);
//おしまい
pdf_delete($pdf);
# 私は、ファイルを作成したくなかったので、
# メモリ上にPDFファイルを作成する手法を
# 選んでいます。
# 他のOS、ブラウザ、メーラ、プラグイン等、
# あらゆる場合を検証した訳ではありませんの
# で、ご注意ください。
以上のスクリプトから、計算の結果動的に生成されたPDFファイ
を添付したメールが受信でき、無事開くことができました。
--------------------------------------------------------
Name: hoge.pdf
hoge.pdf Type: Acrobat (application/pdf)
Encoding: Base64
--------------------------------------------------------
お役に立てますでしょうか?。
############################################################