E-posta Hedefi Gönder


588
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_EMAIL, "emailaddress@emailaddress.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "I'm email body.");

startActivity(Intent.createChooser(intent, "Send Email"));

Yukarıdaki kod aşağıdaki uygulamaları gösteren bir iletişim kutusu açar: - Bluetooth, Google Dokümanlar, Yahoo Mail, Gmail, Orkut, Skype vb.

Aslında, bu liste seçeneklerini filtrelemek istiyorum. Yalnızca Gmail, Yahoo Mail gibi e-posta ile ilgili uygulamaları göstermek istiyorum. Nasıl yapılır?

'Android Market' uygulamasında böyle bir örnek gördüm.

  1. Android Market uygulamasını aç
  2. Geliştiricinin e-posta adresini belirttiği herhangi bir uygulamayı açın. (Bu tür bir uygulama bulamıyorsanız sadece uygulamamı açın: - market: // ayrıntılar? İd = com.becomputer06.vehicle.diary.free VEYA 'Araç Günlüğü' ile arama yapın)
  3. 'GELİŞTİRİCİ' seçeneğine gidin
  4. 'E-posta Gönder'i tıklayın

İletişim kutusu yalnızca Gmail, Yahoo Mail vb. Gibi e-posta Uygulamalarını gösterir. Bluetooth, Orkut vb. Göstermez. Hangi kod böyle bir iletişim kutusu oluşturur?


4
Maalesef, Intent.ACTION_SEND ile bu mümkün değil. Belki doğrudan gmail-App bir niyetle çalışır ama bunun mümkün olup olmadığını bilmiyorum.
Thommy

19
Herhangi birinin burada e-posta hedefleri hakkında bilgi edinmesi durumunda, EXTRA_MAIL String[]yalnızca Stringburada gösterildiği gibi a değil , a değerine karşılık gelmelidir .
bigstones



Bazı iyi tavsiyeler için buraya bakın: medium.com/@cketti/…
Felix D.

Yanıtlar:


218

intent.setType'ınızı aşağıdaki gibi değiştirdiğinizde,

intent.setType("text/plain");

android.content.Intent.ACTION_SENDTOFacebook veya diğer uygulamaları olmayan yalnızca e-posta istemcilerinin listesini almak için kullanın . Yalnızca e-posta istemcileri. Ör:

new Intent(Intent.ACTION_SENDTO);

Doğrudan e-posta uygulamasına gitmenizi önermem. Kullanıcının en sevdiği e-posta uygulamasını seçmesine izin verin. Onu kısıtlama.

ACTION_SENDTO kullanırsanız, putExtra amaca konu ve metin eklemek için çalışmaz. Konu ve gövde metnini eklemek için Uri kullanın.

EDIT: MIME türü message/rfc822yerine kullanabiliriz "text/plain". Ancak, bu "yalnızca e-posta istemcilerini teklif et" anlamına gelmez - "ileti / rfc822 verilerini destekleyen bir şey önerin" ifadesini belirtir. Bu, e-posta istemcileri olmayan bazı uygulamaları kolayca içerebilir.

message/rfc822 MIME türlerini destekler .mhtml, .mht, .mime


7
Lütfen istenen çıktıyı üretmek için bazı kodlar sağlayabilir misiniz?
dira


76
Niyet seçici diyor no apps installed to perform this intentben kullandığınızda ACTION_SENDTO. Android 4.1.2 kullanıyorum ve yüklü bir e-posta uygulamam var ...
ffleandro

4
'Doğru' yol Magnus'tan gelen cevaptır. Kabul edilen cevabı değiştirmek için orijinal posteri tavsiye ederim.
jhabbott

8
Bir gönderme işlemi gerçekleştirmek için MIME türünü kullanmak kötü bir fikirdir, çünkü Android'e temelde bir tür dosya göndermeyi destekleyen uygulamaların bir listesini sağlaması talimatını veriyorsunuz message/rfc822. Bu , e-posta göndermekle aynı şey değil . Kullanım mailto:Ne e-posta istemcileri yani en doğrusu anlamak çünkü yerine protokolü.
Paul Lammertsma

872

Kabul edilen cevap 4.1.2'de çalışmaz. Bu, tüm platformlarda çalışmalıdır:

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
            "mailto","abc@gmail.com", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Body");
startActivity(Intent.createChooser(emailIntent, "Send email..."));

Bu yardımcı olur umarım.

Güncelleme: marcwjj'ye göre, 4.3'te , e-posta adresinin çalışması için bir dize yerine dize dizisini geçirmemiz gerekiyor gibi görünüyor. Bir satır daha eklememiz gerekebilir:

intent.putExtra(Intent.EXTRA_EMAIL, addresses); // String[] addresses

Ref bağlantısı


7
Haklısın ve 4.2'de de yok. Bu aslında tek doğru cevap, teşekkürler!
mDroidd

12
Bu harika. Aşağıdaki biri, "mailto" bölümünü belirtmenin, e-posta istemcileri için mevcut seçenekleri daraltan şeyden bahsetti. Uri.fromParts ("mailto", "", null) kullanmak imleci alıcı alanına koyar - ihtiyacım olan şey için mükemmel.
Shaggy

24
Bu e-postayı deneyinIntent.putExtra (Intent.EXTRA_TEXT, "Ben e-posta gövdesiyim");
thanhbinh84

15
Belirli bir alıcınız yoksa, bu da işe Uri.fromParts("mailto", "", null)
Phil

25
Bu artık Android 4.3'ümde çalışmıyor. Mükemmel çalışan e-posta niyetiyle ilgili resmi Android dokümanı kontrol edin: developer.android.com/guide/components/…
marcwjj

244

Üç ana yaklaşım vardır:

String email = /* Your email address here */
String subject = /* Your subject here */
String body = /* Your body here */
String chooserTitle = /* Your chooser title here */

1. Özel Uri:

Uri uri = Uri.parse("mailto:" + email)
    .buildUpon()
    .appendQueryParameter("subject", subject)
    .appendQueryParameter("body", body)
    .build();

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(Intent.createChooser(emailIntent, chooserTitle));

2. IntentEkstraları kullanma :

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + email));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, body);
//emailIntent.putExtra(Intent.EXTRA_HTML_TEXT, body); //If you are using HTML in your body text

