Intent.EXTRA_EMAIL, Kime alanını doldurmuyor


90

Kullanmaya çalışıyorum uygulamamdan bir e-posta göndermek için, ancak e-postanın Kime alanı doldurulmayacak. Konuyu veya metni doldurmak için kod eklersem, iyi çalışıyorlar. Yalnızca Alıcı alanı doldurulmayacaktır.

Ayrıca türü "metin / düz" ve "metin / html" olarak değiştirmeyi denedim ama aynı sorunu alıyorum. Birisi yardım edebilir mi lütfen?

public void Email(){

    Intent emailIntent = new Intent(Intent.ACTION_SEND); 
    emailIntent.setType("message/rfc822");  //set the email recipient
    String recipient = getString(R.string.IntegralEmailAddress);
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL  , recipient);
    //let the user choose what email client to use
    startActivity(Intent.createChooser(emailIntent, "Send mail using...")); }

Kullanmaya çalıştığım e-posta istemcisi Gmail

Yanıtlar:


220

Sana geçmezken düşünüyorum recipientolarakarray of string

gibi olmalı

emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,new String[] { "someone@gmail.com" });

21
Android ... neden bu kadar zavallısın?
Hatalar

4
hahaha, beni güldürdün +1 Milyon @BugsHappen .. Sebepler: Açık kaynak ama dokümantasyon% 100 tatmin edici değil, cihaz üreticileri ihtiyaçlarına göre değişiklik yapıyor (çoğu cihaz ucuz ve işe yaramaz), geliştiriciler "geliştirici" okumuyor. android.com ".
MKJParekh

4
Ayrıca emin olun DEĞİL yapıyor intent.putExtra(Intent.EXTRA_EMAIL, list.toArray()) Şunları ÇALIŞMA list.toArray () üretir beri Nesne [] olup String []
nikib3ro

@ kape123 bu işe yarıyorintent.putExtra(Intent.EXTRA_EMAIL, list.toArray(new String[0]))
Abtin Gramian

4

Bunu kullan

public void Email(){
    // use this to declare your 'recipient' string and get your email recipient from your string xml file
    Resources res = getResources();
    String recipient = getString(R.string.IntegralEmailAddress);
    Intent emailIntent = new Intent(Intent.ACTION_SEND); 
    emailIntent.setType("message/rfc822");  //set the email recipient
    emailIntent.putExtra(Intent.EXTRA_EMAIL, recipient);
    //let the user choose what email client to use
    startActivity(Intent.createChooser(emailIntent, "Send mail using...")); 

``}

Bu işe yarayacak :)
Bu, android dokümantasyonunun Intent.Extra_Email hakkında söylediği şeydir
- Tüm "Kime" alıcı e-posta adreslerinin bir dize dizisi.
Bu yüzden dizeyi doğru şekilde beslemelisiniz
http://developer.android.com/guide/components/intents-common.html#Email'den ve http://developer.android.com/guide/topics/resources adresinden daha fazla bilgi edinebilirsiniz. /string-resource.html Veya ACTION_SENDTO eylemini kullanın ve "mailto:" veri şemasını ekleyin. Örneğin:

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:")); // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, addresses);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

3

Kotlin'de - Android

fun sendMail(
        activity: Activity,
        emailIds: Array<String>,
        subject: String,
        textMessage: String
    ) {


        val emailIntent = Intent(Intent.ACTION_SEND)
        emailIntent.type = "text/plain"
        emailIntent.putExtra(Intent.EXTRA_EMAIL, emailIds)
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject)
        emailIntent.putExtra(Intent.EXTRA_TEXT, textMessage)
        emailIntent.setType("message/rfc822")
        try {
            activity.startActivity(
                Intent.createChooser(
                    emailIntent,
                    "Send email using..."
                )
            )
        } catch (ex: ActivityNotFoundException) {
            Toast.makeText(
                activity,
                "No email clients installed.",
                Toast.LENGTH_SHORT
            ).show()
        }
    }

Ayrıca val emailIntent = Intent(Intent.ACTION_SENDTO)doğrudan e-posta istemcisini çağırmak için [ ] kullanabilirsiniz

//argument of function
val subject = "subject of you email"
val eMailMessageTxt = "Add Message here"

val eMailId1 = "emailId1@gmail.com"
val eMailId2 = "emailId2@gmail.com"
val eMailIds: Array<String> = arrayOf(eMailId1,eMailId2)

//Calling function
sendMail(this, eMailIds, subject, eMailMessageTxt)

Umarım bu kod parçası kotlin geliştiricilerine yardımcı olur.


2
private void callSendMeMail() {
    Intent Email = new Intent(Intent.ACTION_SEND);
    Email.setType("text/email");
    Email.putExtra(Intent.EXTRA_EMAIL, new String[] { "me@gmail.com" });
    Email.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
    startActivity(Intent.createChooser(Email, "Send mail to Developer:"));
}

Hiçbir uygulamanın bu eylemi gerçekleştiremeyeceğini söylüyor.
Ebu Nayem

2

Birkaç şey:

1 - Eylem sabiti değişkenini ACTION_SENDTO olarak ayarlamanız gerekir.
Intent intentEmail = new Intent(Intent.ACTION_SENDTO);

2 - Yalnızca posta ile açılmasını istiyorsanız, setData () yöntemini kullanın: intentEmail.setData(Uri.parse("mailto:"));Aksi takdirde, cihazınızda bulunan diğer uygulamalar tarafından metin, resim, ses dosyası olarak açmanızı isteyecektir.

3 - E-posta kimliği dizesini yalnızca bir dize olarak değil , bir dizi nesnesi olarak iletmeniz gerekir. Dize: "name@email.com" . Dizi Dizenin nesnesi: new String [] {"e-posta1", "e-posta2", "more_email"} .

intentEmail.putExtra(Intent.EXTRA_EMAIL, new String[] {"email@overflow.com", "abcd@stack.com"});

0

İşte benim işime yarayan bu:

val email = "recipient@email.com"
val intent = Intent(Intent.ACTION_SENDTO)
intent.data = Uri.parse("mailto:$email")
intent.putExtra(Intent.EXTRA_SUBJECT,"My Subject")
startActivity(intent)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.