Làm cách nào để gửi email từ ứng dụng Android của tôi?


Câu trả lời:


978

Cách tốt nhất (và dễ nhất) là sử dụng Intent:

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"recipient@example.com"});
i.putExtra(Intent.EXTRA_SUBJECT, "subject of email");
i.putExtra(Intent.EXTRA_TEXT   , "body of email");
try {
    startActivity(Intent.createChooser(i, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
    Toast.makeText(MyActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}

Nếu không, bạn sẽ phải viết khách hàng của riêng bạn.


6
Trong đoạn mã trên, không có id email người gửi. Vậy làm thế nào để gửi tin nhắn?
KIRAN KJ

38
KIRAN: Bạn sẽ cần xem xét cách thức Ý định hoạt động để hiểu điều này. Về cơ bản, nó sẽ mở một ứng dụng email với người nhận, chủ đề và nội dung đã được điền. Tùy thuộc vào ứng dụng email để thực hiện việc gửi.
Jeremy Logan

8
Email không xuất hiện trong trường "ĐẾN" bằng cách bắt đầu hoạt động. có ai biết?
Hamza Waqas

11
đóng góp to lớn của bình luận này là: message / rfc822
Guilherme Oliveira

22
thêm những điều này để chắc chắn rằng trình chọn chỉ hiển thị các ứng dụng email: Intent i = new Intent(Intent.ACTION_SENDTO); i.setType("message/rfc822"); i.setData(Uri.parse("mailto:"));
Edris

194

Sử dụng .setType("message/rfc822")hoặc trình chọn sẽ hiển thị cho bạn tất cả (nhiều) ứng dụng hỗ trợ mục đích gửi.


5
Đẹp, cái này nên có nhiều phiếu lên tbh. Bạn sẽ không nhận thấy thử nghiệm trên trình giả lập, nhưng khi bạn gửi "văn bản / thuần túy" trên thiết bị thực, nó sẽ cung cấp cho bạn danh sách hơn 15 ứng dụng !! vì vậy "message / rfc822" chắc chắn được khuyến nghị (tiêu chuẩn email).
Blundell

7
@Blundell hi, nhưng tôi không thấy bất kỳ sự khác biệt nào sau khi đổi thànhmessage/rfc822
vẽ

2
Bạn có thể loại bỏ bluetooth khỏi danh sách? Điều này cũng xuất hiện với loại này. +1 mặc dù, thủ thuật gọn gàng!
ingh.am

4
Cứu thịt xông khói của chúng tôi. Không thể tưởng tượng giải thích cho khách hàng rằng người dùng có thể tweet yêu cầu hỗ trợ thay vì gửi email cho họ.
Kevin Galligan

1
+1111111 Điều này xứng đáng vô tận + 1 để người khác có thể thấy điều này. Tôi đã bỏ lỡ phần này và phải giải quyết vấn đề này trong một thời gian!
Thử thách được chấp nhận vào

89

Tôi đã sử dụng điều này từ lâu và có vẻ tốt, không có ứng dụng không phải email nào xuất hiện. Chỉ là một cách khác để gửi một ý định gửi email:

Intent intent = new Intent(Intent.ACTION_SENDTO); // it's not ACTION_SEND
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject of email");
intent.putExtra(Intent.EXTRA_TEXT, "Body of email");
intent.setData(Uri.parse("mailto:default@recipient.com")); // or just "mailto:" for blank
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // this will make such that when user returns to your app, your app is displayed, instead of the email app.
startActivity(intent);

1
Hành động không được báo cáo: Hành động này hiện không được hỗ trợ
erdomester

4
lgor G-> plz thay đổi từ setType "(plain / text") thành setType ("text / plain")
sachit

2
.setType ("message / rfc822") không phải văn bản / đơn giản
The Hungry Androider

1
Mã này sẽ mở email có ý định? Làm cách nào tôi có thể gửi email mà không hiển thị ý định cho người dùng @yuku tôi muốn gửi mật khẩu vào email
Erum 7/215

2
Câu trả lời này khá có ảnh hưởng . :)
Nick Volynkin

54

Tôi đã sử dụng một cái gì đó dọc theo dòng của câu trả lời hiện được chấp nhận để gửi email với tệp nhật ký lỗi nhị phân đính kèm. GMail và K-9 gửi nó tốt và nó cũng đến tốt trên máy chủ mail của tôi. Vấn đề duy nhất là ứng dụng thư khách của tôi về Thunderbird, có vấn đề với việc mở / lưu tệp nhật ký đính kèm. Trong thực tế, nó chỉ đơn giản là không lưu tập tin mà không phàn nàn.

Tôi đã xem xét một trong những mã nguồn của các thư này và nhận thấy rằng tệp đính kèm tệp nhật ký có (có thể hiểu được) loại mime message/rfc822. Tất nhiên tệp đính kèm đó không phải là một email đính kèm. Nhưng Thunderbird không thể đối phó với lỗi nhỏ đó một cách duyên dáng. Vì vậy, đó là loại của một bummer.

Sau một chút nghiên cứu và thử nghiệm tôi đã đưa ra giải pháp sau:

public Intent createEmailOnlyChooserIntent(Intent source,
    CharSequence chooserTitle) {
    Stack<Intent> intents = new Stack<Intent>();
    Intent i = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto",
            "info@domain.com", null));
    List<ResolveInfo> activities = getPackageManager()
            .queryIntentActivities(i, 0);

    for(ResolveInfo ri : activities) {
        Intent target = new Intent(source);
        target.setPackage(ri.activityInfo.packageName);
        intents.add(target);
    }

    if(!intents.isEmpty()) {
        Intent chooserIntent = Intent.createChooser(intents.remove(0),
                chooserTitle);
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
                intents.toArray(new Parcelable[intents.size()]));

        return chooserIntent;
    } else {
        return Intent.createChooser(source, chooserTitle);
    }
}