startActivity(Intent.createChooser(emailIntent, "Chooser Title"));

3. Destek Kütüphanesi ShareCompat:

Activity activity = /* Your activity here */

ShareCompat.IntentBuilder.from(activity)
    .setType("message/rfc822")
    .addEmailTo(email)
    .setSubject(subject)
    .setText(body)
    //.setHtmlText(body) //If you are using HTML in your body text
    .setChooserTitle(chooserTitle)
    .startChooser();

1
Bu benim için çok daha iyi çalıştı - diğer seçenekler olası işleyiciler olarak bazı düz şeyler (örneğin Skype) ortaya çıkardı.
Chris Rae

1
%Arabellekte bir sembol varsa , elde edilen e-postadaki bazı karakterler doğru şekilde kodlanmaz. Sen gerçekleştirmek için gereken Uri.encode@minipif önerdiği dans.
Giulio Piancastelli

12
Buradaki en iyi cevaplar, başkalarını denemek için zamanınızı boşa harcamayın, ikincisi seçtiğim şey ve mükemmel çalışıyor, sadece saf e-posta uygulamalarını gösteriyor, gDrive değil, bluetooth değil .. vb. Teşekkürler @ becomputer06
Hugo

1
"&" Karakterine dikkat edin. E-posta gövdesinde & karakteriniz varsa, bu yöntem & öğesinden sonra gövdeyi kesecektir. Örneğin, "Ben & örnek bir bedenim" gibi bir beden gönderirseniz sadece "Ben" alırsınız
Emre Koç

4
Sadece e-posta istemcilerinde değil, neredeyse tüm uygulamalarda sonuç elde edilir
16:47

111

Bu Android resmi doc alıntı, Android 4.4 üzerinde test ettik ve mükemmel çalışıyor. Https://developer.android.com/guide/components/intents-common.html#Email adresinde daha fazla örneğe bakın.

public void composeEmail(String[] addresses, String subject) {
    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);
    }
}

6
Kabul! Şimdiye kadar listede olduğu gibi bir cevap şaşırdım. Android Dokümanlar'da nispeten yeni bir değişiklik olması gerektiğini düşünüyorum.
Mikey

Harika! güvenilir biri, Android uygulama geliştiricilerinin 'İncil' atıfta bulundu.
dev_android

1
Mailto sonrası iki nokta üst üste benim için hile yaptı! "Mailto:" yerine "mailto" kullanıyordum
Nigel Crasto

