2016-11-30 15 views
29

私は電子メールを送るオプションでアプリケーションを設定しようとしています。swiftからメールを送信3

私はこのコードを持っている:

import Foundation 
import MessageUI 
import UIKit 

class emailClass: UIViewController, MFMailComposeViewControllerDelegate { 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     if !MFMailComposeViewController.canSendMail() { 
      print("Mail services are not available") 
      return 
     }   
     sendEmail() 
    } 

    func sendEmail() {  
     let composeVC = MFMailComposeViewController() 
     composeVC.mailComposeDelegate = self 
     // Configure the fields of the interface. 
     composeVC.setToRecipients(["[email protected]"]) 
     composeVC.setSubject("Hello!") 
     composeVC.setMessageBody("Hello this is my message body!", isHTML: false) 
     // Present the view controller modally. 
     self.present(composeVC, animated: true, completion: nil) 
    } 

    func mailComposeController(controller: MFMailComposeViewController, 
          didFinishWithResult result: MFMailComposeResult, error: NSError?) { 
     // Check the result or perform other tasks. 
     // Dismiss the mail compose view controller. 
     controller.dismiss(animated: true, completion: nil) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

は、だから私は、このメッセージが表示されます:「メールサービスは利用できません」。 今iCloudのシミュレータデバイスにログインしています...だから私はそれを行うべきだと思いますが、そうではありません。なぜこれは機能しないのですか?何が間違っているのか教えてもらえますか?どうすれば前進できますか?

+0

言うあなたは、電子メールアドレスを使用してデバイスを設定しましたか?そうでなければ、あなたの問題を解決するかもしれません。 –

+0

私はシミュレータを使用しています。電子メールアドレスでデバイスを設定するにはどうすればよいですか?私が設定に行くと、私はオプション "メール"を見ることができません.... –

+0

私は、この問題を解決しました..一方、ここにiOSデバイスの電子メールを設定するリンクです... https://サポート。 apple.com/en-in/HT201320 –

答えて

29

シミュレータでは動作しません。 iPhoneデバイスでテストしてください。あなたはシミュレータ上でそれをテストすることはできません

MFMailComposeViewController.canSendMail() // returns false for simulators. 

実際のデバイスで良いようだし、アプリが実行されている場合は正常に動作します Apple Developer Portal - MFMailComposeViewController

+0

はい。私は100%確実です。私は同じタイプのアプリを開発しており、これを見つけました。 –

+0

ありがとう:)しかし、私が上に書いたコード。大丈夫ですか? –

+0

はい。コードは問題なく機能しているはずです。あなたはiPhoneを持っていませんでしたか? –

4

コードを参照することができ、あなたは基本的な事柄をテストすることができますUIのような、キャンセル/送信ボタンのクリックで何が起こっているか。

テストするには、デバイスを使用する必要があります。デバイスのメールアプリケーションは、いくつかのメール(ex:[email protected])で構成する必要があります。

希望に役立ちます。あなたは、現在のビューコントローラを知っているドントちょうどすなわちRootViewController、上に表示した場合

// Present the view controller modally. self.present(composeVC, animated: true, completion: nil)

;-)自体に自分自身を提示することを

-1

あなたのコードに問題があり、

UIApplication.shared.keyWindow?.rootViewController?.present(...

9

ここで私はそれをやった方法です。あなたはdocumentatiに続くように見えます非常にうまくいって、私はそれが他の人を助ける場合に私のバリエーションを追加すると思った。さらに、これは現在の(Aug. 2017年)の構文にもう少し更新されています。

MFMailComposeViewControllerDelegateプロトコルに準拠し、デバイスがメールを送信できるかどうかを確認します。

import Foundation 
import UIKit 
import MessageUI 

class WelcomeViewController: UIViewController, MFMailComposeViewControllerDelegate { 


override func viewDidLoad() { 
    super.viewDidLoad() 

    if !MFMailComposeViewController.canSendMail() { 
     print("Mail services are not available") 
     return 
    } 
} 

私のアプリはIBActionを使用してメールの作成を開始します。次mailComposeController機能について

@IBAction func sendFeedbackButtonTapped(_ sender: Any) { 

    let composeVC = MFMailComposeViewController() 
    composeVC.mailComposeDelegate = self 

    // Configure the fields of the interface. 
    composeVC.setToRecipients(["[email protected]"]) 
    composeVC.setSubject("StoryBook Feedback") 
    composeVC.setMessageBody("Hey Josh! Here's my feedback.", isHTML: false) 

    // Present the view controller modally. 
    self.present(composeVC, animated: true, completion: nil) 

} 

、ドキュメントが

The mail compose view controller is not dismissed automatically. When the user taps the buttons to send the email or cancel the interface, the mail compose view controller calls the mailComposeController(_:didFinishWith:error:) method of its delegate. Your implementation of that method must dismiss the view controller explicitly, as shown in Listing 3. You can also use this method to check the result of the operation.

func mailComposeController(_ controller: MFMailComposeViewController, 
          didFinishWith result: MFMailComposeResult, error: Error?) { 
    // Check the result or perform other tasks. 

    // Dismiss the mail compose view controller. 
    controller.dismiss(animated: true, completion: nil) 
    } 
} 

ソースApple Documentation: MFMailComposeViewController

関連する問題