private fun sendMail(etEmail: EditText, etSubject: EditText, etMessage: EditText) {
// Set up the mail server
val host = "smtp.sendgrid.net"
val props = Properties().apply {
put("mail.smtp.auth", "true")
put("mail.smtp.ssl.enable", "true")
put("mail.smtp.host", host)
put("mail.smtp.port", "465")
}
// Set up authentication
val session = Session.getInstance(props, object : Authenticator() {
override fun getPasswordAuthentication() =
PasswordAuthentication("apikey","yourpaswordxyzfromsendgridaccount")
})
try {
// Create a default MimeMessage object
val message = MimeMessage(session).apply {
setFrom(InternetAddress("abc@xyz"))
addRecipient(Message.RecipientType.TO, InternetAddress(etEmail.text.toString()))
subject = etSubject.text.toString()
setText(etMessage.text.toString())
}
// Send the message
thread(start = true) {
Transport.send(message)
println("Email sent successfully.")
println("running from thread(): ${Thread.currentThread()}")
}
Toast.makeText(this,"Mail sent",Toast.LENGTH_LONG).show()
} catch (e: MessagingException) {
e.printStackTrace()
}
}
build.gradle.kts
dependencies {
implementation("com.sun.mail:android-mail:1.6.2")
implementation("com.sun.mail:android-activation:1.6.2") // important
}
AndroidManifest.xml
中的第二秒<uses-permission android:name="android.permission.INTERNET" />
三分之二创建一个类(ex。:MailService)
import android.os.StrictMode
import java.util.Properties
import javax.mail.Authenticator
import javax.mail.Message
import javax.mail.PasswordAuthentication
import javax.mail.Session
import javax.mail.Transport
import javax.mail.internet.InternetAddress
import javax.mail.internet.MimeMessage
class MailService {
// function send email
fun sendEmail() {
val username = "[email protected]" // replace with your email
val password = "your_email_password" // replace with your password email
val recipient = "[email protected]" // replace with recipient email
// properties
val props = Properties()
props["mail.smtp.host"] = "smtp.mail.com" // replace with your SMTP server
props["mail.smtp.port"] = "465" // replace with your SMTP port
props["mail.smtp.auth"] = "true"
props["mail.smtp.starttls.enable"] = "true"
props["mail.smtp.socketFactory.port"] = "465" // replace with your SMTP port
props["mail.smtp.socketFactory.class"] = "javax.net.ssl.SSLSocketFactory"
// session
val session = Session.getDefaultInstance(props, object: Authenticator() {
override fun getPasswordAuthentication(): PasswordAuthentication {
return PasswordAuthentication(username, password)
}
})
// policy
val policy = StrictMode.ThreadPolicy.Builder().permitAll().build()
StrictMode.setThreadPolicy(policy)
// send message
try {
val email = MimeMessage(session)
email.setFrom(InternetAddress(username))
email.addRecipient(Message.RecipientType.TO, InternetAddress(recipient))
email.subject = "Title Email" // email title
email.setText("Test Email Body"// email body)
Transport.send(email)
println("SUCCESS: Email sent successfully!")
} catch (e: Exception) {
println("ERROR: Fail sending email: ${e.message}")
e.printStackTrace()
}
}
}
在MainAttivity中获得最高的作用
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
// button
val button = findViewById<Button>(R.id.button)
// send email after click button
button.setOnClickListener {
val mailService = MailService()
mailService.sendEmail()
}
}
}
我希望我能帮助你,