2015-11-13 13 views
5

Xin chào, tôi muốn mở chương trình eMail từ ứng dụng của tôi và cơ thể đã được xác định. Tôi có thể mở eMail nhưng không biết cách xác định phần thân của email như một tham số đã cho để hiển thị văn bản chuẩn đã cho. Bất cứ ai cũng có thể giúp đỡ? Heres mã tôi sử dụng để mở Email:Mở eMail từ ứng dụng có văn bản được xác định trước trong iOS

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

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

Do một số nghiên cứu về 'mailto: 'thức truy cập URL. Bạn có thể cung cấp địa chỉ "đến", địa chỉ "cc", chủ đề và nội dung thư. Nhưng tất nhiên lựa chọn tốt nhất là làm những gì các câu trả lời dưới đây gợi ý. – rmaddy

Trả lời

12

Bạn có thể làm điều đó bằng MFMailComposeViewController:

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) 

Ngoài ra, bạn cần phải thực hiện mailComposeController:didFinishWithResult:error: từ MFMailComposeViewControllerDelegate nơi bạn nên bỏ MFMailComposeViewController

+3

Trước khi bạn tạo mailComposerVC, bạn không nên kiểm tra xem bạn có thực sự có thể gửi email bằng cách sử dụng 'MFMailComposeViewController.canSendMail()' –

4

Sử dụng MFMailComposeViewController như sau:

  1. nhập các MessageUI

    import MessageUI 
    
  2. Thêm các đại biểu đến lớp học của bạn:

    class myClass: UIViewController, MFMailComposeViewControllerDelegate {} 
    
  3. Cấu hình email cài sẵn bạn muốn có

    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. Đặt phương pháp này trong mã của bạn :

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

Hiện bạn đang hoạt động.

+2

đừng quên kiểm tra: nếu MFMailComposeViewController.canSendMail() {... – djdance

0

Tôi khuyên bạn nên sử dụng cách của Apple mà bạn có thể tìm thấy trong tài liệu chính thức về MFMailComposeViewController. Nó mở ra một bộ điều khiển xem phương thức với email, được loại bỏ sau khi gửi. Vì vậy, người dùng vẫn ở trong ứng dụng của bạn.

+0

OP yêu cầu cho Swift mã, tham chiếu của bạn sẽ hiển thị Obj-C thay thế. – LinusGeffarth

+1

Liên kết dẫn đến tài liệu của Apple, tất cả các thông tin, mà có thể Jan có thể cần, không chỉ các phần cụ thể (các phương thức/thuộc tính). Apple chỉ có mã mẫu trong ObjC trong trường hợp này, nhưng nó có thể được dịch dễ dàng sang Swift. –

11

Nếu bạn muốn mở được xây dựng trong ứng dụng email như trái ngược với hiển thị MFMailComposeViewController như đã được đề cập bởi những người khác, bạn có thể xây dựng một liên kết mailto: như thế này:

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) 
    } 
} 

Just để cứu bất cứ ai đánh máy, cho 2016 cú pháp đã thay đổi một chút:

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) 
     } 
+0

câu trả lời chính xác thực sự cho câu hỏi trên trang! cảm ơn người đàn ông! :) – Fattie

11

Swift 3 Version

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) 
    } 
} 
0

Swift 4,0

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.") 
        } 
       }) 
      } 
     } 
    } 
Các vấn đề liên quan