質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

3078閲覧

MFMailComposeViewController()で送ったメールが届きません

funkyfrea

総合スコア86

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2016/03/20 09:46

編集2016/03/20 11:56

###前提・実現したいこと
swiftで日記アプリを作っています。
実現したいことはアプリ内で生成したPDFデータをアプリ内のメーラーから送信できるようにすることです。

###発生している問題・エラーメッセージ
MFMailComposeViewController()で実装し、自分のgmail宛に送ってみるのですが届きません。
そこでデフォルトの「メール」アプリを開いてみると未送信メールを送信中となり、数秒でgmailに送信されます。

どのようにすれば、アプリ内で送信を完了することができるのでしょうか。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Kenterouさんとの質疑応答のやりとりを読ませて頂いて思ったんですが、実際にはgmailのサーバーまで送信できているけど、送信したメールを確認するために使っている標準のメールアプリがメールを端末に取り込むのが遅いだけという話ではないでしょうか?

http://www.ipodwave.com/iphone/howto/iphone-mail-gmail.html
に書かれている通り、Gmailを標準のメールアプリで受け取る場合、メールアプリを起動してないとフェッチ機能で15分に1回しか新着メールの確認をしません。

メールの確認は、上記Webページの後半に紹介されている公式Gmailアプリを使うか、
パソコンのブラウザでhttps://mail.google.com/にアクセスして確認することをお勧めします。

投稿2016/03/20 14:22

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

funkyfrea

2016/03/20 14:33

ご回答いただきありがとうございます。 >実際にはgmailのサーバーまで送信できているけど、送信したメールを確認するために使っている標準のメールアプリがメールを端末に取り込むのが遅いだけという話ではないでしょうか? gmailは自分宛に送っていて、gmail公式アプリで確認しています。 自分のアプリでメーラーを立ち上げて送信→gmailアプリ、ブラウザに来てない→標準アプリを開くと未送信メールが送信される→gmailに来てるという状況なので、やはり未送信になってしまっているのかなと思います。
TakeOne

2016/03/20 15:34 編集

ちょっと説明を確認させていただきたいのですが、 「標準アプリを開くと未送信メールが送信される」 というのは 「標準のメールアプリを開くと、自分のアプリで送信したメールが受信される」 という意味だと認識したのでよいですか? 最後の「gmailに来てる」というのは、 標準のメールアプリに届いたのを確認したということですか? 公式Gmailアプリやブラウザでも届いているのを確認していますか? いずれにしても、後から標準メールアプリを起動すると、自分のアプリで送信したメール確認できるのであれば、自分のアプリの送信処理の問題ではなく、メール受信方法かメール確認方法の問題のような気がします。
funkyfrea

2016/03/21 01:14 編集

>「標準アプリを開くと未送信メールが送信される」 というのは 「標準のメールアプリを開くと、自分のアプリで送信したメールが受信される」 という意味だと認識したのでよいですか? 標準のメールアプリを開くと、自分のアプリで送信したメールが公式gmailアプリ、ブラウザに届くという意味です。標準のメールアプリでもgmailが届くので、標準のメールアプリの受信箱にも届いています。 >最後の「gmailに来てる」というのは、 標準のメールアプリに届いたのを確認したということですか? 公式Gmailアプリやブラウザでも届いているのを確認していますか? 公式Gmailアプリやブラウザに届いているのを確認しています。
funkyfrea

2016/03/21 01:15 編集

すみません。 朝になって自分のgmail宛ではなく、友人のgmail宛に送ったところ届きました。 なので、自分自身のgmailに送っていたことが未送信になってしまう原因かと思ったのですが、自分自身のgmailに送ってみたら届きました。 しかし、昨日の夜は明らかにしばらく待っても標準のメールアプリを開くまで送れなかったので、時間帯によるものなのかなと感じました。 もしくは、今朝は先に友人のgmail宛に送ったから、その次の自分宛も送れたのかなと、さらによくわからなくなってしまいました。。 もしくは、アプリ内からPDFを添付したメールを送るテストをしたのが久しぶりで、それまで標準のメールアプリを開いていなかったので、その辺りも関係あるのかもしれないとも考えたのですがいかがでしょうか。
guest

0

