본문 바로가기
안드로이드 코틀린

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

by teamnova 2021. 11. 3.
728x90

안녕하세요! 이번 시간에는 인텐트를 활용해 이메일을 보내는 기능을 만들어보겠습니다.

 

구현은 안드로이드 버전 28에서 진행했습니다.

 

 

 

먼저 레이아웃을 만들어줍니다.

 

activity_send_mail.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SendMailActivity">

    <EditText
        android:id="@+id/edt_input"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="150dp"
        android:hint="메일 본문을 작성해주세요"
        android:imeOptions="actionDone"
        android:inputType="textMultiLine"
        app:layout_constraintBottom_toTopOf="@id/btn_send"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_chainStyle="packed" />

    <Button
        android:id="@+id/btn_send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="확인"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/edt_input" />
</androidx.constraintlayout.widget.ConstraintLayout>

 

 

 

다음으로, 기능의 핵심이 되는 메일 전송 메소드를 만들어줍니다.

스틱코드에서 간편하고 빠르게 메소드 코드를 가져오실 수 있습니다.

[AOS][Kotlin] 인텐트 활용하기 - Stickode

 

스틱코드

 

stickode.com

// 메일 전송 메소드
@SuppressLint("QueryPermissionsNeeded")
private fun sendEmail(content: String) {
    val emailAddress = "stickode@gmail.com"
    val title = "메일 제목입니다"

    val intent = Intent(Intent.ACTION_SENDTO) // 메일 전송 설정
        .apply {
            type = "text/plain" // 데이터 타입 설정
            data = Uri.parse("mailto:") // 이메일 앱에서만 인텐트 처리되도록 설정

            putExtra(Intent.EXTRA_EMAIL, arrayOf(emailAddress)) // 메일 수신 주소 목록
            putExtra(Intent.EXTRA_SUBJECT, title) // 메일 제목 설정
            putExtra(Intent.EXTRA_TEXT, content) // 메일 본문 설정
        }

    if (intent.resolveActivity(packageManager) != null) {
        startActivity(Intent.createChooser(intent, "메일 전송하기"))
    } else {
        Toast.makeText(this, "메일을 전송할 수 없습니다", Toast.LENGTH_LONG).show()
    }
}

 

 

 

액티비티의 onCreate에서 버튼을 눌렀을 때 sendEmail 메소드가 호출될 수 있게 해줍니다.

뷰 바인딩을 사용하여 뷰를 참조했습니다. findViewById를 사용하셔도 됩니다.

val binding = ActivitySendMailBinding.inflate(layoutInflater)

binding.btnSend.setOnClickListener { // '메일 전송' 버튼 클릭 시 메일 전송하기
    sendEmail(binding.edtInput.text.toString())
}

 

 

 

액티비티의 전체 코드는 다음과 같습니다.

import android.annotation.SuppressLint
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.example.stickode.databinding.ActivitySendMailBinding


class SendMailActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val binding = ActivitySendMailBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.btnSend.setOnClickListener { // '메일 전송' 버튼 클릭 시 메일 전송하기
            sendEmail(binding.edtInput.text.toString())
        }
    }


    // 메일 전송 메소드
    @SuppressLint("QueryPermissionsNeeded")
    private fun sendEmail(content: String) {
        val emailAddress = "stickode@gmail.com"
        val title = "메일 제목입니다"

        val intent = Intent(Intent.ACTION_SENDTO) // 메일 전송 설정
            .apply {
                type = "text/plain" // 데이터 타입 설정
                data = Uri.parse("mailto:") // 이메일 앱에서만 인텐트 처리되도록 설정

                putExtra(Intent.EXTRA_EMAIL, arrayOf<String>(emailAddress)) // 메일 수신 주소 목록
                putExtra(Intent.EXTRA_SUBJECT, title) // 메일 제목 설정
                putExtra(Intent.EXTRA_TEXT, content) // 메일 본문 설정
            }

        if (intent.resolveActivity(packageManager) != null) {
            startActivity(Intent.createChooser(intent, "메일 전송하기"))
        } else {
            Toast.makeText(this, "메일을 전송할 수 없습니다", Toast.LENGTH_LONG).show()
        }
    }
}

 

 

 

이렇게 하면 editText에 작성한 내용을 메일 본문으로 하는 메일을 전송하는 기능을 만들 수 있습니다.