boraBong

[iOS] Swift를 이용해서 iOS 디바이스에서 Email 보내기 📧 본문

iOS/Feat

[iOS] Swift를 이용해서 iOS 디바이스에서 Email 보내기 📧

보라봉_ 2021. 2. 8. 00:07
728x90

안녕하세요 여러분💜 

오랜만에 돌아온 보라봉입니다 >< 💜

오늘은 iOS 디바이스에서 Email 보내는 방법에 대해서 알아보려고 해요!!

 

 

iOS에서 이메일을 보내려면 MessageUI를 사용해야 합니다!

import MessageUI

 

 본격적으로 시작하기 전에 !

iOS에서 이메일을 보내기 위해서는 주의해야 할 사항이 있어요

 

1️⃣ XCode 시뮬레이터에서는 실행되지 않습니다. 반드시 iOS디바이스와 연결해서 테스트해주세요!
2️⃣ iOS 디바이스 내 Mail계정이 연동되어 있어야만 메일 발송이 가능해요!

 

 


 

 

따라서 메일 기능을 구현하기 전에 !

iOS 디바이스에서 메일 기능을 사용 가능한지를 검사해주면 좋겠죠??

 

if 문을 사용해서

MFMailComposeViewController.canSendMail() 이 true라면

■ 즉, 메일을 사용가능하다면
□ 메일주소, 메일제목, 메일내용을 구성해준 후 MFMailComposeViewController를 띄워줍니다.

@IBAction func sendEmailTapped(_ sender: UIButton) {
        
        // 이메일 사용가능한지 체크하는 if문
        if MFMailComposeViewController.canSendMail() {
            
            let compseVC = MFMailComposeViewController()
            compseVC.mailComposeDelegate = self
            
            compseVC.setToRecipients(["본 메일을 전달받을 이메일주소"])
            compseVC.setSubject("메시지제목")
            compseVC.setMessageBody("메시지컨텐츠", isHTML: false)
            
            self.present(compseVC, animated: true, completion: nil)
            
        }
        else {
            self.showSendMailErrorAlert()
        }    
}

 

 


MFMailComposeViewController.canSendMail() 이 false라면

즉, 메일 사용이 불가능하다면 (디바이스 내 Mail앱을 이용할 수 없는 경우)

 만들어준 showSendMailErrorAlert() 함수를 호출해줍니다.

func showSendMailErrorAlert() {
        let sendMailErrorAlert = UIAlertController(title: "메일을 전송 실패", message: "아이폰 이메일 설정을 확인하고 다시 시도해주세요.", preferredStyle: .alert)
        let confirmAction = UIAlertAction(title: "확인", style: .default) {
            (action) in
            print("확인")
        }
        sendMailErrorAlert.addAction(confirmAction)
        self.present(sendMailErrorAlert, animated: true, completion: nil)
    }

👆 위 Alert는 디바이스 내 메일이용이 가능해야 메일 보내기 기능을 사용할 수 있다는 인지를 주기 위한 Alert입니다!!

 

 

 

그리고 메일 보내기 버튼을 눌렀을 때, 호출해준 MFMailComposeViewController를 dismiss해줘야겠죠??

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

위 코드를 통해 메일 전송이 완료된 후 컨트롤러를 dismiss해줄 수 있습니다!! :)

 

 

 

 

전체 코드 첨부

//
//  ViewController.swift
//  emailTest
//
//  Created by 황지은 on 2021/02/07.
//

import UIKit
import MessageUI

class ViewController: UIViewController, MFMailComposeViewControllerDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    func showSendMailErrorAlert() {
        let sendMailErrorAlert = UIAlertController(title: "메일을 전송 실패", message: "아이폰 이메일 설정을 확인하고 다시 시도해주세요.", preferredStyle: .alert)
        let confirmAction = UIAlertAction(title: "확인", style: .default) {
            (action) in
            print("확인")
        }
        sendMailErrorAlert.addAction(confirmAction)
        self.present(sendMailErrorAlert, animated: true, completion: nil)
    }
    
    @IBAction func sendEmailTapped(_ sender: UIButton) {
        
        if MFMailComposeViewController.canSendMail() {
            
            let compseVC = MFMailComposeViewController()
            compseVC.mailComposeDelegate = self
            
            compseVC.setToRecipients(["melon2228@naver.com"])
            compseVC.setSubject("Message Subject")
            compseVC.setMessageBody("Message Content", isHTML: false)
            
            self.present(compseVC, animated: true, completion: nil)
            
        }
        else {
            self.showSendMailErrorAlert()
        }
        
    }
    
    func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
        controller.dismiss(animated: true, completion: nil)
    }
    
}

https://github.com/hwangJi-dev/iOS-Practice/tree/master/emailTest

 

hwangJi-dev/iOS-Practice

지은 iOS 기록장🍎. Contribute to hwangJi-dev/iOS-Practice development by creating an account on GitHub.

github.com

 

 

이렇게 오늘은 swift에서 메일 보내기를 알아봤습니다!!

유익한 정보가 되었으면 좋겠네요:) 

반응형
Comments