私がすでに見つけたのは
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto:"]];
ただし、メールアプリはcomposerビューだけでなく、通常の状態または最後の状態のメールアプリのみを開きます。
何か案は?
どうやらメールアプリケーションは2番目のURLスキームをサポートしているようです-message://
(私が思うに)特定のメッセージがアプリケーションによって取得された場合、それを開くことができます。メッセージURLを指定しない場合、メールアプリケーションが開きます。
NSURL* mailURL = [NSURL URLWithString:@"message://"];
if ([[UIApplication sharedApplication] canOpenURL:mailURL]) {
[[UIApplication sharedApplication] openURL:mailURL];
}
NSString *recipients = @"mailto:[email protected][email protected],[email protected]&subject=Hello from California!";
NSString *body = @"&body=It is raining in sunny California!";
NSString *email = [NSString stringWithFormat:@"%@%@", recipients, body];
email = [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:email]];
元のアミットの答えの迅速なバージョン:
Swift 2:
func openMailApp() {
let toEmail = "[email protected]"
let subject = "Test email".stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet()
let body = "Just testing ...".stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet()
if let
urlString = ("mailto:\(toEmail)?subject=\(subject)&body=\(body)")),
url = NSURL(string:urlString) {
UIApplication.sharedApplication().openURL(url)
}
}
Swift 3.0:
func openMailApp() {
let toEmail = "[email protected]"
let subject = "Test email".addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
let body = "Just testing ...".addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
if let
urlString = "mailto:\(toEmail)?subject=\(subject)&body=\(body)",
url = URL(string:urlString) {
UIApplication.shared().openURL(url)
}
}
他のアプリケーションを起動する唯一の方法はURLスキームを使用することなので、メールを開く唯一の方法はmailto:スキームを使用することです。残念ながら、これは常に作成ビューを開きます。
URLスキームmessage://
を使用すると、作成ビューを開かずにメールアプリを開くことができます
実際のデバイスでアプリを実行して呼び出します
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"[email protected]"]];
この行はシミュレータには影響しないことに注意してください。
URLスキームを知っていれば、iOSでアプリを起動できます。 Mailアプリのスキームが公開されていることを知りませんが、こっそりしてこれを試すことができます:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"message:message-id"]];
これを手がかりにしてくれたFarhad Noorzayに小道具。 MailアプリAPIのリバースエンジニアリングです。詳細はこちら: https://medium.com/@vijayssundaram/how-to-deep-link-to-ios-7-mail-6c212bc79bd9
Amitの答えを拡大:これにより、メールアプリが起動し、新しいメールが開始されます。文字列を編集して、新しい電子メールの開始方法を変更するだけです。
//put email info here:
NSString *toEmail=@"[email protected]";
NSString *subject=@"The subject!";
NSString *body = @"It is raining in sunny California!";
//opens mail app with new email started
NSString *email = [NSString stringWithFormat:@"mailto:%@?subject=%@&body=%@", toEmail,subject,body];
email = [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:email]];
Xamarinを使用してiOSアプリケーションを開発している場合、メールアプリケーションを開くのと同等のC#を以下に示しますcomposer view:
string email = "[email protected]";
NSUrl url = new NSUrl(string.Format(@"mailto:{0}", email));
UIApplication.SharedApplication.OpenUrl(url);
on Swift 2.3:メールボックスを開く
UIApplication.sharedApplication().openURL(NSURL(string: "message:")!)
スクリプトブリッジを使用することもできます。アプリでこのメソッドを使用して、組み込みのMail.appを使用して電子メール通知を送信するオプションをユーザーに直接提供しました。また、これを代替手段としてSMTP経由で直接実行するオプションも作成しました。
しかし、Mail.appメソッドを使用したいので、以下に従うことにより、その解決方法の詳細を見つけることができます。
https://github.com/HelmutJ/CocoaSampleCode/tree/master/SBSendEmail
がんばろう!
composerビューでデフォルトのメールアプリを開きます:
NSURL* mailURL = [NSURL URLWithString:@"mailto://"];
if ([[UIApplication sharedApplication] canOpenURL:mailURL]) {
[[UIApplication sharedApplication] openURL:mailURL];
}
デフォルトメールアプリを開きます:
NSURL* mailURL = [NSURL URLWithString:@"message://"];
if ([[UIApplication sharedApplication] canOpenURL:mailURL]) {
[[UIApplication sharedApplication] openURL:mailURL];
}
作成ビューなしでデフォルトのメールアプリを開くためのSwift 4/5。メールアプリが削除されると、アプリを再ダウンロードするオプションを含むUIAlertが自動的に表示されます:)
UIApplication.shared.open(URL(string: "message:")!, options: [:], completionHandler: nil)