Nó có thể được sử dụng như sau:

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("*/*");
i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(crashLogFile));
i.putExtra(Intent.EXTRA_EMAIL, new String[] {
    ANDROID_SUPPORT_EMAIL
});
i.putExtra(Intent.EXTRA_SUBJECT, "Crash report");
i.putExtra(Intent.EXTRA_TEXT, "Some crash report details");

startActivity(createEmailOnlyChooserIntent(i, "Send via email"));

Như bạn có thể thấy, phương thức createdEmailOnlyChooserIntent có thể dễ dàng được cung cấp với mục đích chính xác và loại mime chính xác.

Sau đó, nó đi qua danh sách các hoạt động khả dụng đáp ứng với ACTION_SENDTO mailto mục đích giao thức (chỉ dành cho ứng dụng email) và xây dựng một trình chọn dựa trên danh sách các hoạt động đó và ý định ACTION_SEND ban đầu với loại mime chính xác.

Một ưu điểm khác là Skype không được liệt kê nữa (điều này xảy ra để đáp ứng với loại mime rfc822).


1
tôi chỉ cần chèn đoạn mã của bạn và nó hoạt động tốt. Trước khi có các ứng dụng được liệt kê như Google Drive, Skype, v.v. Nhưng không có cách nào để gửi thư ra khỏi ứng dụng mà không gọi cho ứng dụng khác? Tôi vừa đọc bài viết về ứng dụng email mà @Rene đăng ở trên nhưng dường như quá phức tạp vì chỉ gửi một email đơn giản
Alex Cio

Câu trả lời tuyệt vời. Tôi cũng đã có Skype và Google Drive ACTION_SENDvà điều này rất tuyệt vời.
darrenp

1
Giải pháp phổ biến nhất ở trên cũng trả về Skype và Vkontakte. Giải pháp này tốt hơn.
Denis Kutlubaev

