从我的应用程序中启动时,邮件应用程序会切断字符

时间:2012-05-31 16:41:32

标签: iphone ios email character-encoding url-encoding

我正在尝试设置一个预先填写的电子邮件,供用户通过iphone本机Mail应用程序发送。电子邮件正文包含用户想要共享的链接。

我的问题是该邮件应用程序正在切断该链接,但是当我在我的应用程序中打印出该字符串时,整个链接就在那里。

以下是一个示例链接:

http://sample.com/Start.asp?tqnm=xe2nbek92057479&bt=xg&o=100925&c=RB&p=2W7TvRx1

在邮件应用中,链接显示为:

http://sample.com/Start.asp?tqnm=xe2nbek92057479

我正在使用标准代码启动Mail应用程序:

NSString *mailString = [NSString stringWithFormat:@"mailto:?to=%@&subject=%@&body=%@",
                        [to stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding],
                        [subject stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding],
                        [body stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];
NSLog(@"Mail String: %@", mailString);
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:mailString]];

我也尝试了其他字符串编码,但我得到的结果相同,或者电子邮件的正文根本没有显示。

任何帮助都会非常感激。我一直在寻找答案,并没有发现任何东西甚至指向正确的方向。

2 个答案:

答案 0 :(得分:2)

我能够解决它,我发现了这个功能

NSString* encodeToPercentEscapeString(NSString *string) {
return (NSString *)
CFURLCreateStringByAddingPercentEscapes(NULL,
                                        (CFStringRef) string,
                                        NULL,
                                        (CFStringRef) @"!*'();:@&=+$,/?%#[]",
                                        kCFStringEncodingUTF8);      

然后我用它来编码身体,这照顾了Matthias所指的&符号。谢谢Matthias指出我正确的方向。

答案 1 :(得分:1)

这可能更像是一种解决方法,而不是答案,但是......您可以考虑使用MessageUI框架直接从您的应用程序中发送邮件。您可以轻松设置邮件正文而不会出现任何编码问题,对用户来说也可以更好一点(即不会从您的应用程序中切换)。

网上有很多关于如何执行此操作的教程/代码片段。 (我刚刚写了这篇文章Sending Mail from your App)。希望这有帮助!