개발자

안드로이드 스튜디오에서 메일전송기능 구현하는법

2024년 02월 26일조회 158

안녕하세요 이번에 3학년 올라가는 컴공 학부생입니다. 방학동안 안드로이드 프론트엔드 공부를 하면서 동기들과 프로젝트로 앱을 하나 만들고있습니다. 코틀린을 사용해서 문의하기 기능을 만드는 중인데 인텐트를 사용하지 않고 문의 제목은 메일 제목으로, 문의 내용은 메일 내용으로 전송하는 방법을 찾고있습니다. 구글 검색을 해보니 smtp가 뭔지는 잘 모르겠지만 그걸로 구현이 가능한 것 같은데 글들이 최소 2년전 자료들이어서 현재 쓰고있는 hedgehog 버전과 통용되지 않는것 같습니다. 그래도 과거글을 바탕으로 구현해보고 있는데 2가지 문제가 발생했습니다. 1. Zendesk Auth 사이트에서 구글메일 보안비밀번호를 확인할수있다고 하는데 확인이 되지 않습니다. 2. 구글에서 지원하는 smtp 정보를 받아와서 MimeMessage 객체에 전달하는 과정에서 getDefaultInstance의 authenticator 부분에 javax.mail의 Authenticator를 상속받은 this를 넣었는데 FATAL EXCEPTION: DefaultDispatcher-worker-1 javax.mail.AuthenticationFailedException 오류가 발생했습니다. 스택오버플로우를 찾아보니 새로운 애뮬레이터를 만들라는 말이 있어서 해봤는데 실패했습니다. 구글신께 도움을 구해보려다 실패해서 여기에 올립니다!

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

인기 답변

프레드윰님의 프로필 사진

smtp 는 Simple Mail Transfer Protocol / 간이 우편 전송 프로토콜 쉽게 말해서 포털사이트에서 지원하는 메일이라 생각하면되요 거기 설정 그대로 활용해서 사용 하면 되는데 단점이 대용량 전송시간 오래걸려요 서버 죽을수도 있구요 어쨌든 방법은 이거 참고 해보세요 (구글에서 새로 발급해주는 비번 중요합니다) https://talkit.tistory.com/m/705

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 02월 26일

메일을 직접적으로 앱에서 보내려면 SMTP를 사용해야 합니다. 그런데 이 방법은 당사자가 이메일 암호를 입력해야 하고, 그건 권장되는 방법이 아닙니다. 보안성과 효율성을 위해, 백엔드 서버에서 메일 전송 기능을 처리하는 것이 좋습니다. 사용자가 문의할 내용을 서버에 전송하면, 서버에서 해당 내용을 이메일로 변환하여 원하는 주소로 보내는 방식입니다. 여기서는 Node.js와 Express를 사용한 백엔드 서버 예제와 함께 Android 클라이언트 코드(Kotlin)로 작성된 예제를 제공합니다. 1. Android 클라이언트 (Kotlin) ```kotlin val url = "http://your-server-address/email" val json = JSONObject() json.put("subject", "문의 제목") json.put("body", "문의 내용") val queue = Volley.newRequestQueue(this) val request = JsonObjectRequest(Request.Method.POST, url, json, Response.Listener { response -> // 정상적으로 메일이 전송된 경우 처리 }, Response.ErrorListener { error -> // 메일 전송 실패 시 처리 }) queue.add(request) ``` 2. 백엔드 서버(Node.js + Express) ```javascript const express = require('express') const nodemailer = require('nodemailer') const app = express() app.use(express.json()) app.post('/email', (req, res) => { const transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: 'your-email@gmail.com', pass: 'your-password' } }) const mailOptions = { from: 'your-email@gmail.com', to: 'destination-email@gmail.com', subject: req.body.subject, text: req.body.body } transporter.sendMail(mailOptions, (error, info) => { if (error) { console.log(error) res.sendStatus(500) } else { console.log('Email sent: ' + info.response) res.sendStatus(200) } }) }) app.listen(3000, () => console.log('Server is running...')) ``` 이를 활용하면 사용자의 문의 사항을 안전하게 이메일로 전송할 수 있습니다. 백엔드 서버에 HTTPS를 적용하여 데이터 전송 과정을 보호하는 것도 기억해주세요. 구체적인 구현 방법은 프로젝트 요구사항에 따라 달라질 수 있으므로, 위 코드는 개념적인 이해를 위한 참조 자료입니다. 또한 Gmail SMTP 서비스는 일정량 이상의 메일 발송에 제약을 두고 있음을 알아두세요. 대규모 메일 발송이 필요한 경우 별도의 메일 발송 서비스를 검토해보시기 바랍니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!