こんにちは私は私のアプリから電子メールプログラムを開きたいのですが、本文はすでに定義されているはずです。電子メールを開くことはできますが、電子メールの本文を特定のパラメータとして定義して、特定の標準テキストを表示する方法がわかりません。誰でも助けることができますか?メールを開くために使用するコードは次のとおりです。
//EMAIL
let email = "[email protected]"
let urlEMail = NSURL(string: "mailto:\(email)")
if UIApplication.sharedApplication().canOpenURL(urlEMail!) {
UIApplication.sharedApplication().openURL(urlEMail!)
} else {
print("Ups")
}
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:
を実装する必要があります
他の人が言及しているように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)
}
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)
}
}
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.")
}
})
}
}
}
次のようにMFMailComposeViewController
を使用します。
MessageUIをインポートする
import MessageUI
デリゲートをクラスに追加します。
class myClass: UIViewController, MFMailComposeViewControllerDelegate {}
必要な電子メールプリセットを構成します
let mail = MFMailComposeViewController()
mail.mailComposeDelegate = self
mail.setSubject("Subject")
mail.setMessageBody("Body", isHTML: true)
mail.setToRecipients(["[email protected]"])
presentViewController(mail, animated: true, completion: nil)
このメソッドをコードに入れます:
func mailComposeController(controller: MFMailComposeViewController!, didFinishWithResult result: MFMailComposeResult, error: NSError!) {
dismissViewControllerAnimated(true, completion: nil)
}
さあ、今はうまくいきます。
MFMailComposeViewController に関する公式ドキュメントに記載されているAppleの方法を使用することをお勧めします。送信後に却下される電子メールでモーダルビューコントローラーを開きます。したがって、ユーザーはアプリにとどまります。