crashLogFile là gì? nó đã khởi tạo ở đâu? pease sepecify
Noufal 6/214

@Noufal Đây chỉ là phần còn lại từ cơ sở mã của riêng tôi. Đó là một Fileví dụ chỉ ra tệp nhật ký sự cố mà ứng dụng Android của tôi tạo trong nền trong trường hợp có ngoại lệ chưa được lưu. Ví dụ đó chỉ minh họa cách thêm tệp đính kèm email. Bạn cũng có thể đính kèm bất kỳ tệp nào khác từ bộ nhớ ngoài (ví dụ như hình ảnh). Bạn cũng có thể xóa dòng đó crashLogFileđể lấy ví dụ hoạt động.
tiguchi

37

Để CHỈ CẦN EMAIL APPS để giải quyết ý định của bạn, bạn cần chỉ định ACTION_SENDTO là Hành động và gửi thư dưới dạng Dữ liệu.

private void sendEmail(){

    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
    emailIntent.setData(Uri.parse("mailto:" + "recipient@example.com")); 
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "My email's subject");
    emailIntent.putExtra(Intent.EXTRA_TEXT, "My email's body");

    try {
        startActivity(Intent.createChooser(emailIntent, "Send email using..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(Activity.this, "No email clients installed.", Toast.LENGTH_SHORT).show();
    }

}

23

Tôi đã giải quyết vấn đề này bằng các dòng mã đơn giản như tài liệu Android giải thích.

( https://developer.android.com/guide/components/intents-common.html#Email )

Điều quan trọng nhất là cờ: nó là ACTION_SENDTO, và khôngACTION_SEND

Dòng quan trọng khác là

intent.setData(Uri.parse("mailto:")); ***// only email apps should handle this***

Nhân tiện, nếu bạn gửi trống Extra, if()cuối cùng sẽ không hoạt động và ứng dụng sẽ không khởi chạy ứng dụng email.

Theo tài liệu Android. Nếu bạn muốn đảm bảo rằng ý định của bạn chỉ được xử lý bởi một ứng dụng email (chứ không phải các ứng dụng nhắn tin văn bản hoặc ứng dụng xã hội khác), thì hãy sử dụng ACTION_SENDTOhành động và bao gồm mailto:lược đồ dữ liệu "". Ví dụ:

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

21

Chiến lược sử dụng .setType("message/rfc822")hoặc ACTION_SENDdường như cũng phù hợp với các ứng dụng không gửi email cho khách hàng, chẳng hạn như Android BeamBluetooth .

Việc sử dụng ACTION_SENDTOvà một mailto:URI dường như hoạt động hoàn hảo và được khuyến nghị trong tài liệu dành cho nhà phát triển . Tuy nhiên, nếu bạn thực hiện việc này trên trình giả lập chính thức và không có bất kỳ tài khoản email nào được thiết lập (hoặc không có bất kỳ ứng dụng thư khách nào), bạn sẽ gặp phải lỗi sau:

Hành động không được hỗ trợ

Hành động đó hiện không được hỗ trợ.

Như hình dưới đây:

Hành động không được hỗ trợ: Hành động đó hiện không được hỗ trợ.

Nó chỉ ra rằng các trình giả lập giải quyết ý định cho một hoạt động được gọi com.android.fallback.Fallback, hiển thị thông báo trên.Rõ ràng đây là do thiết kế.

Nếu bạn muốn ứng dụng của mình phá vỡ điều này để nó cũng hoạt động chính xác trên trình giả lập chính thức, bạn có thể kiểm tra nó trước khi thử gửi email:

private void sendEmail() {
    Intent intent = new Intent(Intent.ACTION_SENDTO)
        .setData(new Uri.Builder().scheme("mailto").build())
        .putExtra(Intent.EXTRA_EMAIL, new String[]{ "John Smith <johnsmith@yourdomain.com>" })
        .putExtra(Intent.EXTRA_SUBJECT, "Email subject")
        .putExtra(Intent.EXTRA_TEXT, "Email body")
    ;

    ComponentName emailApp = intent.resolveActivity(getPackageManager());
    ComponentName unsupportedAction = ComponentName.unflattenFromString("com.android.fallback/.Fallback");
    if (emailApp != null && !emailApp.equals(unsupportedAction))
        try {
            // Needed to customise the chooser dialog title since it might default to "Share with"
            // Note that the chooser will still be skipped if only one app is matched
            Intent chooser = Intent.createChooser(intent, "Send email with");
            startActivity(chooser);
            return;
        }
        catch (ActivityNotFoundException ignored) {
        }

    Toast
        .makeText(this, "Couldn't find an email app and account", Toast.LENGTH_LONG)
        .show();
}

Tìm thêm thông tin trong tài liệu dành cho nhà phát triển .


13

Gửi email có thể được thực hiện với Ý định sẽ không yêu cầu cấu hình. Nhưng sau đó nó sẽ yêu cầu tương tác người dùng và bố cục sẽ bị hạn chế một chút.

Xây dựng và gửi một email phức tạp hơn mà không có sự tương tác của người dùng đòi hỏi phải xây dựng ứng dụng khách của riêng bạn. Điều đầu tiên là API Sun Java cho email không có sẵn. Tôi đã thành công trong việc tận dụng thư viện Apache Mime4j để xây dựng email. Tất cả dựa trên các tài liệu tại nilvec .


6

Dưới đây là mã làm việc mẫu mở ứng dụng thư trong thiết bị Android và tự động điền vào Địa chỉChủ đề trong thư soạn thảo.

protected void sendEmail() {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:feedback@gmail.com"));
    intent.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Cảm ơn. So sánh với giải pháp của @Avi Parshan, bạn đặt email setData()và Avi đặt putExtra(). Cả hai biến thể làm việc. Nhưng nếu loại bỏ setDatavà chỉ sử dụng intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"hi@example.com"});, sẽ có một ActivityNotFoundException.
CoolMind

5

Tôi sử dụng mã dưới đây trong ứng dụng của tôi. Điều này hiển thị chính xác các ứng dụng email của khách hàng, chẳng hạn như Gmail.

    Intent contactIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", getString(R.string.email_to), null));
    contactIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.email_subject));
    startActivity(Intent.createChooser(contactIntent, getString(R.string.email_chooser)));

