안드로이드에서 SMTP 이메일 보내기 (Kotlin)

안드로이드에서 Intent로 메일 앱을 띄우는 게 아니라, 직접 SMTP서버로 요청을 보내서 Gmail로 메일을 보내도록 구현을 해야 하는 일이 생겼다. 일단 Javax의 기본 Mail 라이브러리를 이용하면 간단하게 이메일 주소와 비밀번호만 가지고도 이메일 계정으로 을 보낼 수 있다.

문제는 javax 라이브러리를 android에서 기본으로 제공하지 않고, Netbeans 프레임웤이 필요하단 것인데 이건 다운로드받아서 추가하면 된다.

mail.jar
activation.jar
additional.jar

위의 3개의 파일을 모듈의 libs 폴더에 놓고 gradle sync를 다시 하면 된다(참고: Click here — How to add External Jars)

Kotlin 코드

fun sendEmail(
title: String, body: String, dest: String, fileName: String, filePath: String )
{
val username = "";
val password = "";

val props = Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");

val session = Session.getInstance(props,
object: javax.mail.Authenticator() {
override fun getPasswordAuthentication(): PasswordAuthentication {
return PasswordAuthentication(username, password);
}
})

val message = MimeMessage(session)
message.setFrom(InternetAddress(username))
message.setRecipients(Message.RecipientType.,
InternetAddress.parse(dest))
message.= title
message.setText(body)


val multipart = MimeMultipart()
val messageBodyPart = MimeBodyPart()
val source = FileDataSource(filePath)

messageBodyPart.= DataHandler(source)
messageBodyPart.= fileName
multipart.addBodyPart(messageBodyPart)

message.setContent(multipart)

Transport.send(message)
}

보안 수준이 낮은 앱 허용

https://myaccount.google.com/lesssecureapps 에 들어가서 보안 수준이 낮은 앱 허용을 해야 위 코드가 실행 가능하다. ID/비밀번호로 SMTP 접속해서 메일을 보내는 방식은 권장하지 않는 방식인 듯 하다.

Image for post
Image for post

Written by

2020.12.8 ~ 2022.6.9 군복무중 Serving in the South Korean Military Service

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store