LoginSignup
2
2

More than 1 year has passed since last update.

Android, Kotlin: JavaMailでメール送信 (gmail)

Last updated at Posted at 2021-10-01

メール送信をするAndroidアプリを開発しましたので、最低限の実装を記録しておきます。
gmailにてメール送信する際の設定もあわせて記載します。

この2つの記事を参考に作成しました。

gmailの設定

gmailはAPIで送信することが推奨されているらしいですが、今回はSMTPでという要件でした。
その際はgmail(googleアカウント)の設定にて「安全性の低いアプリのアクセス」を有効にする必要があります。

  1. https://myaccount.google.com/ にアクセス(対象のアカウントでログインする)
  2. 「セキュリティ > 安全性の低いアプリのアクセス」を有効にする

JavaMail のインストール

Android Studio のgradleにJavaMailを追記します。

bundle.gradle(app)
implementation 'com.sun.mail:android-mail:1.6.5'
implementation 'com.sun.mail:android-activation:1.6.5'

バージョンは、1.6.5が最新ではありませんでしたが、参照にした記事がこのバージョンだったのでそのまま使いました。

パーミッションの追加

通信をするアプリなのでマニフェストにパーミッションを追加します。

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

実装

あとは実装するだけです。
レイアウトは省略します。ボタンが一つあるだけです。
MailServiceはメールを送信するクラスです。Serviceという名前はAndroidではややこしいのですが、最近までSpringのプロジェクトやっていたので勢いでこの名前にしてしまいました。
エラー処理もしていません。送信処理のところでExceptionをキャッチしないとパスワード間違えただけでアプリが落ちます。

MainActivity
package jp.co.sankosc.javamail

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        findViewById<Button>(R.id.button).setOnClickListener {
            val service = MailService()
            service.send()
        }
    }
}
MailService
package jp.co.sankosc.javamail

import java.util.*
import javax.mail.*
import javax.mail.internet.InternetAddress
import javax.mail.internet.MimeMessage
import kotlin.concurrent.thread

class MailService {
    fun send() {
        thread {
            val property = Properties()
            property.put("mail.smtp.host", "smtp.gmail.com")
            property.put("mail.smtp.auth", "true")
            property.put("mail.smtp.starttls.enable", "true")
            property.put("mail.smtp.port", "587")
            property.put("mail.smtp.debug", "true")

            val message: Message = MimeMessage(Session.getDefaultInstance(property, object: Authenticator() {
                override fun getPasswordAuthentication(): PasswordAuthentication {
                    return PasswordAuthentication("[gmailのアカウント]", "[gmailのパスワード]")
                }
            }))
            message.setFrom(InternetAddress("[送信元メールアドレス]", "[表示名]"))
            message.setRecipient(Message.RecipientType.TO, InternetAddress("[送信先メールアドレス]", "[表示名]"))
            message.subject = "タイトル"
            message.setText("こんにちは")
            Transport.send(message)
        }
    }
}
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2