앱에서 이메일을 보내려면 URL Scheme을 활용하고, 특정 이벤트가 발생했을 때 메일이 전송되도록 액션을 구현해야 합니다. 다만 일반 앱은 이메일을 직접 전송할 수 없으며, 메일 앱 자체를 개발하면서 iOS의 MessageUI 프레임워크를 사용하는 경우에만 가능합니다. 대신 수신자와 제목이 미리 채워진 상태로 외부 메일 앱을 열어주는 방식을 사용할 수 있습니다.
이 글에서는 두 가지 방법을 모두 소개합니다.
사전 준비
- 새 프로젝트를 생성하고 첫 번째 뷰 컨트롤러로 이동합니다.
- 버튼을 하나 추가하고 텍스트를 "open e-mail"로 변경한 뒤, ViewController.swift 클래스에 해당 액션을 생성합니다.
- "open MF mail"이라는 이름의 두 번째 버튼을 추가하고, 마찬가지로 액션을 생성합니다.
방법 1 – URL Scheme으로 외부 메일 앱 열기
func sendEmail(email:String) {
if let url = URL(string: "mailto:\(email)") {
if #available(iOS 10.0, *) {
UIApplication.shared.open(url)
} else {
UIApplication.shared.openURL(url)
}
}
}위 함수를 호출하면 지정한 이메일 주소로 메일을 보낼 수 있는 화면이 열립니다. 첫 번째 버튼인 "open e-mail"의 액션 본문 안에서 이 함수를 호출하면 되며, 실행 결과는 아래와 같습니다.
iOS 10 이상에서는 UIApplication.shared.open(url)을 사용하고, 그 이전 버전에서는 deprecated된 UIApplication.shared.openURL(url)을 사용한다는 점에 유의하세요.
방법 2 – MessageUI 프레임워크의 MFMailComposeViewController 활용
func sendMFmail(email: String) {
let mailVC = MFMailComposeViewController()
mailVC.mailComposeDelegate = self
mailVC.setToRecipients([email])
mailVC.setSubject("Testing sending email")
mailVC.setMessageBody("Test Body of email", isHTML: false)
present(mailVC, animated: true, completion: nil)
}이 함수 역시 방법 1과 유사하게 "open MF mail" 버튼의 액션 본문 안에서 호출할 수 있으며, 실행하면 앱 내부에 메일 작성 화면이 나타나 결과를 바로 확인할 수 있습니다.
MessageUI 프레임워크를 사용하려면 파일 상단에 import MessageUI를 선언해야 하며, 뷰 컨트롤러가 MFMailComposeViewControllerDelegate를 채택하고 있어야 합니다.
참고 사항
시뮬레이터에서는 메일 기능이 지원되지 않기 때문에 위 코드는 시뮬레이터에서 정상적으로 동작하지 않습니다. 반드시 실제 iPhone 디바이스에서 테스트해야 합니다.