1
5.1.1 üzerinde çalışma. Diğer seçenekler benim için çalışmıyor.
Juanin

1
EXTRA_EMAILbenim için çalışmıyor bu yüzden kullandımUri.parse("mailto: " + myEmail)
Pratik Butani

89

Geç cevap, başkalarına yardımcı olabilecek bir çözüm bulduğum halde:

Java sürümü

Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:abc@xyz.com"));
startActivity(Intent.createChooser(emailIntent, "Send feedback"));


Kotlin versiyonu

val emailIntent = Intent(Intent.ACTION_SENDTO).apply { 
    data = Uri.parse("mailto:abc@xyz.com")
}
startActivity(Intent.createChooser(emailIntent, "Send feedback"))


Bu benim çıktımdı (yalnızca Gmail + Inbox önerdi):

çıktım

Bu çözümü Android Geliştiricileri sitesinden aldım .


2
Benim için önemli bir yer mailtove e-posta olması mailto:abc@xyz.com
önemliydi

Bu doğru cevap.
nibbana

36

Bu benim için çalışıyor:

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:"));
intent.putExtra(Intent.EXTRA_EMAIL  , new String[] { "me@somewhere.com" });
intent.putExtra(Intent.EXTRA_SUBJECT, "My subject");

startActivity(Intent.createChooser(intent, "Email via..."));

yani ACTION_SENDTOeylem yerine eylemi kullanın ACTION_SEND. Birkaç Android 4.4 cihazında denedim ve seçici pop-up'ı yalnızca e-posta uygulamalarını (E-posta, Gmail, Yahoo Mail vb.) Görüntülemek için sınırlar ve e-posta adresini ve konuyu e-postaya doğru şekilde ekler.


35

Deneyin:

intent.setType("message/rfc822");

Haklı, denedim ve [Drive, Email, Gmail, Skype] sunuyor, bu "Doğru cevap" olmalı
gurbieta

18
Bir gönderme işlemi gerçekleştirmek için MIME türünü kullanmak kötü bir fikirdir, çünkü Android'e temelde bir tür dosya göndermeyi destekleyen uygulamaların bir listesini sağlaması talimatını veriyorsunuz message/rfc822. Bu , e-posta göndermekle aynı şey değil . Kullanım mailto:Ne e-posta istemcileri yani en doğrusu anlamak çünkü yerine protokolü.
Paul Lammertsma

34

Android Geliştirici Resmi Belgelerine göre e-posta amacını göndermenin doğru yolu budur

Şu kod satırlarını uygulamanıza ekleyin:

Intent intent = new Intent(Intent.ACTION_SEND);//common intent 
intent.setData(Uri.parse("mailto:")); // only email apps should handle this

İsteğe bağlı: Beden ve konuyu ekleyin, bunun gibi

intent.putExtra(Intent.EXTRA_SUBJECT, "Your Subject Here");
intent.putExtra(Intent.EXTRA_TEXT, "E-mail body" );

Bu satırı zaten eklediniz, ancak yeni kullanıcılar için iyi oldu

intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"youremailaddress@aviparshan.com"});

Bu, alıcının adresi olacaktır, yani kullanıcı size (geliştirici) bir e-posta gönderecektir.


@ barnacle.m Teşekkürler! Aynı zamanda daha basit yöntemlerden biridir. Sorun şu ki cevabım yeterli oy almıyor :(
Avi Parshan

1
Bunun birçok benzer yanıtı olduğu için, ancak bu konu ile ilgili resmi Android belgelerine dikkat çekiyor.
barnacle.m

1
E-posta adresi gönderemedim. Bu intent.data gibi düzelttim = Uri.parse ( "mailto: somemail@xyz.com")
Hitesh Bisht

18

Sonunda en iyi yolu bul

String to = "test@gmail.com";
String subject= "Hi I am subject";
String body="Hi I am test body";
String mailTo = "mailto:" + to +
        "?&subject=" + Uri.encode(subject) +
        "&body=" + Uri.encode(body);
Intent emailIntent = new Intent(Intent.ACTION_VIEW);
emailIntent.setData(Uri.parse(mailTo));
startActivity(emailIntent);

Harikasın, ahbap.
Ashik

Sorun yok ahbap
Ajay Shrestha

2
Mükemmel çalışıyor.
Solanki Kamlesh

Ayrıntılı olarak açıklayan bu makaleye göz atın: medium.com/@cketti/…
Bruno Bieri

iyi çalışıyor, devam et
Jacks

15

Yalnızca e-posta istemcilerini android.content.Intent.EXTRA_EMAILbir dizi ile kullanmalısınız . İşte bir örnek:

final Intent result = new Intent(android.content.Intent.ACTION_SEND);
result.setType("plain/text");
result.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { recipient });
result.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
result.putExtra(android.content.Intent.EXTRA_TEXT, body);

