Simple Mail Transfer Protocol의 약어인 SMTP는 TCP/IP 프로토콜 스택의 애플리케이션 계층에서 작동하는 프로토콜로 이메일을 전송하기 위해 사용합니다. SMTP는 클라이언트-서버 모델을 기반으로 하며, 이메일 클라이언트와 이메일 서버간의 통신을 관리합니다.
SMTP의 작동 방식은 다음과 같습니다.
SMTP 연결 설정: 이메일 클라이언트는 SMTP 서버에 TCP 연결을 설정합니다. 클라이언트는 서버에 자신을 소개하기 위해 HELO 또는 EHLO 명령을 보냅니다. EHLO는 확장된 기능을 지원하는 경우 사용됩니다.
메일 전송: 클라이언트는 MAIL FROM 명령을 사용하여 발신자 주소를 지정하고, RCPT TO 명령을 사용하여 수신자 주소를 지정합니다. 이 과정에서 여러 수신자를 지정할 수 있습니다.
메일 전송 에이전트(MTA): 서버가 메일 전송 에이전트(MTA)라는 프로그램을 실행해서 수신자의 IP 주소를 찾습니다.
데이터 전송: 수신자가 확인되면, 클라이언트는 DATA 명령을 보내고, 이메일의 본문과 헤더를 전송합니다.
전송 완료: 서버는 이메일을 수신하고, 클라이언트에게 전송이 완료되었음을 알리는 응답을 보냅니다. 이후 서버는 이메일을 적절한 수신자 서버로 라우팅합니다.
연결 종료: 모든 작업이 완료되면 클라이언트는 QUIT 명령을 보내어 연결을 종료합니다.
SwiftSMTP는 이메일 전송을 위한 오픈 소스 라이브러리로 위에서 설명한 STMP 프로토콜을 사용하여 이메일을 쉽게 전송할 수 있도록 도와줍니다.
사용 방법은 다음과 같습니다.
SPM 추가하기

메일을 위한 코드 작성하기
import SwiftUI
import SwiftSMTP
struct ContentView: View {
var body: some View {
VStack {
Text("이메일 전송 예제")
.font(.largeTitle)
.padding()
Button(action: sendEmail) {
Text("이메일 전송")
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(8)
}
}
.padding()
}
func sendEmail() {
let smtp = SMTP(
hostname: "smtp.gmail.com", // SMTP 서버 주소
email: "your_email@gmail.com", // 발신자 이메일
password: "your_password" // 발신자 이메일 비밀번호
)
let from = Mail.User(name: "Your Name", email: "your_email@gmail.com") // 발신자
let to = Mail.User(name: "Recipient Name", email: "recipient_email@example.com") // 수신자
let mail = Mail(
from: from,
to: [to],
subject: "테스트 이메일",
text: "안녕하세요! 이 이메일은 SwiftUI와 SwiftSMTP를 사용하여 전송된 테스트 이메일입니다."
)
smtp.send(mail) { error in
if let error = error {
print("이메일 전송 중 오류 발생: \(error)")
} else {
print("이메일이 성공적으로 전송되었습니다.")
}
}
}
}