1

PDFを生成してメールで送信するPHPスクリプトを作成しようとしています。私の PDF ジェネレーターは独立した URL として完全に動作しますが、生成された PFD をスクリプトで電子メールで送信しようとすると、何らかの理由で受信したファイルを開くことができません。コードは次のとおりです。

include_once('Mail.php');
include_once('Mail/mime.php');

$attachment = "cache/form.pdf";

// vvv This line seems to be where the breakdowns is vvv
file_put_contents( $attachment, file_get_contents( "http://www.mydomain.com/generator.php?arg1=$arg1&arg2=$arg2" ) );

$message = new Mail_mime();
$message->setTXTBody( $msg );
$message->setHTMLBody( "<html><body>$msg</body></html>" );
$message->addAttachment( $attachment );
$body = $message->get();

$extraheaders = array(  "From"      => $from,
            "Cc"        => $cc,
            "Subject"   => $sbj );

$mail = Mail::factory("mail");

$headers = $message->headers( $extraheaders );
$to = array(    "Jon Doe <jon@mydomain.com>",
        "Jane Doe <jane@mydomain.com>" );
$addresses = implode( ",", $to );

if( $mail->send($addresses, $headers, $body) )
    echo    "<p class=\"success\">Successfully Sent</p>";
else
    echo    "<p class=\"error\">Message Failed</p>";

unlink( $attachment );

私がマークした行は、キャッシュフォルダーに PDF ファイルを生成しますが、開かないので、それが問題のようです。ただし、既に存在する PDF ファイルを添付しようとすると、同じ問題が発生します。私も試してみ$message->addAttachment( $attachment, "Application/pdf" );ましたが、違いはないようです。

4

2 に答える 2

1

通常、Web サーバー ディレクトリの書き込み権限はロックダウンされている必要があります。これがおそらく、 で問題が発生している理由ですfile_put_contents('cache/form.pdf')

// A working example: you should be able to cut and paste, 
// assuming you are on linux.
$attachment = "/var/tmp/Magick++_tutorial.pdf";
file_put_contents($attachment, file_get_contents( 
     "http://www.imagemagick.org/Magick++/tutorial/Magick++_tutorial.pdf"));

PDF を保存する場所を、すべてのユーザーに書き込みと読み取りのアクセス許可を許可するディレクトリに変更してみてください。また、このディレクトリが Web サーバー上にないことを確認してください。

また、次の3つのことを変更してみてください

から

$message = new Mail_mime();

// you probably don't need this the default is
// $params['eol'] - Type of line end. Default is ""\r\n""
$message = new Mail_mime("\r\n");

から

$extraheaders = array(  
       "From"      => $from,
       "Cc"        => $cc,
       "Subject"   => $sbj,
     );

$extraheaders = array(  
        "From"      => $from,
        "Cc"        => $cc,
        "Subject"   => $sbj,
        'Content-Type' => 'text/html'
    );

から

$message->addAttachment($attachment);

// the default second argument is $c_type = 'application/octet-stream'
$isAttached = $message->addAttachment($attachment, 'aplication/pdf');
if ($isAttached !== true) {
    // an error occured
    echo $isAttached->getMessage();
}

そして、あなたは常にあなたが電話をかけたいと思っています

$message->get();

$message->headers($extraheaders);

またはすべてが機能しません

于 2013-12-16T22:02:15.280 に答える
0

file_get_contents() をブロックしている ini の問題に違いないと確信しています。しかし、私はより良い解決策を思いつきました。generator.php ファイルを作り直して、関数定義にしました。だから私は持っている:

include_once('generator.php');
$attachment = "cache/form.pdf";
file_put_contents( $attachment, my_pdf_generator( $arg1, $arg2 ) );
...
$message->addAttachment( $attachment, "application/pdf" );

この方法では、最初にファイルを書き込む必要はありません。うまく機能します (ただし、Outlook/Exchange Server にはまだわずかな問題がありますが、それはほとんど無関係の問題だと思います)。

于 2013-12-18T16:18:50.030 に答える