iOS Dev — ส่งอีเมล
อีเมลเป็นหนึ่งในช่องทางการสื่อสารที่ดีที่สุดในศตวรรษที่ 21 ข้อมูลสามารถส่งไปยังกลุ่มผู้รับได้ภายในเวลาไม่กี่วินาที คุณเคยคิดที่จะรวมฟังก์ชั่นอีเมลเข้ากับแอพของคุณหรือไม่?
Apple ได้จัดเตรียมเฟรมเวิร์กที่ใช้งานง่ายMessageUI
สำหรับนักพัฒนา เราสามารถกำหนดค่าคุณสมบัติดังต่อไปนี้:
- รายชื่อผู้รับ
- เรื่อง
- เนื้อความของข้อความ
- ไฟล์แนบ
ขั้นตอนทีละขั้นตอน
ขั้นตอนที่ 1) ตรวจสอบว่าอุปกรณ์สามารถส่งอีเมลได้หรือไม่
import MessageUI
// Confirm the user can send email
guard MFMailComposeViewController.canSendMail() else { return }
1. ผู้ใช้แอปยังไม่ได้ตั้งค่าบัญชีอีเมลของตนในแอปการส่งจดหมายของระบบ
2. โปรไฟล์ MDM ของ iOS ได้ปิดใช้งานฟังก์ชันการส่งจดหมาย โดยอ้างถึงคำตอบStackOverflow นี้
ขั้นตอนที่ 2) กำหนดค่าอินสแตนซ์ MFMailComposeViewController
// Construct the `MFMailComposeViewController` instance
let mfMailComposeViewController = MFMailComposeViewController()
// To set the recipients list, including the to, cc and bcc fields
mfMailComposeViewController.setToRecipients(["[email protected]"])
mfMailComposeViewController.setCcRecipients(["[email protected]"])
mfMailComposeViewController.setBccRecipients(["[email protected]"])
// To set the email subject
mfMailComposeViewController.setSubject("Example - Subject Text")
// To set the email message body; It can be either plain text or HTML message
mfMailComposeViewController.setMessageBody("<h1>Example - HTML message body </h1>", isHTML: true)
// Presenet the `MFMailComposeViewController` to the app user
present(mfMailComposeViewController, animated: true)
- รายชื่อผู้รับ รวมถึง
to
,cc
&bcc
- สาขาวิชา
- เนื้อหาข้อความเป็นข้อความธรรมดาหรือข้อความ HTML
ขั้นตอนที่ 3) ปิด MFMailComposeViewController ด้วยตนเอง
// We must implement the `MFMailComposeViewControllerDelegate` in order to handle the user's action on the mail compo
mfMailComposeViewController.mailComposeDelegate = self
extension DemoViewController: MFMailComposeViewControllerDelegate {
// This is the only callback from the Mail composer to notify the app that the user has carried out certain action
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
switch result {
case .cancelled:
print("The user has dismissed the mail composer and deleted the email draft.")
case .saved:
print("The user has dismissed the mail composer and saved the email draft.")
case .sent:
// The email request is queued in the user's mail app
// There is no guarantee that the email is actually sent out!!!
print("The user has \"sent\" the email out.")
case .failed:
print("The user cannot send out the email")
print("Error of sending out the email: \(error.debugDescription)")
}
controller.dismiss(animated: true)
}
}
นอกจากนี้ยังมีresult
พร็อพเพอร์ตี้เพื่อแสดงการกระทำของผู้ใช้ ได้แก่:
cancelled
— ผู้ใช้คลิกปุ่ม “ยกเลิก” แล้วลบฉบับร่างอีเมลsaved
— ผู้ใช้คลิกปุ่ม “ยกเลิก” แล้วบันทึกฉบับร่างอีเมลsent
— ผู้ใช้ *ส่ง* อีเมลออกไปแล้วfail
— มีข้อผิดพลาดในการจัดคิวอีเมลไปยังแอปอีเมล
ทริค — อีเมลจะถูกส่งออกไปจริง ๆ เมื่อผลลัพธ์ `ส่ง` ถูกตีกลับหรือไม่?
คุณพยายามส่งอีเมลเมื่อไม่มีการเชื่อมต่อเครือข่าย เช่น โหมดเครื่องบินหรือไม่ โอ้ไม่ ! การdidFinishWith
เรียกกลับของMFMailComposeViewControllerDelegate
ผลตอบแทนจริงsent
!!!
นั่นหมายความว่าอย่างไร?
ตามเอกสารด้านล่างของ Apple MFMailComposeViewController
เพียงส่งคำขอไปยังโปรแกรมอีเมลระบบเพื่อจัดคิวอีเมลแทนการส่งออก !!!
เอกสารอย่างเป็นทางการของ Apple — mailComposeController(_:didFinishWith:error:):
หากผู้ใช้เลือกที่จะส่งอีเมลที่สร้างโดยอินเทอร์เฟซนี้อีเมลนั้นควรอยู่ในคิวในโปรแกรม Mail ของผู้ใช้เมื่อถึงเวลาที่เรียกใช้วิธีนี้ หากเกิดข้อผิดพลาดขณะจัดคิวข้อความอีเมลerror
พารามิเตอร์จะมีอ็อบเจ็กต์ข้อผิดพลาดที่ระบุประเภทของความล้มเหลวที่เกิดขึ้น
กล่าวอีกนัยหนึ่ง แอปไม่มีทางรู้ได้เลยว่าอีเมลถูกส่งไปยังผู้รับสำเร็จหรือไม่
คุณสมบัติขั้นสูง - การเพิ่มไฟล์แนบในอีเมล
การส่งไฟล์แนบเป็นฟังก์ชันที่หายากในกรณีการใช้งานส่วนใหญ่ อย่างไรก็ตามMFMailComposeViewController
ช่วยให้เราแนบรายการไฟล์แนบในรูปแบบไฟล์ใดก็ได้ไปกับอีเมลที่เขียน
// Attach an image to the composed email
let attachmentImageData = UIImage(named: "example_image_name")!.pngData()!
mfMailComposeViewController.addAttachmentData(attachmentImageData, mimeType: "image/png", fileName: "example_file_name")
เรียนรู้เพิ่มเติม
มีหลายวิธีในการส่งอีเมลออก อีเมล ทริกเกอร์ส่วนขยายของ Firebaseมีเครื่องมือที่ใช้งานง่ายเพื่อช่วยให้นักพัฒนาสามารถส่งอีเมลโดยสร้างเอกสาร Firestore พร้อมช่องที่กำหนดไว้ล่วงหน้า ด้านล่างนี้เป็นบล็อกอื่นของฉันเกี่ยวกับส่วนขยายอีเมลทริกเกอร์ คุณสามารถอ่านได้หากต้องการทราบข้อมูลเพิ่มเติม
ส่วนขยาย Firebase — ทริกเกอร์อีเมลบทสรุป
Apple มีMessageUI
เฟรมเวิร์กที่ใช้งานง่ายเพื่อช่วยให้แอพส่งอีเมลโดยมอบหมายงานให้กับแอพส่งเมลของระบบ แอพสามารถตั้งค่ารายชื่อผู้รับ หัวเรื่อง เนื้อหาข้อความ และรายการไฟล์แนบ เมื่อผู้ใช้ดำเนินการใดๆ แล้วMFMailComposeViewControllerDelegate
แอปจะส่งผลลัพธ์กลับและแอปต้องปิดการดำเนินการMFMailComposeViewController
ด้วยตนเอง
โปรดทราบว่าsent
ผลลัพธ์จาก the MFMailComposeViewControllerDelegate
ไม่ได้หมายความว่าอีเมลถูกส่งออกไปจริงๆ คำขออีเมลจะเข้าคิวที่แอปส่งจดหมายของระบบเท่านั้น!
หวังว่าคุณจะสนุกกับบล็อกนี้และมีวันที่ดี!