Email보내기 기능 구현

작성일

MessageUI

https://developer.apple.com/documentation/messageui
우선 공식문서를 살펴보면,

  • 이메일 작성
  • 메시지 작성

두가지로 나눌수 있는데 이번에 내가 앱에서 사용한것은 이메일작성 이다.

image

기본적인 인터페이스는 애플 공식문서에 있는 이 사진과 동일하다.

이메일이 사용 가능한지 확인하기

공식 문서에 따라 일단 메일 서비스가 가능한지 확인해야한다.
우선

import MessageUI

import를 해준후,

private func checkEmailAvailability() {
    if !MFMailComposeViewController.canSendMail() {
        print("Mail services are not available")
        return
    }
}

재대로 작동을하는지 값을받아오면 된다.
시뮬레이션으로 실행을 시키면, 위에있는 print문이 나와버린다.
그 이유는 시뮬레이터는 이메일 기능을 지원하지 않기 때문이다.

구성 인터페이스 구성 및 표시

이제 뭘 어떤걸 누구한테 보낼지 정하면 되는데 우선 MFMailComposeViewController를 인스턴스화 시켜야한다.

let composeVC = MFMailComposeViewController()

그리고 내용물을 정하면 되는데,

func sendMail() {
  let messageBody =
  """
  OS Version: \(UIDevice.current.systemVersion)
        
  앱 개선 요청사항 및 문제
  """
        
  composeVC.setToRecipients(["chl9338@naver.com"])
  composeVC.setSubject("앱 피드백")
  composeVC.setMessageBody(messageBody, isHTML: false)
        
  self.present(composeVC, animated: true, completion: nil)
}

이런식으로 작성을 해주면 된다.

그러면 실제기기에서 동작해보면,
IMG_5024

이러한 이미지가 나오는걸 볼 수 있다.

메일 작성 보기 컨트롤러 닫기

취소 버튼을 눌러보면 ActionAlert이 뜨는데, ComposeVC가 dismiss되지 않는걸 볼 수 있다. 이러한 문제를 해결하기위해선,

composeVC.mailComposeDelegate = self

이런식으로 대리자 설정을 해준다음,

extension ViewController: MFMailComposeViewControllerDelegate {
    
    func mailComposeController(_ controller: MFMailComposeViewController,
                               didFinishWith result: MFMailComposeResult, error: Error?) {
        dismiss(animated: true, completion: nil)
    }
    
}

를 작성해주면 된다.

참고문서 https://developer.apple.com/documentation/messageui/mfmailcomposeviewcontroller