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.