2010-12-15

【ブログ】BloggerにPHPからメールで投稿する方法

翌日発売するマンガやラノベのデータを自動でBloggerに投稿するシステムを開発して運用しています。
プログラミング言語はPHPを使っているのですが、ちょっとめんどくさかったのでメモを残しておきます。

基本的にPHPでメールを送信するには「mb_send_mail」という関数で送信します。また、日本語メールは一般的にJISコードが使用されています。
ですが、Bloggerのメール投稿は日本語エンコードがUTF-8なので、メールもUTFエンコードに変換して送らなければなりません。

例としては、

----
mb_language( 'uni' );
mb_internal_encoding( 'UTF-8' );

$to = 'xxxx@xxxx.jp';
$subject = 'ブログタイトル';
$body = 'ブログ本文';

mb_send_mail( $to, $subject, $text );
exit();
----

といったプログラムになると思います。
ですが、これだけではBloggerに投稿した際に文字化けを起こしてしまいます。

そこで、改良版として以下のようにしています。

----
mb_language( 'uni' );
mb_internal_encoding( 'UTF-8' );

$to = 'xxxx@xxxx.jp';
$subject = 'ブログタイトル';
$body = 'ブログ本文';
$from = 'From: xxxx@xxxxx.jp' . "\r\n";
$from .= 'Content-Type: text/html; charset=UTF-8' . "\r\n";

mb_send_mail( $to, $subject, $text, $from );
exit();
----

$from変数には、Fromヘッダだけではなくて他のいろんなメールヘッダを挿入することができます。
例の通り、「Content-Type」ヘッダを追加してcharset属性でもUTF-8を指定しています。これで文字化けなく投稿することが出来ました。
注意する点は、$fromに挿入するヘッダの各行ごとに「\r\n」を末尾へ挿入することぐらいでしょうか。

ちなみに、メールで投稿するブログ本文にもHTMLタグを挿入することができ、投稿してから編集する必要はありません。
ですが、「ラベル」と呼ばれるBloogerのタグをメール投稿に付加することが出来ないので、これは投稿してから編集する必要がありますね。

ZenBack

WebMoney ぷちカンパ