Intent.EXTRA_EMAIL ไม่ได้เติมข้อมูลในฟิลด์ถึง


90

ฉันกำลังพยายามใช้ไฟล์ เพื่อส่งอีเมลจากแอปพลิเคชันของฉัน แต่ฟิลด์ถึงของอีเมลจะไม่ถูกเติม ถ้าฉันใส่รหัสเพื่อกรอกหัวเรื่องหรือข้อความก็ใช้ได้ดี เฉพาะช่องถึงจะไม่เติมข้อมูล

ฉันได้ลองเปลี่ยนประเภทเป็น "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

คำตอบ:


219

ฉันคิดว่าคุณไม่ผ่านrecipientเป็นarray of string

มันควรจะเป็นเช่นนั้น

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

21
แอนดรอยด์ ... ทำไมน่าสงสารจัง
Bugs เกิดขึ้น

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]))
Abtin Gramian

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

ใน 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()
        }
    }

นอกจากนี้คุณสามารถใช้ [ 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)

ฉันหวังว่าข้อมูลโค้ดนี้จะช่วยให้นักพัฒนา 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:"));
}

มีการแจ้งว่าไม่มีแอปใดสามารถดำเนินการนี้ได้
Abu Nayem

2

สองสิ่ง:

1 - คุณต้องตั้งค่าตัวแปรค่าคงที่ของการกระทำเป็น ACTION_SENDTO
Intent intentEmail = new Intent(Intent.ACTION_SENDTO);

2 - หากคุณต้องการให้เปิดโดยอีเมลเท่านั้นให้ใช้เมธอด setData (): intentEmail.setData(Uri.parse("mailto:"));มิฉะนั้นจะขอให้คุณเปิดเป็นข้อความรูปภาพไฟล์เสียงโดยแอพอื่น ๆ ที่มีอยู่ในอุปกรณ์ของคุณ

3 - คุณต้องส่งสตริง ID อีเมลเป็นออบเจ็กต์อาร์เรย์ไม่ใช่แค่สตริง สตริงคือ"name@email.com" วัตถุอาร์เรย์ของสตริงคือใหม่ String [] { "อีเมล 1", "อีเมล 2", "more_email"}

intentEmail.putExtra(Intent.EXTRA_EMAIL, new String[] {"email@overflow.com", "abcd@stack.com"});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.