5

Điều này sẽ chỉ hiển thị cho bạn các ứng dụng email (cũng như PayPal vì một số lý do không xác định)

 public void composeEmail() {

    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:"));
    intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"hi@example.com"});
    intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
    intent.putExtra(Intent.EXTRA_TEXT, "Body");
    try {
        startActivity(Intent.createChooser(intent, "Send mail..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(MainActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
    }
}

1
Giải pháp tốt đẹp! Nó tránh được nhiều ứng dụng không phù hợp (chủ yếu được sử dụng là "Chia sẻ"). Đừng thêm intent.type = "message/rfc822"; intent.type = "text/html";vào đây vì nó sẽ dẫn đến ngoại lệ.
CoolMind

3

Đây là cách tôi đã làm nó. Đẹp và đơn giản.

String emailUrl = "mailto:email@example.com?subject=Subject Text&body=Body Text";
        Intent request = new Intent(Intent.ACTION_VIEW);
        request.setData(Uri.parse(emailUrl));
        startActivity(request);

3

Chức năng này đầu tiên là gmail có ý định trực tiếp để gửi email, nếu không tìm thấy gmail thì hãy thúc đẩy người chọn ý định. Tôi đã sử dụng chức năng này trong nhiều ứng dụng thương mại và nó hoạt động tốt. Hy vọng nó sẽ giúp bạn:

public static void sentEmail(Context mContext, String[] addresses, String subject, String body) {

    try {
        Intent sendIntentGmail = new Intent(Intent.ACTION_VIEW);
        sendIntentGmail.setType("plain/text");
        sendIntentGmail.setData(Uri.parse(TextUtils.join(",", addresses)));
        sendIntentGmail.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail");
        sendIntentGmail.putExtra(Intent.EXTRA_EMAIL, addresses);
        if (subject != null) sendIntentGmail.putExtra(Intent.EXTRA_SUBJECT, subject);
        if (body != null) sendIntentGmail.putExtra(Intent.EXTRA_TEXT, body);
        mContext.startActivity(sendIntentGmail);
    } catch (Exception e) {
        //When Gmail App is not installed or disable
        Intent sendIntentIfGmailFail = new Intent(Intent.ACTION_SEND);
        sendIntentIfGmailFail.setType("*/*");
        sendIntentIfGmailFail.putExtra(Intent.EXTRA_EMAIL, addresses);
        if (subject != null) sendIntentIfGmailFail.putExtra(Intent.EXTRA_SUBJECT, subject);
        if (body != null) sendIntentIfGmailFail.putExtra(Intent.EXTRA_TEXT, body);
        if (sendIntentIfGmailFail.resolveActivity(mContext.getPackageManager()) != null) {
            mContext.startActivity(sendIntentIfGmailFail);
        }
    }
}

1
Cảm ơn rất nhiều. Hãy cứu lấy cuộc sống của tôi
androCoder-BD

2

đơn giản thử cái này

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    buttonSend = (Button) findViewById(R.id.buttonSend);
    textTo = (EditText) findViewById(R.id.editTextTo);
    textSubject = (EditText) findViewById(R.id.editTextSubject);
    textMessage = (EditText) findViewById(R.id.editTextMessage);

    buttonSend.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            String to = textTo.getText().toString();
            String subject = textSubject.getText().toString();
            String message = textMessage.getText().toString();

            Intent email = new Intent(Intent.ACTION_SEND);
            email.putExtra(Intent.EXTRA_EMAIL, new String[] { to });
            // email.putExtra(Intent.EXTRA_CC, new String[]{ to});
            // email.putExtra(Intent.EXTRA_BCC, new String[]{to});
            email.putExtra(Intent.EXTRA_SUBJECT, subject);
            email.putExtra(Intent.EXTRA_TEXT, message);

            // need this to prompts email client only
            email.setType("message/rfc822");

            startActivity(Intent.createChooser(email, "Choose an Email client :"));

        }
    });
}

