iOS Geliştirici — E-posta Gönder
E-posta, 21. yüzyılın en iyi iletişim kanallarından biridir. Bilgi birkaç saniye içinde bir grup alıcıya iletilebilir. E-posta işlevini uygulamanıza entegre etmeyi hiç düşündünüz mü?
Apple, geliştiriciler için kullanımı kolay bir çerçeve MessageUI
sağladı. Aşağıdaki özellikleri yapılandırabiliriz:
- alıcı listesi
- Ders
- Mesaj gövdesi
- Ekler
Adım Adım Prosedür
1. Adım) Cihazın e-posta gönderip gönderemediğini kontrol edin
import MessageUI
// Confirm the user can send email
guard MFMailComposeViewController.canSendMail() else { return }
1. Uygulama kullanıcısı, sistem posta uygulamasında e-posta hesabını henüz kurmadı
2. iOS MDM profili, bu StackOverflow yanıtına atıfta bulunarak posta işlevini devre dışı bıraktı.
Adım 2) MFMailComposeViewController örneğini yapılandırın
// 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
& dahil olmak üzere alıcıların listesibcc
- konu alanı
- Düz metin veya HTML mesajındaki mesaj gövdesi
Adım 3) MFMailComposeViewController'ı manuel olarak kapatın
// 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
Kullanıcının eylemini gösteren bir özellik de vardır , örneğin:
cancelled
— Kullanıcı "İptal" düğmesini tıkladı ve ardından e-posta taslağını sildisaved
— Kullanıcı "İptal" düğmesini tıkladı ve ardından e-posta taslağını kaydettisent
— Kullanıcı e-postayı *gönderdi*fail
— E-postayı posta uygulamasında sıraya almada bir hata oluştu
Hile — "Gönderildi" sonucu döndürüldüğünde e-posta GERÇEKTEN gönderildi mi?
E-postayı ağ bağlantısı yokken, örneğin uçak modunda göndermeyi denediniz mi? Ah HAYIR ! didFinishWith
geri araması aslında MFMailComposeViewControllerDelegate
bir sent
sonuç döndürür!!!
Bu ne anlama gelir?
Aşağıdaki Apple belgelerine göre, MFMailComposeViewController
yalnızca e-postayı göndermek yerine sıraya koymak için sistem posta programına bir istek gönderin !!!
Apple Resmi Belgeleri — mailComposeController(_:didFinishWith:error:):
Kullanıcı bu arabirim tarafından oluşturulan e-postayı göndermeyi seçtiyse, bu yöntem çağrıldığında o e-posta kullanıcının Posta programında kuyruğa alınmalıdır . E-posta iletisi kuyruğa alınırken bir hata oluşursa, error
parametre oluşan hatanın türünü gösteren bir hata nesnesi içerir.
Başka bir deyişle, uygulama , e-postanın alıcılara başarılı bir şekilde gönderilip gönderilmediğini ASLA bilemez.
Gelişmiş Özellik - E-postaya ek ekleme
Ek gönderme, kullanım durumlarının çoğunda nadir görülen bir işlevdir. Ancak, MFMailComposeViewController
oluşturulan e-postaya herhangi bir dosya biçimindeki eklerin bir listesini eklememize izin verir.
// 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")
Daha fazla bilgi edin
E-posta göndermenin daha birçok yolu vardır. Firebase Extension Trigger Email, geliştiricilerin belirli önceden tanımlanmış alanlarla bir Firestore belgesi oluşturarak e-posta göndermelerine yardımcı olan kullanımı kolay bir araç sağlar. Aşağıda, Trigger E-posta Uzantısı ile ilgili diğer blogum var. Hakkında daha fazla bilgi edinmek istiyorsanız, okuyabilirsiniz.
Firebase Uzantısı — Tetikleyici E-postaÇözüm
MessageUI
Apple , işi sistem posta uygulamasına devrederek uygulamaların e-posta göndermesine yardımcı olmak için kullanımı kolay bir çerçeve sağlar. Uygulama, alıcı listesini, konuyu, mesaj gövdesini ve ek listesini ayarlayabilir. Kullanıcı herhangi bir eylemde bulunduğunda MFMailComposeViewControllerDelegate
, sonucu geri tetikler ve uygulamanın MFMailComposeViewController
manuel olarak kapatması gerekir.
sent
Sonucun MFMailComposeViewControllerDelegate
gerçekten e-postanın gönderildiği anlamına gelmediğini unutmayın . E-posta isteği yalnızca sistem posta uygulamasında sıraya alınır!
Umarım bu blogu beğenirsiniz ve iyi bir gün geçirirsiniz!