메일 보내기 기능을 구현하려면 MessageUI
를 import 해야한다.
import MessageUI
구현하기 앞서 ⚠️
해당 기능을 테스트하려면 실기기로 진행해야하며, 실기기에서도 Mail계정이 연동되어있어야 오류가 발생하지 않습니다.
시뮬레이터는 Mail 연동이 되어있지 않으므로 오류가 발생합니다.
extension ViewController: MFMailComposeViewControllerDelegate {
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
}
}
MFMailComposeViewController.canSendMail()
로 전달가능 유무를 판별할 수 있다. 만약 false
라면, 메일 보내기 기능을 사용할 수 없다고 해석하면 된다.guard MFMailComposeViewController.canSendMail() else { // 실패 처리
//codes..
return
}
MFMailComposeViewController
를 구현하여 view에 띄워주어야한다.true
, 평문이면 false
let composeVC = MFMailComposeViewController()
composeVC.mailComposeDelegate = self
composeVC.setToRecipients(["email@1234.com"])
composeVC.setSubject("<App name> 문의 및 의견")
composeVC.setMessageBody(" 본문 내용입니다. ", isHTML: false)
만약 사용자가 메일 보내기 버튼을 눌렀을 때 sendMail
함수가 실행된다고 가정해보면 다음과 같이 코드를 짤 수 있다.
/// 전달가능하지 않은 상태일 때 실행되는 메서드
private func showMailErrorAlert() {
let controller = UIAlertController(title: "실패", message: "아이폰 메일 설정을 확인해주세요.", preferredStyle: .alert)
controller.addAction(UIAlertAction(title: "확인", style: .default))
present(controller, animated: true)
}
private func sendMail() {
// 메일 전달 가능 유무 판별
guard MFMailComposeViewController.canSendMail() else {
showMailErrorAlert()
return
}
let composeVC = MFMailComposeViewController()
composeVC.mailComposeDelegate = self
composeVC.setToRecipients(["email@1234.com"])
composeVC.setSubject("<앱 이름> 문의 및 의견")
present(composeVC, animated: true)
}