3
Làm thế nào là tốt hơn so với câu trả lời đã tồn tại khi bạn đăng bài này? Nó trông giống như một bản sao của câu trả lời được chấp nhận được bọc trong một hoạt động.
Sam

2

Giải pháp khác có thể là

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
emailIntent.setType("plain/text");
emailIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"someone@gmail.com"});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Yo");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Hi");
startActivity(emailIntent);

Giả sử hầu hết các thiết bị Android đã cài đặt ứng dụng GMail.


@PedroVarela chúng tôi luôn có thể kiểm tra hoạt động không tìm thấy ngoại lệ.
im lặng

1
Vâng, chúng tôi có thể. Nhưng giải pháp của bạn là không đúng. Tài liệu Android nêu rõ những gì bạn phải làm để chỉ hiển thị các ứng dụng thư trong trình chọn mục đích. Bạn đã viết "Giả sử hầu hết thiết bị Android đã cài đặt ứng dụng Gmail"; Điều gì xảy ra nếu đó là một thiết bị đã root và người dùng xóa ứng dụng khách Gmail?. Giả sử bạn đang tạo ứng dụng email của riêng mình?, Nếu người dùng sẽ gửi e-mail, ứng dụng của bạn sẽ không nằm trong danh sách đó. Điều gì xảy ra nếu gmail thay đổi tên gói? Bạn sẽ cập nhật ứng dụng của bạn?
Pedro Varela

2

