Intent.EXTRA_EMAIL не заполняет поле "Кому"


89

Я пытаюсь использовать для отправки электронного письма из моего приложения, но поле «Кому» электронного письма не заполняется. Если я добавлю код для заполнения темы или текста, они будут работать нормально. Просто поле «Кому» не заполняется.

Я также пробовал изменить тип на «text / plain» и «text / html», но у меня возникла та же проблема. Кто-нибудь может помочь?

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...")); }

Почтовый клиент, который я пытаюсь использовать, - это Gmail.

Ответы:


218

Я думаю , что вы не проходящие recipientвarray of string

это должно быть похоже

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

21
Андроид ... чего ты такой жалкий?
Bugs Happen

4
хахаха, ты меня рассмешил +1 миллион @BugsHappen .. Причины: это открытый исходный код, но документация не на 100% удовлетворительна, производители устройств модифицируют в соответствии со своими потребностями (большинство устройств дешевы и бесполезны), разработчики не читают «разработчик». android.com ".
MKJParekh

4
Также убедитесь, что вы НЕ делаете intent.putExtra(Intent.EXTRA_EMAIL, list.toArray()) это НЕ РАБОТАЕТ, поскольку list.toArray () создает Object [], а не String []
nikib3ro

@ kape123, это действительно работает,intent.putExtra(Intent.EXTRA_EMAIL, list.toArray(new String[0]))
Абтин Грамиан

4

Использовать это

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...")); 

``}

Это будет работать :)
Это то, что в документации Android говорится о Intent.Extra_Email
- строковом массиве всех адресов электронной почты получателей «Кому».
Таким образом, вы должны правильно подавать строку. Подробнее можно прочитать здесь
http://developer.android.com/guide/components/intents-common.html#Email и здесь http://developer.android.com/guide/topics/resources /string-resource.html Или используйте действие ACTION_SENDTO и включите схему данных mailto :. Например:

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

В Котлине - 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()
        }
    }

Также вы можете использовать [ val emailIntent = Intent(Intent.ACTION_SENDTO)] для вызова почтового клиента.

//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)

Надеюсь, этот фрагмент кода поможет разработчикам котлинов.


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:"));
}

Это говорит о том, что ни одно приложение не может выполнить это действие.
Абу Найем,

1

Пара вещей:

1 - Вам нужно установить постоянную переменную действия как ACTION_SENDTO.
Intent intentEmail = new Intent(Intent.ACTION_SENDTO);

2 - Если вы хотите, чтобы он открывался только по почте, используйте метод setData (): в intentEmail.setData(Uri.parse("mailto:"));противном случае он попросит вас открыть его как текст, изображение, аудиофайл другими приложениями, присутствующими на вашем устройстве.

3 - Вам необходимо передать строку идентификатора электронной почты как объект массива, а не только как строку. Строка: «name@email.com» . Объектом массива строки является: new String [] {"email1", "email2", "more_email"} .

intentEmail.putExtra(Intent.EXTRA_EMAIL, new String[] {"email@overflow.com", "abcd@stack.com"});
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.