2012-02-08 13 views
0

PDFファイルを生成するのに過去2年間FPDFを使用しています。このファイルが生成された後、それは私に電子メールで送られます。私は最近、新しいサーバーに全く同じスクリプトをインストールしました。 1つまたは他の理由から、私はエラーメッセージが出ないので、PDFの生成が機能します。私は電子メールで受信するメッセージがストレートテキストで、次のようになります。電子メールのFPDF生成添付ファイルが奇妙な文字で構成されています

--4aca5942d8bd7e7d523d8b2d71c6b1ea-- または --d7582bf6769dd1fa2ee8f05cb04cf445--

すべてのメッセージが異なっています。

剥奪コードは次のとおりです。

require('class.phpmailer.php'); 
require('fpdf.php'); 
define('FPDF_FONTPATH','font/'); 

//Create new PDF 
$pdf=new PDF(); 
$pdf->AliasNbPages(); 
$pdf->company = $business; 

$pdf->SetFont('Arial','',12); 
$pdf->SetAutoPageBreak(false); 
$pdf->AddPage('P'); 

// email stuff 
$tijd = time(); 
$datum = date('j-m-Y', $tijd); 
$bestandsnaam = $usernameinlog."-".$datum; 
$from = "[email protected]".$website; 
$subject = "Voorraad mutatie door ".$usernameinlog; 
$message = "<p>Zie bijlage voor een mutatieoverzicht.</p>"; 

// a random hash will be necessary to send mixed content 
$separator = md5(time()); 

// carriage return type (we use a PHP end of line constant) 
$eol = PHP_EOL; 

// attachment name 
$filename = $bestandsnaam.".pdf"; 

// encode data (puts attachment in proper format) 
$pdfdoc = $pdf->Output("", "S"); 
$attachment = chunk_split(base64_encode($pdfdoc)); 

// main header (multipart mandatory) 
$headers = "From: ".$from.$eol; 
$headers .= "MIME-Version: 1.0".$eol; 
$headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"".$eol.$eol; 
$headers .= "Content-Transfer-Encoding: 7bit".$eol; 
$headers .= "This is a MIME encoded message.".$eol.$eol; 


// The actual message 
$headers .= "--".$separator.$eol; 
$headers .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol; 
$headers .= "Content-Transfer-Encoding: 8bit".$eol.$eol; 
$headers .= $message.$eol.$eol; 

// Bijlage 
$headers .= "--".$separator.$eol; 
$headers .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol; 
$headers .= "Content-Transfer-Encoding: base64".$eol; 
$headers .= "Content-Disposition: attachment".$eol.$eol; 
$headers .= $attachment.$eol.$eol; 
$headers .= "--".$separator."--"; 


mail($emailemployee, $subject, "", $headers); 

誰が間違って何が起こっているか知っているか、私は、php.iniのパラメータをしないのですか? もう一度:この同じコードが別のサーバーで動作していたので、設定が間違っているとか、インストールするのを忘れてしまったと思います。

:-)のおかげで、

アレックス

+0

それが見えますいくつかのハッシュ値のようなもの - いくつかのコードを投稿できますか? pdf生成や電子メールのスニペットのように。 – maialithar

+0

私は説明のために上記のコードを追加しました! –

答えて

0

$eol = PHP_EOL;は、サーバーがWindowsを実行していない場合に問題を引き起こす可能性があります。

あなたはハードコード$eol = "\r\n";

べき時には、サーバーとクライアントは、CRまたはLFのどちらかで対応しますので、メールの各行には、関係なく、OSの、CRLFで終わる必要がありますが、それは本当に非標準と彼らですする必要はありません。

。あなたはまだこの後に問題が発生した場合


、あなたは(簡潔にするために、おそらく2行にbase64でビットをトリム)の質問へのメッセージソースを追加することができますしてください?あなたは、基本的には何とか $ヘッダに詰め、全体コンテンツで空のメッセージを送信する

+0

メッセージソースは本当に長いコードですが、Linuxサーバーで動作します。 base64ビットを2行にトリムするとどういう意味ですか? Alex –

+0

@AlexvanRijsソースが長い主な理由は、添付ファイルが添付されている(添付ファイルが長いbase64でエンコードされた文字列として表示されます)、 'AAAQAgAIAAAAAAAAAQAWAABAAAAAAAAABAQAWABAAAAAQAAABEQCGABAAAA'のような行がたくさんあります。あなたを助けるために、私は本当にこのソースを見る必要があります(ただし、添付ファイルのすべてを見る必要はないので、ソースからbase64行のうち2つを除くすべてを削除できます)。この質問にソースを投稿するか、別の場所に投稿してリンクすることができます。 – SimonMayer

0
mail($emailemployee, $subject, "", $headers); 

....

代わりに$ヘッダの$ body変数に$headers .= "Content-Transfer-Encoding: 7bit".$eol;の下にすべてを入れてみてください、その後

で送ります
mail($emailemployee, $subject, $body, $headers); 

(SimonMayerによって示唆されているようにも$eol = "\r\n"$eol = PHP_EOLを置き換える)

+0

Gryphius、前に私が$ eol変数を "r \ n"に変更してコードを更新しました。$ headerを$ bodyに変更してこの変数をメール機能に追加すると、電子メールはまったく送信されません。反対側では、これを$ヘッダに残して$ eol = "\ r \ n"を残しておけば、私はメッセージを取得しますが、まだハッシュで( - 41e12eb8038d06a471d8a74519f62fe5--) –

関連する問題