3
hayır, Hala diğer birçok uygulama getiriyor - çok daha fazlasıACTION_SENDTO
Dori

10

Aşağıdaki kod benim için iyi çalışıyor.

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("message/rfc822");
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"abc@gmailcom"});
Intent mailer = Intent.createChooser(intent, null);
startActivity(mailer);

8

Gönderen Android geliştiricileri docs :

public void composeEmail(String[] addresses, String subject) {
    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);
    }
}

8

Düzenleme: Artık Gmail'in yeni sürümleriyle çalışmıyor

Herhangi bir karakterle çalışmasını sağlamak için o zaman bulduğum tek yol buydu.

doreamon'un cevabı, Gmail'in yeni sürümlerindeki tüm karakterlerle çalıştığı için şimdi gitmenin doğru yoludur.

Eski cevap:


İşte benim. Konu ve mesaj gövdesi desteği ve tam utf-8 karakter desteği ile tüm Android sürümlerinde çalışıyor gibi görünüyor:

public static void email(Context context, String to, String subject, String body) {
    StringBuilder builder = new StringBuilder("mailto:" + Uri.encode(to));
    if (subject != null) {
        builder.append("?subject=" + Uri.encode(Uri.encode(subject)));
        if (body != null) {
            builder.append("&body=" + Uri.encode(Uri.encode(body)));
        }
    }
    String uri = builder.toString();
    Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(uri));
    context.startActivity(intent);
}

1
+1 Uri.encodegitmek için doğru yoldur. Ama neden özne ve beden için iki kez çağırıyorsun?
Giulio Piancastelli

Yani, kodlamayı kendiniz yapmak sadece kötü bir fikirdir. Gerekli ekstralarla uygun bir Niyet daha iyi kullanın, bkz. Örneğin stackoverflow.com/a/15022222
Giulio Piancastelli

Benim için bu en iyi cevaptır, çünkü diğer çözümler sadece bazı e-posta uygulamalarında doğru çalışır. Bu, test ettiğim her e-posta uygulamasıyla çalışır.
Egis

7

Bu çözümlerin hiçbiri benim için çalışmadı. İşte Lollipop üzerinde çalışan minimal bir çözüm. Cihazımda, ortaya çıkan seçici listesinde yalnızca Gmail ve yerel e-posta uygulamaları görünüyor.

Intent emailIntent = new Intent(Intent.ACTION_SENDTO,
                                Uri.parse("mailto:" + Uri.encode(address)));

emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, body);
startActivity(Intent.createChooser(emailIntent, "Send email via..."));

7

Tüm android sürümlerinde çalışır:

String[] TO = {"email@server.com"};
    Uri uri = Uri.parse("mailto:email@server.com")
            .buildUpon()
            .appendQueryParameter("subject", "subject")
            .appendQueryParameter("body", "body")
            .build();
    Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri);
    emailIntent.putExtra(Intent.EXTRA_EMAIL, TO);
    startActivity(Intent.createChooser(emailIntent, "Send mail..."));

Cevabınız bana yardımcı oldu. Teşekkürler
Adnan Khan

5

Aşağıdaki Kod benim için çalıştı !!

import android.support.v4.app.ShareCompat;
    .
    .
    .
    .
final Intent intent = ShareCompat.IntentBuilder
                        .from(activity)
                        .setType("application/txt")
                        .setSubject(subject)
                        .setText("Hii")
                        .setChooserTitle("Select One")
                        .createChooserIntent()
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)
                        .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

activity.startActivity(intent);

5

Bu benim için mükemmel çalışıyor:

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("mailto:" + address));
    startActivity(Intent.createChooser(intent, "E-mail"));

5

Amacınızın yalnızca bir e-posta uygulaması (ve diğer kısa mesajlar veya sosyal uygulamalar değil) tarafından ele alınmasını sağlamak istiyorsanız, ACTION_SENDTOişlemi kullanın ve "mailto:" veri şemasını ekleyin. Örneğin:

