風柳メモ

ソフトウェア・プログラミング関連の覚書が中心

GAE-Cron Clubに正常に登録できない(無効となる)不具合修正

修正内容

GAE-Cron Club GAE-Cron Club - プロバイダ一覧

で、ある時期(恐らく2010年3月20日過ぎ頃)から、正しくプロバイダ(サイト)登録を行なっているにも関らず、『登録済 GAE-Cron サイト一覧』で「状態:無効」となってしまい、トップページにも反映されない不具合が出ていたようですので、これを修正しました。


該当する方々は、お手数ですが、各位の設定画面の『登録済 GAE-Cron サイト一覧』にて「状態:無効」になっているサイトについて、[更新]ボタンを押してみて下さい。

  • 状態:確認中」となる場合は、しばらく待ってから*1、ブラウザの画面を更新して下さい。
  • 状態:有効」に変わっていれば正常に登録できています。

不具合についてコメントでご報告いただいたid:tomoaki96さん他、どうもありがとうございました。
よろしければ、ご確認願えればと思います。

原因(覚書)

プロバイダ認証用にメールで

{"url": "http:\/\/gaecronclub.appspot.com\/receive_report", "nonce": "7554f3bc8565fa9f60ab7a79a61f387b2af29064a9254f513d4dbcc4", "id": "xxxxx"}

のようなものを送信していたが、これがある時期から、(Google App Engineの)受信側のbodyで

{"url": "http:\/\/gaecronclub.appspot.com\/receive_report", "nonce": "7554f=
3bc8565fa9f60ab7a79a61f387b2af29064a9254f513d4dbcc4", "id": "xxxxx"}

のように76文字を越えると'='+改行(Soft Line Break(s))で分割されるようになった模様。で、GAE-Cron側でこれを考慮していなかったため、nonceを比較して異常としてはじいていた。


どうも、Google App Engineのメール受信側では、現状、メールのヘッダに"Content-Transfer-Encoding"が入っていないと、"Content-Transfer-Encoding: quoted-printable"として処理するようで、だとすると76文字制限&Soft Line Breaksによる分割は正しい……以前は単なる改行だった気がするのだけれども(Content-Transfer-Encodingがどうなっていたかは不明)。


ちなみに「Content-Transfer-Encoding: 7bit」などと明示されたメールを受信した場合は、上記の分割は起こらない(当然だけれども)。
ただ、GAEのメール送信側で使用するmail.send_mail()のパラメータ(Email Message Fields)だと、"Content-Transfer-Encoding"などは明示出来ない(多分)のが困りもの。


幾つか試したところ、mail.send_mail()のbodyにUNICODE(日本語)を設定した場合は、

  • 送信側で「Content-Type: text/plain; charset="iso-2022-jp"」付与。
  • 送信側で「Content-Transfer-Encoding: 7bit」付与。

bodyがUNICODEじゃない場合は、

  • 送信側で「Content-Type: text/plain; charset="iso-8859-1"」付与。
  • 送信側では"Content-Transfer-Encoding"は付けない。
  • 受信側で「Content-Transfer-Encoding: quoted-printable」として解釈。

のような感じ、なのかなぁ?

*1:認証メールの送信等を行なっているため、時間がかかる場合があります