iPhone 기기에서 직접 만든 애플리케이션으로 이메일을 전송하려면 iOS SDK의 MessageUI 프레임워크를 가져와야 합니다. 프레임워크를 임포트한 후, 뷰 컨트롤러에 버튼을 하나 추가하고 해당 버튼의 빈 액션 메서드를 생성합니다.
1. 이메일 작성 함수 구현하기
이제 뷰 컨트롤러에 아래 코드를 추가합니다. 이 함수는 수신자, 제목, 본문을 받아 PDF 파일을 첨부하여 메일 작성 화면을 띄우는 역할을 합니다.
func composeEmail(to email: String, subject: String, Body: String) {
if MFMailComposeViewController.canSendMail() {
let mailComposer = MFMailComposeViewController()
mailComposer.mailComposeDelegate = self
mailComposer.setToRecipients([email])
mailComposer.setSubject(subject)
mailComposer.setMessageBody(Body, isHTML: true)
// 로컬에 저장된 PDF 파일을 첨부
let pathPDF = "\(NSTemporaryDirectory())result.pdf"
if let fileData = NSData(contentsOfFile: pathPDF) {
mailComposer.addAttachmentData(fileData as Data,
mimeType: "application/pdf",
fileName: "result.pdf")
}
self.present(mailComposer, animated: true, completion: nil)
} else {
print("이메일이 지원되지 않습니다")
}
}
// MARK: - MFMailComposeViewControllerDelegate
func mailComposeController(_ controller: MFMailComposeViewController,
didFinishWith result: MFMailComposeResult,
error: Error?) {
self.dismiss(animated: true, completion: nil)
}코드 핵심 포인트
- canSendMail(): 기기에서 메일 전송이 가능한지 먼저 확인합니다.
- addAttachmentData(_:mimeType:fileName:): 데이터와 MIME 타입, 파일명을 지정해 첨부 파일을 추가합니다.
- mailComposeDelegate: 메일 작성 화면이 닫힐 때 처리하기 위해 델리게이트를 설정하고,
didFinishWith메서드에서 화면을 dismiss 합니다.
2. 버튼 액션에서 함수 호출하기
앞서 생성한 버튼의 액션 메서드 안에서 위 함수를 호출합니다.
@IBAction func actionButtonOne(_ sender: Any) {
composeEmail(to: "ashish@xy.com",
subject: "인사 드립니다",
Body: "안녕하세요! 잘 지내고 계시길 바랍니다.")
}3. 실행 결과 확인하기
위 코드를 실행하고 추가한 버튼을 누르면 다음과 같이 첨부 파일이 포함된 메일 작성 화면이 나타납니다.

주의사항
- iPhone의 기본 메일 앱에 최소 한 개 이상의 계정이 등록되어 있어야 합니다. 계정이 없으면
canSendMail()이 false를 반환합니다. - 첨부하려는 PDF 파일이 코드에 지정된 경로(위 예제에서는 임시 디렉터리의 result.pdf)에 실제로 저장되어 있는지 확인하세요.
- 시뮬레이터에서는 메일 앱이 기본적으로 설정되어 있지 않으므로, 실제 기기에서 테스트하는 것이 좋습니다.