public void composeEmail(String[] addresses, String subject) {
    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);
    }
}

Bunu https://developer.android.com/guide/components/intents-common.html#Email adresinde buldum


5

içinde KOTLIN kimse arıyorsa

val emailArrray:Array<String> = arrayOf("travelagentsupport@kkk.com")
val intent = Intent(Intent.ACTION_SENDTO)
intent.data = Uri.parse("mailto:") // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, emailArrray)
intent.putExtra(Intent.EXTRA_SUBJECT, "Inquire about travel agent")
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

4

Bu yanıtların çoğu, ek göndermediğinizde yalnızca basit bir dava için geçerlidir . Benim durumumda bazen ek (ACTION_SEND) veya iki ek (ACTION_SEND_MULTIPLE) göndermem gerekiyor.

Bu konudan en iyi yaklaşımları aldım ve birleştirdim. Destek kütüphanesi kullanıyor ShareCompat.IntentBuilderama ben sadece ACTION_SENDTO ile "mailto:" uri ile eşleşen uygulamaları gösteriyorum. Bu şekilde yalnızca ek desteği olan e-posta uygulamalarının listesini alırım:

fun Activity.sendEmail(recipients: List<String>, subject: String, file: Uri, text: String? = null, secondFile: Uri? = null) {
    val originalIntent = createEmailShareIntent(recipients, subject, file, text, secondFile)
    val emailFilterIntent = Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"))
    val originalIntentResults = packageManager.queryIntentActivities(originalIntent, 0)
    val emailFilterIntentResults = packageManager.queryIntentActivities(emailFilterIntent, 0)
    val targetedIntents = originalIntentResults
            .filter { originalResult -> emailFilterIntentResults.any { originalResult.activityInfo.packageName == it.activityInfo.packageName } }
            .map {
                createEmailShareIntent(recipients, subject, file, text, secondFile).apply { `package` = it.activityInfo.packageName }
            }
            .toMutableList()
    val finalIntent = Intent.createChooser(targetedIntents.removeAt(0), R.string.choose_email_app.toText())
    finalIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toTypedArray())
    startActivity(finalIntent)
}

private fun Activity.createEmailShareIntent(recipients: List<String>, subject: String, file: Uri, text: String? = null, secondFile: Uri? = null): Intent {
    val builder = ShareCompat.IntentBuilder.from(this)
            .setType("message/rfc822")
            .setEmailTo(recipients.toTypedArray())
            .setStream(file)
            .setSubject(subject)
    if (secondFile != null) {
        builder.addStream(secondFile)
    }
    if (text != null) {
        builder.setText(text)
    }
    return builder.intent
}

Bu yararlı olabilir gibi görünüyor; Java almak için herhangi bir şans?
Kyle Humfeld

1
Kotlin Java'ya çok benzer, macunu kopyalayabilmeli ve sadece birkaç şeyi değiştirebilmelisiniz.
David Vávra

3

Kullanmak intent.setType("message/rfc822");işe yarıyor ancak e-postaları (ör. GDrive) işlemesi gerekmeyen ekstra uygulamalar gösteriyor. Kullanımı Intent.ACTION_SENDTOile setType("text/plain")iyi ama eklemek zorunda setData(Uri.parse("mailto:"))iyi sonuçları (sadece e-posta uygulamaları) alır. Kodun tamamı aşağıdaki gibidir:

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setType("text/plain");
intent.setData(Uri.parse("mailto:IT@RMAsoft.NET"));
intent.putExtra(Intent.EXTRA_SUBJECT, "Email from My app");
intent.putExtra(Intent.EXTRA_TEXT, "Place your email message here ...");
startActivity(Intent.createChooser(intent, "Send Email"));

Perfect soultion
Daxesh Vekariya

2

Gmail'i hedeflemek istiyorsanız, aşağıdakileri yapabilirsiniz. Amaçın "ACTION_SEND" değil "ACTION_SENDTO" olduğunu ve Gmail için fazladan amaç alanlarının gerekli olmadığını unutmayın.

String uriText =
    "mailto:youremail@gmail.com" + 
    "?subject=" + Uri.encode("your subject line here") + 
    "&body=" + Uri.encode("message body here");

Uri uri = Uri.parse(uriText);

Intent sendIntent = new Intent(Intent.ACTION_SENDTO);
sendIntent.setData(uri);
if (sendIntent.resolveActivity(getPackageManager()) != null) {
   startActivity(Intent.createChooser(sendIntent, "Send message")); 
}