Sử dụng cái này để gửi email ...

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

sử dụng lớp xây dựng:

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

2

Tôi đã sử dụng mã này để gửi thư bằng cách khởi chạy phần soạn thảo ứng dụng thư mặc định trực tiếp.

    Intent i = new Intent(Intent.ACTION_SENDTO);
    i.setType("message/rfc822"); 
    i.setData(Uri.parse("mailto:"));
    i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"test@gmail.com"});
    i.putExtra(Intent.EXTRA_SUBJECT, "Subject");
    i.putExtra(Intent.EXTRA_TEXT   , "body of email");
    try {
        startActivity(Intent.createChooser(i, "Send mail..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
    }

1

Phương pháp này làm việc cho tôi. Nó mở ứng dụng Gmail (nếu được cài đặt) và đặt mailto.

public void openGmail(Activity activity) {
    Intent emailIntent = new Intent(Intent.ACTION_VIEW);
    emailIntent.setType("text/plain");
    emailIntent.setType("message/rfc822");
    emailIntent.setData(Uri.parse("mailto:"+activity.getString(R.string.mail_to)));
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, activity.getString(R.string.app_name) + " - info ");
    final PackageManager pm = activity.getPackageManager();
    final List<ResolveInfo> matches = pm.queryIntentActivities(emailIntent, 0);
    ResolveInfo best = null;
    for (final ResolveInfo info : matches)
        if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail"))
            best = info;
    if (best != null)
        emailIntent.setClassName(best.activityInfo.packageName, best.activityInfo.name);
    activity.startActivity(emailIntent);
}

1
/**
 * Will start the chosen Email app
 *
 * @param context    current component context.
 * @param emails     Emails you would like to send to.
 * @param subject    The subject that will be used in the Email app.
 * @param forceGmail True - if you want to open Gmail app, False otherwise. If the Gmail
 *                   app is not installed on this device a chooser will be shown.
 */
public static void sendEmail(Context context, String[] emails, String subject, boolean forceGmail) {

    Intent i = new Intent(Intent.ACTION_SENDTO);
    i.setData(Uri.parse("mailto:"));
    i.putExtra(Intent.EXTRA_EMAIL, emails);
    i.putExtra(Intent.EXTRA_SUBJECT, subject);
    if (forceGmail && isPackageInstalled(context, "com.google.android.gm")) {
        i.setPackage("com.google.android.gm");
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
    } else {
        try {
            context.startActivity(Intent.createChooser(i, "Send mail..."));
        } catch (ActivityNotFoundException e) {
            Toast.makeText(context, "No email app is installed on your device...", Toast.LENGTH_SHORT).show();
        }
    }
}

/**
 * Check if the given app is installed on this devuice.
 *
 * @param context     current component context.
 * @param packageName The package name you would like to check.
 * @return True if this package exist, otherwise False.
 */
public static boolean isPackageInstalled(@NonNull Context context, @NonNull String packageName) {
    PackageManager pm = context.getPackageManager();
    if (pm != null) {
        try {
            pm.getPackageInfo(packageName, 0);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
    }
    return false;
}

1
 Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
            "mailto","ebgsoldier@gmail.com", null));
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Forgot Password");
    emailIntent.putExtra(Intent.EXTRA_TEXT, "Write your Pubg user name or Phone Number");
    startActivity(Intent.createChooser(emailIntent, "Send email..."));**strong text**

1

Thử cái này:

String mailto = "mailto:bob@example.org" +
    "?cc=" + "alice@example.com" +
    "&subject=" + Uri.encode(subject) +
    "&body=" + Uri.encode(bodyText);

Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse(mailto));

try {
    startActivity(emailIntent);
} catch (ActivityNotFoundException e) {
    //TODO: Handle case where no email app is available
}

Đoạn mã trên sẽ mở ứng dụng email khách yêu thích của người dùng được điền sẵn email sẵn sàng gửi.

Nguồn

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.