2011年3月3日木曜日

PHPでメール送信してblogger自動投稿してみる

blogをメールで自動投稿してみたかったので、PHPでメール送信する関数を調べてみた。メール送るのはServersman@VPSのCentOSから。PHPを調べる前にまずはsendmailをgmailに転送する設定を行う。『SendmailでGmailに転送』を参考にした。参考というかほとんどそのまま。

hostnameを設定してなくServersman@VPSのデフォルトだったので、こんなエラーでメールが送れなかった。
sendmail[5819]: p212fPX3005816: p212fRX3005819: DSN: Service unavailable
genericsdomainをお名前.comで取得して割り当てたものに書き換えた。
# vi /etc/mail/genericsdomain
今度は認証のエラーが出た。
sendmail[49056]: STARTTLS=client, relay=smtp.gmail.com, version=TLSv1/SSLv3, verify=FAIL, cipher=RC4-SHA, bits=128/128
sendmail[49056]: p2134rs3049050: AUTH=client, available mechanisms do not fulfill requirements
sendmail[49056]: AUTH=client, relay=smtp.gmail.com, temporary failure, connection abort
関連するパッケージ入れる。
# yum install cyrus-sasl-md5 cyrus-sasl-plain
これでServersman@VPSからGmail転送してメールが送れるようになった。


次、bloggerでメール投稿をできるように設定する。設定 → メールとモバイルのページで、メールによる投稿アドレスのsecretWordsを設定する。特に難しいことはなくこれだけ。そのまま公開するのか、下書きとして保存するかを選ぶくらい。公開するような内容じゃないので、とりあえず下書き。



あとはPHPでメールを送れるようになれば、やりかたったこと完了。結論としては、PHPでメール送るのはmb_send_mailで行った。

mb_language("uni") ;
mb_internal_encoding("UTF-8");
$mailto="hogehoge.secretWords@fuga.com"; # メール投稿で設定したアドレス
$headers =  "Content-Type: text/html;charset=UTF-8\n";
$headers .= "From: hoge@gmail.com";      # 自分のメールアドレス
$subject = "テストメール";
$content = "<strong>テストテストテスト?</strong>";
mb_send_mail($mailto,$subject,$content,$headers);
な感じで。mb_languageでjaと指定していて文字化けを起こしてしまっていた。UTF-8の場合はuniで。ちゃんとmb_languageを読めば書いてありましたね。
言語とその設定は、Japanese の場合は ISO-2022-JP/Base64、uni の場合は UTF-8/Base64、English の場合は ISO-8859-1/quoted printable です。


あとはPHPをcronで定期的に動かせば、自動投稿はされる。自動で投稿するような内容もないのでやらんが。