dansyaku
メンバー
2 years前の投稿 #
プラグインのContact form 7 からサーバーにメールを送り、
送られたメールをKtaiEntryで受け取り、フォームによる投稿を携帯電話からしようとしているのですが、
添付ファイル付きの投稿をしたときに添付ファイルの画像が記事に反映されません。
サーバーに保存されているメールを確認したところ、
添付ファイルは付いており、文字化けなどもなく正常に送信されているようでした。
携帯電話から直接メールをした場合には画像がアップされました。
対処方法が分かれば教えて頂きたいと思います。
宜しくお願いいたします。
プラグインのContact form 7 からサーバーにメールを送り、
送られたメールをKtaiEntryで受け取り、フォームによる投稿を携帯電話からしようとしているのですが、
添付ファイル付きの投稿をしたときに添付ファイルの画像が記事に反映されません。
添付ファイルの形式はどうなっていますか? multipart/mixed, multipart/related になっていますか?
ウェブのフォームでファイルアップロードしたときは application/x-www-form-urlencoded という形式で送信されますが、Contact Form 7 がこの形式でメールを送っているならば、Ktai Entry が未対応のため解析できません。
Contact Form 7 はメール送信処理を WordPress の標準の wp_mail() に丸投げしてますので、添付ファイル付きのメールは multipart/mixed で送られているはずです。
でも別のプラグインがこれをフィルタして書き換えることは可能なので、実際に送られてきたメールのヘッダを見る方が確実かも。
実際に送られてきたメールのヘッダを見る方が確実かも。
まったくそうですよね。お手数ですが、その「フォームによるメール投稿システム」の送信先を一時的に「yuriko-ktaientry (あっと) ゆりこねっと」に変更して送信してください (アドレスは適宜調整してください)。
そちらのサーバーに届いたメールを転送するのでも構いませんが、転送するやり方によっては、必要な情報が欠落する可能性があるので、「投稿システムの送信先を一時的に変更する」のが確実です。message/rfc822 形式で転送する方法があるのなら転送でも構いません。
dansyaku
メンバー
2 years前の投稿 #
ただいま送信先を「****@****.****」の方へ変えて送信させて頂きました。
お忙しい中、申し訳ありません。
宜しくお願い致します。
ただいま送信先を「yuriko-ktaientry@........net」の方へ変えて送信させて頂きました。
素のアドレスを書かないでくださいよ。スパム対策のためにアドレスを書かないようにしているのに!!
### フォーラム管理者へのお願い ###
上記リプライを削除もしくはメールアドレス部分を **** などへの書き換えをお願いいたします。
tai さん、ご対応ありがとうございました。
dansyaku さん。届いたメールを確認しましたが、
Content-Type: application/octet-stream; name="Water-lilies.jpg"
となっていました。これでは正しい画像ファイルと認識できません。MIME タイプが image/jpeg になるようにしなければなりません。Contact Form 7 にデータを渡すときの設定が悪いような気がします。
「application/octet-stream」の場合はファイル名の拡張子からタイプを判断するというのはセキュリティー的には危険なやり方なので、そういう実装はやりたくありません。
dansyaku
メンバー
2 years前の投稿 #
メールの件、すいませんでした。
頂いた情報を元に検証させて頂きたいと思います。
どうもありがとうございました。
application/octet-stream の MIME タイプは wp_mail() が $phpmailer->AddAttachment() をコールする際に引数のデフォルト値として設定しているもので、現行の wp_mail() では必ずそのようになります。Contact Form 7 が設定している値ではないのでご注意を。
http://core.trac.wordpress.org/browser/tags/2.9.2/wp-includes/pluggable.php#L430
http://core.trac.wordpress.org/browser/tags/2.9.2/wp-includes/class-phpmailer.php#L1113
wp_mail() 内のフック(たとえば 'phpmailer_init')を使って image/jpeg に置き換えることは可能ですが、「ファイル名の拡張子からタイプを判断」せずにそれをするのはたいへんかもしれません。
application/octet-stream の MIME タイプは wp_mail() が $phpmailer->AddAttachment() をコールする際に引数のデフォルト値として設定しているもので、現行の wp_mail() では必ずそのようになります。Contact Form 7 が設定している値ではないのでご注意を。
むむむ。となると、wp_mail() の仕様が「ダメすぎる」としか言いようがないですね。
つまり、wp_mail() 経由でフォームによる投稿を行うことはあきらめた方がいいと思います。
WordPress が作ったフォームによって投稿をさせるならば、いちいちメールを経由させる必要はありません。直接 API である wp_insert_post() を呼んでしまった方が早くて確実です。Ktai Entry のコードを参考にして、wp_insert_post()` を実行させてみてください。