Trimiteți e-mailuri automate în mod programatic (Programare, Android, E-Mail)

Kamran Omar a intrebat.

Vreau să trimit e-mailuri programatic.

am încercat următorul cod.

final Intent emailIntent = new Intent( android.content.Intent.ACTION_SEND);

  emailIntent.setType("plain/text");

  emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
          new String[] { "[email protected]" });

  emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
          "Email Subject");

  emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,
          "Email Body");

  startActivity(Intent.createChooser(
          emailIntent, "Send mail..."));

dar problema este că, înainte de a trimite e-mailul, aplicația deschide activitatea

Vreau să trimit e-mailul direct, fără a deschide activitatea de compunere. cum este posibil?

utilizator2441810

Comentarii

  • de ce nu încercați startActivityforResult chestii? –  > Por Sen.
  • posibil duplicat al Trimiterea de e-mail în Android folosind JavaMail API fără a utiliza aplicația implicită/integrată –  > Por slhck.
4 răspunsuri
Beasly

Uită-te la link, există un răspuns pentru întrebarea ta.

Trimiterea de e-mail în Android folosind JavaMail API fără a folosi aplicația implicită/integrată

Comentarii

  • @Harry Joy Înțeleg… încă scriam când ai postat… Legătura mea duce direct la răspuns… ar trebui să o scot? –  > Por Beasly.
  • Nici o problemă. nu este nevoie să scoateți link-ul. De fapt, îmi place stilul tău de a scrie linkuri. –  > Por Harry Joy.
  • Pentru asta este nevoie de cunoașterea credențialelor de e-mail ale utilizatorului, care trebuie fie codificate în mod greșit, fie solicitate de la utilizator. Aceasta este o soluție cu adevărat stupidă. –  > Por AndroidDev.
  • Postarea răspunsurilor doar cu link este o practică proastă, vă rugăm să explicați ce se află în spatele linkului. De asemenea, dacă linkul este un link către o întrebare SO, atunci ar trebui să marcați întrebarea ca fiind duplicat, vă rog 🙂 –  > Por avalancha.
Khemraj

Linkul referit are răspunsul corect, dar sunt scrise unele biblioteci pentru a vă face munca ușoară.

Așa că nu mai scrieți din nou tot codul, folosiți oricare dintre aceste biblioteci și faceți-vă treaba în scurt timp.

Shivam Gautam

Ar putea fi cea mai ușoară cale…

    String recipientList = mEditTextTo.getText().toString();
    String[] recipients = recipientList.split(",");

    String subject = mEditTextSubject.getText().toString();
    String message = mEditTextMessage.getText().toString();

    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.putExtra(Intent.EXTRA_EMAIL, recipients);
    intent.putExtra(Intent.EXTRA_SUBJECT, subject);
    intent.putExtra(Intent.EXTRA_TEXT, message);

    intent.setType("message/rfc822");
    startActivity(Intent.createChooser(intent, "Choose an email client"));

Blundell

Trimiterea de e-mail în mod programatic cu Kotlin.

  • simpla trimitere de e-mail, nu toate celelalte caracteristici (cum ar fi atașamentele).
  • TLS este întotdeauna activat
  • De asemenea, este necesară doar o singură dependență de e-mail gradle.

Am găsit, de asemenea, această listă de servicii de e-mail POP foarte utilă:

https://support.office.com/en-gb/article/pop-and-imap-email-settings-for-outlook-8361e398-8af4-4e97-b147-6c6c4ac95353

Cum se utilizează:

    val auth = EmailService.UserPassAuthenticator("yourUser", "yourPass")
    val to = listOf(InternetAddress("[email protected]"))
    val from = InternetAddress("[email protected]")
    val email = EmailService.Email(auth, to, from, "Test Subject", "Hello Body World")
    val emailService = EmailService("yourSmtpServer", 587)

    GlobalScope.launch { // or however you do background threads
        emailService.send(email)
    }

Codul:

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)
        msg.sentDate = Calendar.getInstance().time
        msg.setRecipients(Message.RecipientType.TO, email.toList.toTypedArray())
//      msg.setRecipients(Message.RecipientType.CC, email.ccList.toTypedArray())
//      msg.setRecipients(Message.RecipientType.BCC, email.bccList.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"
    }
}

Gradle:

dependencies {
    implementation 'com.sun.mail:android-mail:1.6.4'
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.3"
}

AndroidManifest:

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