やったこと

webサービスを作るときに考えたことを垂れ流します

【PHP】添付ファイル付きのメールを送信したら中身が見れない !

以下の記事みたいな感じで、PHPで添付ファイル付き(pdf)のメールを送信する処理を作った。
qiita.com

しかし、受信メールをメーラーで確認すると、ファイルが0KBになってしまって中身が見られない・・。
GmailのようなWeb上のメーラーだと見られるんだけど、Outlookみたいなデスクトップのメーラーだと見られない。

結論から言うと、以下の添付ファイルを書き込む処理の最後に、一つ改行が足りないのが原因だったらしい。

  $filetitle = mb_convert_encoding($filetitle, 'ISO-2022-JP');
  $filetitle = "=?ISO-2022-JP?B?" . base64_encode($filetitle) . "?=";
  $body .= "Content-Type: {$mime_type}; name=\"{$filetitle}\"\n" .
           "Content-Transfer-Encoding: base64\n" .
           "Content-Disposition: attachment; filename=\"{$filetitle}\"\r\n";
  $body .= "\r\n"; //★ここを追加!
  $f_encoded = chunk_split(base64_encode($filebody));
  $body .= $f_encoded . "\r\n";

これを発見するのに一日費やしてしまった・・。
メールヘッダの仕様細かすぎんよ・・。