2

Adil'in cevabını Kotlin'de güncelliyoruz,

val intent = Intent(Intent.ACTION_SENDTO)
intent.data = Uri.parse("mailto:") // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, Array(1) { "test@email.com" })
intent.putExtra(Intent.EXTRA_SUBJECT, "subject")
if (intent.resolveActivity(packageManager) != null) {
    startActivity(intent)
} else {
    showSnackBar(getString(R.string.no_apps_found_to_send_mail), this)
}

Gmail uygulamada olsa bile bu başarısız olur.
AndroidDev

@AndroidDev hangi cihazda sorunla karşı karşıyasınız?
Kishan Solanki

2

Lütfen aşağıdaki kodu kullanın:

                try {

                    String uriText =
                            "mailto:emailid" +
                                    "?subject=" + Uri.encode("Feedback for app") +
                                    "&body=" + Uri.encode(deviceInfo);
                    Uri uri = Uri.parse(uriText);
                    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
                    emailIntent.setData(uri);
                    startActivity(Intent.createChooser(emailIntent, "Send email using..."));
                } catch (android.content.ActivityNotFoundException ex) {
                    Toast.makeText(ContactUsActivity.this, "No email clients installed.", Toast.LENGTH_SHORT).show();
                }

1

Belki bunu denemelisin: intent.setType("plain/text");

Burada buldum . Uygulamamda kullandım ve sadece E-Posta ve Gmail seçeneklerini gösteriyor.


2
"düz / metin" Bluetooth, Skype vb. gösterir. Android Market uygulamasında istenen çıktıyı kontrol edin. Adımlar soruda listelenmiştir.
dira

1
Bir gönderme işlemi gerçekleştirmek için MIME türünü kullanmak kötü bir fikirdir, çünkü Android'e temelde bir dosya göndermeyi destekleyen plain/textve hatta geçerli bir MIME türü olmayan uygulamaların bir listesini sunmasını istersiniz . Bu , e-posta göndermekle aynı şey değil . Kullanım mailto:Ne e-posta istemcileri yani en doğrusu anlamak çünkü yerine protokolü.
Paul Lammertsma

1

Telefon e-posta istemcisinde bir e-posta oluşturun:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("plain/text");
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "some@email.address" });
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
intent.putExtra(Intent.EXTRA_TEXT, "mail body");
startActivity(Intent.createChooser(intent, ""));

1

Bunu kullan:

boolean success = EmailIntentBuilder.from(activity)
        .to("support@example.org")
        .cc("developer@example.org")
        .subject("Error report")
        .body(buildErrorReport())
        .start();

build gradle kullanın:

compile 'de.cketti.mailto:email-intent-builder:1.0.0'

1

Kullandığım şey bu ve benim için çalışıyor:

//variables
String subject = "Whatever subject you want";
String body = "Whatever text you want to put in the body";
String intentType = "text/html";
String mailToParse = "mailto:";

//start Intent
Intent variableName = new Intent(Intent.ACTION_SENDTO);
variableName.setType(intentType);
variableName.setData(Uri.parse(mailToParse));
variableName.putExtra(Intent.EXTRA_SUBJECT, subject);
variableName.putExtra(Intent.EXTRA_TEXT, body);

startActivity(variableName);

Bu, kullanıcının tercih ettiği e-posta uygulamasını seçmesine de olanak tanır. Bunun yapmanıza izin vermediği tek şey, alıcının e-posta adresini ayarlamaktır.


"2. satırda eksik .
Tim

1

Bu kod cihazımda çalışıyor

Intent mIntent = new Intent(Intent.ACTION_SENDTO);
mIntent.setData(Uri.parse("mailto:"));
mIntent.putExtra(Intent.EXTRA_EMAIL  , new String[] {"mahendrarajdhami@gmail.com"});
mIntent.putExtra(Intent.EXTRA_SUBJECT, "");
startActivity(Intent.createChooser(mIntent, "Send Email Using..."));

yalnızca Gmail ve E-postalarımı cihazımda açar
Mahen

1
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", email, null));
if (emailIntent.resolveActivity(context.getPackageManager()) != null) {
    context.startActivity(Intent.createChooser(emailIntent, "Send Email..."));
} else {
    Toast.makeText(context, "No apps can perform this action.", Toast.LENGTH_SHORT).show();
}
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.