您好,我是 android 新手,我有一個 Android 應用程式,允許用戶輸入按摩、他/她的電子郵件以及他們想要接收電子郵件的具體日期,當他們單擊發送時,電子郵件將發送到該應用程式在后臺自動地址。有沒有辦法在 android studio 中使用 kotlin 做到這一點?
我試過這個,但它不作業我的代碼
package com.example.sendingautomaticemail
import android.util.Log
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.bouncycastle.jce.provider.BouncyCastleProvider
import java.security.Security
import java.text.SimpleDateFormat
import java.util.*
import javax.mail.*
import javax.mail.internet.InternetAddress
import javax.mail.internet.MimeBodyPart
import javax.mail.internet.MimeMessage
import javax.mail.internet.MimeMultipart
class EmailService(private var server: String, private var port: Int) {
data class Email(
val auth: Authenticator,
val toList: List<InternetAddress>,
val from: Address,
val subject: String,
val body: String
)
class UserPassAuthenticator(private val username: String, private val password: String) : Authenticator() {
override fun getPasswordAuthentication(): PasswordAuthentication {
return PasswordAuthentication(username, password)
}}
fun send(email: Email) {
val props = Properties()
props["mail.smtp.auth"] = "true"
props["mail.user"] = email.from
props["mail.smtp.host"] = server
props["mail.smtp.port"] = port
props["mail.smtp.starttls.enable"] = "true"
props["mail.smtp.ssl.trust"] = server
props["mail.mime.charset"] = "UTF-8"
val msg: Message = MimeMessage(Session.getDefaultInstance(props, email.auth))
msg.setFrom(email.from)
val sdf = SimpleDateFormat("dd/MM/yyyy hh:mm:ss")
val date = sdf.parse("06/12/2021 01:00:00")
msg.sentDate = date
msg.setRecipients(Message.RecipientType.TO, email.toList.toTypedArray())
msg.replyTo = arrayOf(email.from)
msg.addHeader("X-Mailer", CLIENT_NAME)
msg.addHeader("Precedence", "bulk")
msg.subject = email.subject
msg.setContent(MimeMultipart().apply {
addBodyPart(MimeBodyPart().apply {
setText(email.body, "iso-8859-1")
//setContent(email.htmlBody, "text/html; charset=UTF-8")
})
})
Transport.send(msg)}
companion object {
const val CLIENT_NAME = "Android StackOverflow programmatic email"}}
但msg.sentDate = date
不作業電子郵件立即被打磨而不是在第二天
uj5u.com熱心網友回復:
我認為最好的方式發送電子郵件。您應該使用 GMailSender。您可以創建預定的電子郵件。您可以在不使用默認/內置應用程式的情況下使用 JavaMail API 在 Android中發送電子郵件中找到詳細說明
uj5u.com熱心網友回復:
msg.sentDate只是在電子郵件上設定元資料標頭,一旦您將其發送到出站郵件服務器,它仍然會立即得到處理。您需要使用具有此功能的第三方庫(正如另一個回復所建議的那樣),或者自己實作延遲。
如果你走后一條路線并且仍然想完全在設備上處理它(不一定是最好的主意,但這是一個單獨的問題)你需要存盤 [1] 電子郵件內容并在某處發送日期(如 SQLite DB)然后定期檢查將在重復的后臺任務中發送的訊息 [2]。
您可以在此處閱讀其中一些內容:
1:https : //developer.android.com/training/data-storage
2:https : //developer.android.com/guide/background
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/383259.html
