[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
--------------------------------------------------------

お役に立てますでしょうか?。

############################################################