iPhone ネイティブアプリからメールを送信する方法
結構苦労したので、備忘録代わりにメモ。
基本的には、mailto: の URI を作って、UIApplication の openURI: を使ってメーラを起動すればよい。
URI は "mailto:メールアドレス?Subject=題名&body=メッセージ本文" のような感じに作ってやればいい。気をつけなければならないのは以下の2点。
- 1. URL エンコードを行うこと
- 2. 本文は HTML で記述すること
1. のほうはあたりまえなのだが、2. のほうを見落としがちなので注意。順序としては、2. をやって、それから 1. をやる必要がある。なお、URL エンコードは NSString のstringByAddingPercentEscapesUsingEncoding: でできる。
例えば、本文中で改行したいなら、本文中に <br> と書く。さらに URL エンコードをして、%3Cbr%3E となる。
本文中に
私が作ったエンコード用のメソッドはこんな感じ。
- (void)EncodeMailBody:(NSMutableString*)str { #define REPLACE(from, to) \ [str replaceOccurrencesOfString: from withString: to \ options:NSLiteralSearch range:NSMakeRange(0, [str length])] // convert to HTML REPLACE(@"&", @"&"); REPLACE(@"<", @"<"); REPLACE(@">", @">"); REPLACE(@"\"", @"""); REPLACE(@" ", @" "); REPLACE(@"\n", @"<br>"); REPLACE(@"\n", @"<br>"); // URL encoding NSString *tmp = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; [str setString:tmp]; // encode for mail body REPLACE(@"&", @"%26"); }
なお、stringByAddingPercentEscapesUsingEncoding: は、& をエンコードしてくれないので、これをさらに %26 に置換する必要がある。