強火で進め

このブログではプログラム関連の記事を中心に書いてます。

Google Toolbox for Macを使って日本語メールを簡単に送る


iPhoneのプログラムでは openURL メソッドを使ってこの様に簡単に件名や本文が入った状態でメーラを起動できます。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://hogehoge@example.com?subject=abc&body=123"]];

しかし、このメソッドでは日本語が使えません。こちらの対策も「Google Toolbox for Mac」を使えば簡単にできます。

必要なファイルはこちら

  • GTMGarbageCollection.h
  • GTMNSString+URLArguments.h
  • GTMNSString+URLArguments.m

プログラムはこんな感じ。前に紹介したHTMLのエスケープ処理と同様にカテゴリとして実装されているURLのエスケープ処理メソッドを使います。

    NSString* title = [NSString stringWithString:@"タイトル"];
    NSString* body = [NSString stringWithString:@"本文"];
    NSString* mailtoURI = [NSString stringWithFormat:@"mailto://hogehoge@example.com?subject=%@&body=%@", 
                           [title gtm_stringByEscapingForURLArgument], [body gtm_stringByEscapingForURLArgument]];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:mailtoURI]];

基本的にやってることは文字列を gtm_stringByEscapingForURLArgument でエスケープ処理してるだけで、他は英文のメールのときと同様の記述でOKです。

日本語が使える事により

  • アプリの改善要望送信用
  • デバックを依頼している人のiPhoneでしか発生しないバグを探るためにデータ取得して差し込む

など色々と活用の範囲が広がるのではないでしょうか。

(2009/09/17 追記)
コメント欄にて id:paella さんより「メールヘッダ部分のエンコーディング時のルール」についての指摘がありました。

こちらSMTPでメール送信する場合は対処しておいた方が良い(実際はほとんどのメーラーが対処してなくても問題無く処理できるみたいですけどw)のですけど今回はiPhoneメーラー経由での送信なのでその辺りはそっちが処理してくれるのでは?って認識していました。

でも、すぐに検証できるところを予想だけで済ますのはイカンので実際に文字数の多いタイトルを送信するプログラムを作成して検証してみました。

今回テストに使用したタイトルは「0123456789」を10回繰り返した全角100文字です。こちらを送信し、受信したメールの中からタイトル部分を抽出したのが以下の部分です。

Subject: =?iso-2022-jp?B?GyRCIzAjMSMyIzMjNCM1IzYjNyM4IzkjMCMxIzIjMyM0GyhC?=
 =?iso-2022-jp?B?GyRCIzUjNiM3IzgjOSMwIzEjMiMzIzQjNSM2IzcjOCM5GyhC?=
 =?iso-2022-jp?B?GyRCIzAjMSMyIzMjNCM1IzYjNyM4IzkjMCMxIzIjMyM0GyhC?=
 =?iso-2022-jp?B?GyRCIzUjNiM3IzgjOSMwIzEjMiMzIzQjNSM2IzcjOCM5GyhC?=
 =?iso-2022-jp?B?GyRCIzAjMSMyIzMjNCM1IzYjNyM4IzkjMCMxIzIjMyM0GyhC?=
 =?iso-2022-jp?B?GyRCIzUjNiM3IzgjOSMwIzEjMiMzIzQjNSM2IzcjOCM5GyhC?=
 =?iso-2022-jp?B?GyRCIzAjMSMyIzMjNCM1IzYjNyM4IzkbKEI=?=

各行、バッチリ75文字以内に収まってます。
mailto: で起動したiPhoneメーラーから送信する分には1行の文字制限のルールは自分のプログラムで考慮する必要はなさそうです。