web-dev-qa-db-ja.com

iOSで事前定義されたテキストを使用してアプリからメールを開く

こんにちは私は私のアプリから電子メールプログラムを開きたいのですが、本文はすでに定義されているはずです。電子メールを開くことはできますが、電子メールの本文を特定のパラメータとして定義して、特定の標準テキストを表示する方法がわかりません。誰でも助けることができますか?メールを開くために使用するコードは次のとおりです。

//EMAIL
let email = "[email protected]"
let urlEMail = NSURL(string: "mailto:\(email)")

if UIApplication.sharedApplication().canOpenURL(urlEMail!) {
                UIApplication.sharedApplication().openURL(urlEMail!)
} else {
print("Ups")
}
8
JanScott

MFMailComposeViewControllerを使用してそれを行うことができます:

import MessageUI

let mailComposerVC = MFMailComposeViewController()
mailComposerVC.mailComposeDelegate = self
mailComposerVC.setToRecipients(["[email protected]"])
mailComposerVC.setSubject("Subject")
mailComposerVC.setMessageBody("Body", isHTML: false)
self.presentViewController(mailComposerVC, animated: true, completion: nil)

また、MFMailComposeViewControllerDelegateを閉じる必要があるMFMailComposeViewControllerからmailComposeController:didFinishWithResult:error:を実装する必要があります

14

他の人が言及しているようにMFMailComposeViewControllerを表示するのではなく、組み込みのメールアプリを開きたい場合は、次のようにmailto:リンクを作成できます。

let subject = "My subject"
let body = "The awesome body of my email."
let encodedParams = "subject=\(subject)&body=\(body)".stringByAddingPercentEncodingWithAllowedCharacters(.URLQueryAllowedCharacterSet())
let url = "mailto:[email protected]?\(encodedParams)"

if let emailURL = NSURL(url) {
    if UIApplication.sharedApplication().canOpenURL(emailURL) {
        UIApplication.sharedApplication().openURL(emailURL)
    }
}

2016年には、入力者を節約するために、構文が少し変更されました。

let subject = "Some subject"
let body = "Plenty of email body."
let coded = "mailto:[email protected]?subject=\(subject)&body=\(body)".stringByAddingPercentEncodingWithAllowedCharacters(.URLQueryAllowedCharacterSet())

if let emailURL:NSURL = NSURL(string: coded!)
    {
    if UIApplication.sharedApplication().canOpenURL(emailURL)
        {
        UIApplication.sharedApplication().openURL(emailURL)
        }
24
mclaughlinj

Swift 3バージョン

let subject = "Some subject"
let body = "Plenty of email body."
let coded = "mailto:[email protected]?subject=\(subject)&body=\(body)".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)

if let emailURL: NSURL = NSURL(string: coded!) {
    if UIApplication.shared.canOpenURL(emailURL as URL) {
        UIApplication.shared.openURL(emailURL as URL)
    }
}
15
Matthew Barker

Swift 4.

    let email = "[email protected]"
    let subject = "subject"
    let bodyText = "Please provide information that will help us to serve you better"
    if MFMailComposeViewController.canSendMail() {
        let mailComposerVC = MFMailComposeViewController()
        mailComposerVC.mailComposeDelegate = self
        mailComposerVC.setToRecipients([email])
        mailComposerVC.setSubject(subject)
        mailComposerVC.setMessageBody(bodyText, isHTML: true)
        self.present(mailComposerVC, animated: true, completion: nil)
    } else {
        let coded = "mailto:\(email)?subject=\(subject)&body=\(bodyText)".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
        if let emailURL = URL(string: coded!)
        {
            if UIApplication.shared.canOpenURL(emailURL)
            {
                UIApplication.shared.open(emailURL, options: [:], completionHandler: { (result) in
                    if !result {
                        // show some Toast or error alert
                        //("Your device is not currently configured to send mail.")
                    }
                })
            }
        }
    }
7
Manish Nahar

次のようにMFMailComposeViewControllerを使用します。

  1. MessageUIをインポートする

    import MessageUI
    
  2. デリゲートをクラスに追加します。

    class myClass: UIViewController, MFMailComposeViewControllerDelegate {}
    
  3. 必要な電子メールプリセットを構成します

    let mail = MFMailComposeViewController()
    mail.mailComposeDelegate = self
    mail.setSubject("Subject")
    mail.setMessageBody("Body", isHTML: true)
    mail.setToRecipients(["[email protected]"])
    presentViewController(mail, animated: true, completion: nil)
    
  4. このメソッドをコードに入れます:

    func mailComposeController(controller: MFMailComposeViewController!, didFinishWithResult result: MFMailComposeResult, error: NSError!) {
        dismissViewControllerAnimated(true, completion: nil)
    }
    

さあ、今はうまくいきます。

4
LinusGeffarth

MFMailComposeViewController に関する公式ドキュメントに記載されているAppleの方法を使用することをお勧めします。送信後に却下される電子メールでモーダルビューコントローラーを開きます。したがって、ユーザーはアプリにとどまります。

0
David Rysanek