ベストアンサー

同じ様な状態になるように簡単なサンプルを作ってみました。

自分の場合はBundleから読み込んだPDFを添付して、Gmailにて送信しましたが直ちに送信されました。
メール送信時に呼ばれるハンドラで何かエラーが出ていないか確認してみるくらいしか分かりませんが、、、

参考になれば幸いです。

swift

1import UIKit 2import MessageUI 3 4class ViewController: UIViewController, MFMailComposeViewControllerDelegate { 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 9 } 10 11 @IBAction func openMail(sender: UIButton) { 12 13 // check if can send an email 14 if MFMailComposeViewController.canSendMail() == false { 15 print("Email Send Failed") 16 return 17 } 18 19 let mailViewController = MFMailComposeViewController() 20 mailViewController.mailComposeDelegate = self 21 22 mailViewController.setSubject("件名") 23 24 let toRecipients = ["sample@gmail.com"] 25 mailViewController.setToRecipients(toRecipients) 26 27 // BundleからPDFを読み込んで添付 28 let bundle = NSBundle.mainBundle().pathForResource("sample", ofType: "pdf") 29 let date = NSData(contentsOfFile: bundle!) 30 mailViewController.addAttachmentData(date!, mimeType: "application/pdf", fileName: "sample.pdf") 31 32 self.presentViewController(mailViewController, animated: true, completion: nil) 33 } 34 35 func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { 36 37 switch result.rawValue { 38 case MFMailComposeResultCancelled.rawValue: 39 print("Email Send Cancelled") 40 break 41 case MFMailComposeResultSaved.rawValue: 42 print("Email Saved as a Draft") 43 break 44 case MFMailComposeResultSent.rawValue: 45 print("Email Sent Successfully") 46 break 47 case MFMailComposeResultFailed.rawValue: 48 print("Email Send Failed") 49 break 50 default: 51 break 52 } 53 dismissViewControllerAnimated(true, completion: nil) 54 } 55}

投稿2016/03/20 12:01

_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

funkyfrea

2016/03/20 12:07

回答していただきありがとうございます! 自分のコードでも Email Sent Successfullyと表示されるので、送信自体は出来ているはずのですが標準のメールを開くと未送信になってしまってしまいます。。
_Kentarou

2016/03/20 13:11 編集

ちなみにPDFを添付しなくても送信されませんか? 後は私のコードを簡単なプロジェクトで実行して(PDFは無くても良いです)それで送信されれば、他の部分が影響していると思います。 まずは端末の設定等の問題なのかアプリの問題なのかを切り分けたいですね。。。
funkyfrea

2016/03/20 13:11

はい。PDFを添付していないものとしているものを計5通ほど送ったところ、5通とも送れず、メールを開いた時にまとめて送信される状況です。 また、一度標準のメールアプリを開くとその後は順調に送ることができます。 しかし、次の日など少し時間をおくとまた未送信で溜まってしまいます。
funkyfrea

2016/03/20 13:17

>後は私のコードを簡単なプロジェクトで実行して(PDFは無くても良いです)それで送信されれば、他の部分が影響していると思います。 上記のように、今は一度メールを開いてPDFを送れる状態なので、明日実行してみようと思います。
_Kentarou

2016/03/20 13:19

そうですか、こちらでは現象が確認できないので難しいですね。 ちなみにiOSのバージョンと使用している端末を教えて頂けますか?
funkyfrea

2016/03/20 13:23

ios9.2.1の6Sです。
_Kentarou

2016/03/20 13:26

私の環境と同じですね。 通信状態は4G or Wifiどちらでためされていますか?
_Kentarou

2016/03/20 13:49

ありがとうございます。そちらも一緒ですね。 後は該当箇所のコードを載せて頂いてこちらでも再現できるか試すか、こちらのコードをそちらで実行して頂く位しか無いと思います。
funkyfrea

2016/03/20 14:14

貴重なお時間をいただいて協力していただき本当にありがとうございました。 また、明日Kenterouさんのコードを実行してどうなるか確認してみたいと思います。
funkyfrea

2016/03/20 14:17

PDFが写真を4枚ほど使っており、重いというのも関係あるかもしれないので、その辺りも明日確認してみようかと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問