Computer >> 컴퓨터 >  >> 프로그래밍 >> iOS

Swift로 iOS 앱에서 이메일 첨부 파일을 보내는 방법 완벽 가이드

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. 실행 결과 확인하기

위 코드를 실행하고 추가한 버튼을 누르면 다음과 같이 첨부 파일이 포함된 메일 작성 화면이 나타납니다.

Swift로 iOS 앱에서 이메일 첨부 파일을 보내는 방법 완벽 가이드

주의사항

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