📑
KotlinでJavamail4android(添付ファイルを添えて)
きっかけ
よく使うので備忘録
Gradle
//javamail
implementation 'com.sun.mail:android-mail:1.6.7'
implementation 'com.sun.mail:android-activation:1.6.7'
コード
private fun sendMail(
smtpServer: String, //SMTPサーバ
srcMailAddress: String, //自分のメールアドレス
password: String, //メールアドレスのパスワード
dstMailAddress: String, //相手先のメールアドレス
displayName: String, //相手先の表示名
subject: String, //メール件名
body: String, //メール本文
attachedPath: String //添付ファイルのパス
) {
thread {
val properties = Properties()
properties["mail.smtp.host"] = smtpServer
properties["mail.smtp.auth"] = "true"
properties["mail.smtp.port"] = "465"
properties["mail.smtp.socketFactory.post"] = "465"
properties["mail.smtp.socketFactory.class"] = "javax.net.ssl.SSLSocketFactory"
properties["mail.smtp.connectiontimeout"] = 2000
properties["mail.smtp.timeout"] = 2000
val message: MimeMessage =
MimeMessage(Session.getDefaultInstance(properties, object : Authenticator() {
override fun getPasswordAuthentication(): PasswordAuthentication {
return PasswordAuthentication(srcMailAddress, password)
}
}))
message.setFrom(InternetAddress(dstMailAddress, displayName))
message.setRecipient(
MimeMessage.RecipientType.TO,
InternetAddress(dstMailAddress, displayName)
)
message.subject = subject
// 本文
val multipart = MimeMultipart("mixed")
// 本文テキスト
val textPart = MimeBodyPart()
textPart.setText(body, "UTF-8")
// 添付ファイル
val attachedPart = MimeBodyPart()
val myFile: File = File(attachedPath)
// 実ファイルを利用する場合は実ファイルでDataSourceを作成
val dataSource: DataSource = FileDataSource(myFile)
attachedPart.dataHandler = DataHandler(dataSource)
attachedPart.fileName = myFile.name
multipart.addBodyPart(textPart)
multipart.addBodyPart(attachedPart)
message.setHeader("X-Mailer", "kotlin de mail ver. 0.9b [ja]")
message.sentDate = Date()
message.setContent(multipart)
Transport.send(message)
}
}
メモ
電波悪かったりしたら,エラー吐くので,そのあたりの処理を忘れない。
- SMTPSendFailedException
- MessagingException
がよく出ると思います。
免責
javaから,AndroidStudioの機能を用いてkotlinへ変換したので,動作保証は致しかねます。
Discussion