Intent.EXTRA_EMAIL không điền trường Tới


89

Tôi đang cố gắng sử dụng một để gửi email từ ứng dụng của tôi nhưng trường Đến của email sẽ không điền. Nếu tôi thêm mã để điền vào chủ đề hoặc văn bản, chúng hoạt động tốt. Chỉ trường Tới sẽ không điền.

Tôi cũng đã thử thay đổi loại thành "văn bản / đồng bằng" và "văn bản / html" nhưng tôi gặp vấn đề tương tự. Ai có thể giúp tôi không?

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

Ứng dụng email mà tôi đang cố gắng sử dụng là Gmail

Câu trả lời:


218

Tôi nghĩ rằng bạn không vượt qua recipientnhưarray of string

nó sẽ giống như

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

21
Android ... sao bạn thảm hại thế này?
Lỗi xảy ra vào

4
hahaha, bạn đã làm tôi cười +1 Triệu @BugsHappen .. Lý do: Nó là một nguồn mở nhưng tài liệu không đạt yêu cầu 100%, các nhà sản xuất thiết bị sửa đổi theo nhu cầu của họ (hầu hết các thiết bị đều rẻ và vô dụng), các nhà phát triển không đọc "nhà phát triển. android.com ”.
MKJParekh

4
Ngoài ra hãy chắc chắn rằng bạn đang không làm intent.putExtra(Intent.EXTRA_EMAIL, list.toArray()) nó sẽ không làm việc kể từ list.toArray () tạo ra Object [] và không String []
nikib3ro

@ kape123 này không làm việc tuy nhiênintent.putExtra(Intent.EXTRA_EMAIL, list.toArray(new String[0]))
Abtin Gramian

4

Dùng cái này

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

``}

Điều này sẽ hoạt động :)
Đây là những gì tài liệu Android nói về Intent.Extra_Email
-Một chuỗi chuỗi của tất cả các địa chỉ email người nhận "Tới".
Vì vậy, bạn nên cấp chuỗi đúng cách. Bạn có thể đọc thêm ở đây
http://developer.android.com/guide/components/intents-common.html#Email và tại đây http://developer.android.com/guide/topics/resources /string-resource.html Hoặc sử dụng hành động ACTION_SENDTO và bao gồm lược đồ dữ liệu "mailto:". Ví dụ:

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

Trong Kotlin - 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()
        }
    }

Ngoài ra, bạn có thể sử dụng [ val emailIntent = Intent(Intent.ACTION_SENDTO)] để gọi ứng dụng email trực tiếp

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

Tôi hy vọng đoạn mã này sẽ giúp ích cho các nhà phát triển kotlin.


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

Nó nói rằng không có ứng dụng nào có thể thực hiện hành động này.
Abu Nayem

1

Vài điều:

1 - Bạn cần đặt biến hằng số hành động là ACTION_SENDTO.
Intent intentEmail = new Intent(Intent.ACTION_SENDTO);

2 - Nếu bạn chỉ muốn mở nó bằng thư thì hãy sử dụng phương thức setData (): intentEmail.setData(Uri.parse("mailto:"));Nếu không, nó sẽ yêu cầu bạn mở nó dưới dạng tệp văn bản, hình ảnh, âm thanh bằng các ứng dụng khác có trên thiết bị của bạn.

3 - Bạn cần chuyển chuỗi ID email dưới dạng một đối tượng mảng chứ không chỉ dưới dạng một chuỗi. Chuỗi là: "name@email.com" . Array Đối tượng của chuỗi là: new String [] {"email1", "email2", "more_email"} .

intentEmail.putExtra(Intent.EXTRA_EMAIL, new String[] {"email@overflow.com", "abcd@stack.com"});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.