코틀린 기반으로 쓰여짐


 

 

이메일을 통한 회원가입시에 특정 도메인에서만 이용가능하게 하고싶어서(가령 블라인드나 에브리타임같은) 이메일 인증이 필요했다.

파이어베이스를 통하면 쉽게 구현이 가능하긴하다.

https://firebase.google.com/docs/auth/android/manage-users?hl=ko 

 

Firebase에서 사용자 관리하기  |  Firebase 문서

Google I/O 2022에서 Firebase의 새로운 기능을 확인하세요. 자세히 알아보기 의견 보내기 Firebase에서 사용자 관리하기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세

firebase.google.com

근데 파이어베이스를 쓰지 않고 싶기도했고, 직접 구현해보고 싶어서 만들어보았다.

최초에 만들어보려고 구글링을 해보니

https://stickode.tistory.com/287

 

 

[Kotlin][Android] 이메일 보내기 기능 만들기

안녕하세요! 이번 시간에는 인텐트를 활용해 이메일을 보내는 기능을 만들어보겠습니다. 구현은 안드로이드 버전 28에서 진행했습니다. 먼저 레이아웃을 만들어줍니다. activity_send_mail.xml <?xml ver

stickode.tistory.com

 

요런 방식이 대부분이였다. 잘 작동했지만, 내가 원하는 기능은 아니였다. 

어떤 앱/웹에서 인증번호 보내기 버튼을 누르게되면 메일 선택 없이 자동으로 보내지기 때문이다

그러한 방식이 무엇일까 구글링 해보다 찾은게 smtp 방식이다.

https://www.cloudflare.com/ko-kr/learning/email-security/what-is-smtp/

아마 대부분의 전공자들이 한번쯤은 들어봤거나 공부해본 방식일테다

simple mail transfer protocool의 준말로 말그대로 간편하게 이메일을 보낼때만 적용할 수 있는 프로토콜로서

tcp 25번 포트를 쓴다.  뭐 그게 중요한건 아니니까 더 궁금한게 있으신분들은 구글링 해보길 바란다.

 

1.smtp방식을 쓰려면 라이브러리를 추가해야한다

https://code.google.com/archive/p/javamail-android/downloads

 

Google Code Archive - Long-term storage for Google Code Project Hosting.

 

code.google.com

app -> libs 밑에다가 위 파일들을 설치하면 되는데 libs가 없으면 그냥 만들면된다

https://stackoverflow.com/questions/1334802/how-can-i-use-external-jars-in-an-android-project/6859020#6859020

 

How can I use external JARs in an Android project?

I have created an Android project and added an external JAR (hessian-4.0.1.jar) to my project. I then added the JAR to the build path and checked it off in Order and Export. Order and Export is ig...

stackoverflow.com

 

 

모르겠는 분들을 위한 참고자료

 

2.메니페스트 변경

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

추가해준다

 

3.의존성 주입

implementation files('libs/activation.jar')
implementation files('libs/additionnal.jar')
implementation files('libs/mail.jar')

 

4.보안비밀번호 만들기

https://pdi-mz-support.zendesk.com/hc/ko/articles/360043927071--Account-2%EB%8B%A8%EA%B3%84-%EC%9D%B8%EC%A6%9D-%ED%99%9C%EC%84%B1%ED%99%94-%EA%B0%80%EC%9D%B4%EB%93%9C

 

[Account] 2단계 인증 활성화 가이드

1. 2단계 인증을 사용할 계정으로 로그인 후, Google 계정 페이지 > 보안 설정으로 이동 후, 2단계 인증란을 클릭합니다.  https://myaccount.google.com/security   2. 시작하기 버튼 클릭 3. 휴대폰 번호 입력

pdi-mz-support.zendesk.com

 

 

https://pdi-mz-support.zendesk.com/hc/ko/articles/360050293051--Gmail-2%EB%8B%A8%EA%B3%84-%EC%9D%B8%EC%A6%9D-%EC%82%AC%EC%9A%A9-%EC%8B%9C-%EC%95%B1-%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8-%EC%83%9D%EC%84%B1%ED%95%98%EC%97%AC-%ED%83%80-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EB%B3%B4%EC%95%88%EC%88%98%EC%A4%80%EC%9D%B4-%EB%82%AE%EC%9D%80-%EC%95%B1-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0

 

[Gmail] 2단계 인증 사용 시 앱 비밀번호 생성하여 타 클라이언트(보안수준이 낮은 앱) 연결하기

앱 비밀번호란? 앱이나 기기에 내 Google 계정 액세스 권한을 부여하는 16자리 비밀번호입니다. 2단계 인증을 사용 중이며 Google 계정에 액세스하려 할 때 '비밀번호가 잘못됨' 오류가 표시되는 경

pdi-mz-support.zendesk.com

 

기본적으로 구글(지메일)을 이용해서 보내기 때문에 필요하다.

 fun sendEmail(toEmail: String): String {
 
 	val fromEmail = "아까위에서2차인증받았던이메일"
    val password = "아까위에서2차인증받았던 비밀번호"
    val code = (100..10000).random().toString()

        CoroutineScope(Dispatchers.IO).launch {
            val props = Properties()




            props.setProperty("mail.transport.protocol", "smtp")
            props.setProperty("mail.host", "smtp.gmail.com")
            props.put("mail.smtp.auth", "true")
            props.put("mail.smtp.port", "465")
            props.put("mail.smtp.socketFactory.port", "465")
            props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory")
            props.put("mail.smtp.socketFactory.fallback", "false")
            props.put("mail.smtp.ssl.enable", "true")
            props.setProperty("mail.smtp.quitwait", "false")
            // 구글에서 지원하는 smtp 정보를 받아와 MimeMessage 객체에 전달
            val session = Session.getDefaultInstance(props, this@GMailSender)


            // 메시지 객체 만들기
            val message = MimeMessage(session)
            message.sender = InternetAddress(fromEmail)                                 // 보내는 사람 설정
            message.addRecipient(Message.RecipientType.TO, InternetAddress(toEmail))    // 받는 사람 설정
            message.subject =
                "verfication code"                                              // 이메일 제목
            message.setText("저쪽 테이블에서 보낸 코드입니다. 아래 비밀번호를 인증창에 입력해주세요\n" + "<" + code + ">")                                               // 이메일 내용

            // 전송
            Transport.send(message)


        }
        return code
    }

 

5.결과


참고

https://min-wachya.tistory.com/168

 

[안드로이드] 메일 보내기

실행 결과 to : ~@naver.com from : ~@gmail.com 1, 라이브러리 추가 https://code.google.com/archive/p/javamail-android/downloads Google Code Archive - Long-term storage for Google Code Project Hosting..

min-wachya.tistory.com

https://heegyukim.medium.com/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%EC%97%90%EC%84%9C-smtp-%EC%9D%B4%EB%A9%94%EC%9D%BC-%EB%B3%B4%EB%82%B4%EA%B8%B0-kotlin-b5111eee92f6

 

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

안드로이드에서 Intent로 메일 앱을 띄우는 게 아니라, 직접 SMTP서버로 요청을 보내서 Gmail로 메일을 보내도록 구현을 해야 하는 일이 생겼다. 일단 Javax의 기본 Mail 라이브러리를 이용하면 간단하

heegyukim.medium.com

 

+ Recent posts