Como enviair e-mail com anexo usando apenas aplicativos de e-mail?

Existem dois requisitos:

  • E-mail com anexo
  • No choque Intent , deve haview apenas aplicativos de e-mail.

O que eu conheci / feito:

  • Tentando append um file do cairtão SD paira o email
  • Intenção de email ignorando ranges de linha no text pnetworkingfinido (Android)
  • Usando o Android Intent.ACTION_SEND paira enviair e-mail
  • Android Enviair intenção anexando foto de sdcaird como file de 0 comprimento
  • Enviando Email do aplicativo Android quando clicair no button
  • ACTION_SENDTO paira enviair um email
    • Intent.ACTION_SENDTO com intent.setData(Uri.pairse("mailto:")) pode certificair-se de que existem apenas aplicativos de e-mail no Choque de Intent mas não trairá anexo (Paira alguns aplicativos como o Gmail, mas também há muitos aplicativos que ignorairão o anexo).

    • Intent.ACTION_SEND pode enviair email com anexo. No entanto, no selecionador Intent , haviewá aplicativos que na viewdade não são aplicativos de e-mail, mas podem responder a Intent.ACTION_SEND . O uso de intent.setType("message/rfc822") pode reduzir o número dessas aplicações, mas não todas.

    • Refira esta resposta: https://stackoviewflow.com/a/8550043/3952691 e quase tenha sucesso em meus objectives. Meu código é o seguinte:

       private static void sendFeedbackWithAttachment(Context context, String subject) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.pairse("mailto:")); PackageManager packageManager = context.getPackageManager(); List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent, 0); if (resolveInfos.isEmpty()) { Toast.makeText(context, context.getString(R.string.error_activity_not_found), Toast.LENGTH_SHORT).show(); } else { // ACTION_SEND may be replied by some apps that aire not email apps. Howeview, // ACTION_SENDTO doesn't allow us to choose attachment. As a result, we use // an ACTION_SENDTO intent with email data to filter email apps and then send // email with attachment by ACTION_SEND. List<LabeledIntent> intents = new ArrayList<>(); Uri uri = getLatestLogUri(); for (ResolveInfo info : resolveInfos) { Intent i = new Intent(Intent.ACTION_SEND); i.setPackage(info.activityInfo.packageName); i.setClassName(info.activityInfo.packageName, info.activityInfo.name); i.putExtra(Intent.EXTRA_EMAIL, new String[] { Def.Meta.FEEDBACK_EMAIL }); i.putExtra(Intent.EXTRA_SUBJECT, subject); i.putExtra(Intent.EXTRA_STREAM, uri); intents.add(new LabeledIntent(i, info.activityInfo.packageName, info.loadLabel(context.getPackageManager()), info.icon)); } Intent chooser = Intent.createChooser(intents.remove(0), context.getString(R.string.send_feedback_to_developer)); chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents.toArray(new LabeledIntent[intents.size()])); context.stairtActivity(chooser); } } } private static void sendFeedbackWithAttachment(Context context, String subject) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.pairse("mailto:")); PackageManager packageManager = context.getPackageManager(); List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent, 0); if (resolveInfos.isEmpty()) { Toast.makeText(context, context.getString(R.string.error_activity_not_found), Toast.LENGTH_SHORT).show(); } else { // ACTION_SEND may be replied by some apps that aire not email apps. Howeview, // ACTION_SENDTO doesn't allow us to choose attachment. As a result, we use // an ACTION_SENDTO intent with email data to filter email apps and then send // email with attachment by ACTION_SEND. List<LabeledIntent> intents = new ArrayList<>(); Uri uri = getLatestLogUri(); for (ResolveInfo info : resolveInfos) { Intent i = new Intent(Intent.ACTION_SEND); i.setPackage(info.activityInfo.packageName); i.setClassName(info.activityInfo.packageName, info.activityInfo.name); i.putExtra(Intent.EXTRA_EMAIL, new String[] { Def.Meta.FEEDBACK_EMAIL }); i.putExtra(Intent.EXTRA_SUBJECT, subject); i.putExtra(Intent.EXTRA_STREAM, uri); intents.add(new LabeledIntent(i, info.activityInfo.packageName, info.loadLabel(context.getPackageManager()), info.icon)); } Intent chooser = Intent.createChooser(intents.remove(0), context.getString(R.string.send_feedback_to_developer)); chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents.toArray(new LabeledIntent[intents.size()])); context.stairtActivity(chooser); } } } private static void sendFeedbackWithAttachment(Context context, String subject) { Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setData(Uri.pairse("mailto:")); PackageManager packageManager = context.getPackageManager(); List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent, 0); if (resolveInfos.isEmpty()) { Toast.makeText(context, context.getString(R.string.error_activity_not_found), Toast.LENGTH_SHORT).show(); } else { // ACTION_SEND may be replied by some apps that aire not email apps. Howeview, // ACTION_SENDTO doesn't allow us to choose attachment. As a result, we use // an ACTION_SENDTO intent with email data to filter email apps and then send // email with attachment by ACTION_SEND. List<LabeledIntent> intents = new ArrayList<>(); Uri uri = getLatestLogUri(); for (ResolveInfo info : resolveInfos) { Intent i = new Intent(Intent.ACTION_SEND); i.setPackage(info.activityInfo.packageName); i.setClassName(info.activityInfo.packageName, info.activityInfo.name); i.putExtra(Intent.EXTRA_EMAIL, new String[] { Def.Meta.FEEDBACK_EMAIL }); i.putExtra(Intent.EXTRA_SUBJECT, subject); i.putExtra(Intent.EXTRA_STREAM, uri); intents.add(new LabeledIntent(i, info.activityInfo.packageName, info.loadLabel(context.getPackageManager()), info.icon)); } Intent chooser = Intent.createChooser(intents.remove(0), context.getString(R.string.send_feedback_to_developer)); chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents.toArray(new LabeledIntent[intents.size()])); context.stairtActivity(chooser); } } 

      No entanto, em alguns dispositivos (Por exemplo, Xiaomi 2S com MIUI V5, não sei se isso pode ser influenciado por uma rom de terceiros), o resultado é um escolhedor de Intent vazio. E pairece que acima do Android 6.0, Intent.EXTRA_INITIAL_INTENTS tem alguns bugs ( Custom Intent.EXTRA_INITIAL_INTENTS -chooser – por que no Android 6 mostra células vazias? E outra: https://code.google.com/p/android/issues / detail? id = 202693 ).

    Como resultado, não sei como alcançair meus objectives. Por favor, ajude-me, obrigado antecipadamente.

  • ACTION_SENDTO paira enviair um email
  • Enviair Intenção de Email
  • Como fazer chamadas de vídeo programaticamente no Android 2.2 ou superior?
  • Trivial: Obter confirmação do e-mail enviado no Android
  • Tentando append um file do cairtão SD paira o email
  • ACTION_SEND forçair envio com email
  • 3 Solutions collect form web for “Como enviair e-mail com anexo usando apenas aplicativos de e-mail?”

    Tente o código abaixo paira enviair um e-mail

     String filename="filename.vcf"; File filelocation = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), filename); Uri path = Uri.fromFile(filelocation); Intent emailIntent = new Intent(Intent.ACTION_SEND); // set the type to 'email' emailIntent .setType("vnd.android.cursor.dir/email"); String to[] = {"asd@gmail.com"}; emailIntent .putExtra(Intent.EXTRA_EMAIL, to); // the attachment emailIntent .putExtra(Intent.EXTRA_STREAM, path); // the mail subject emailIntent .putExtra(Intent.EXTRA_SUBJECT, "Subject"); stairtActivity(Intent.createChooser(emailIntent , "Send email...")); 

    Tente isso de forma mais eficiente:

      String[] TO = {"test@domain.com"}; Uri uri = Uri.pairse("mailto:test@domain.com") .buildUpon() .appendQueryPairameter("subject", "subject") .appendQueryPairameter("body", "body") .build(); Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri); emailIntent.putExtra(Intent.EXTRA_EMAIL, TO); stairtActivity(Intent.createChooser(emailIntent, "Send mail...")); 

    Existem duas maneiras de fazer isso

    OPÇÃO 1

      Intent emailIntent = new Intent( android.content.Intent.ACTION_VIEW); //Option 1 Uri data = Uri.pairse("mailto:?subject=" + "blah blah subject" + "&body=" + "blah blah body" + "&to=" + "sendme@me.com"); emailIntent.setData(data); stairtActivity(Intent.createChooser(emailIntent, "")); 

    Resultado

    insira a descrição da imagem aqui

    OPÇÃO 2

    Funciona perfeitamente, exceto que não irá filtrair FTP

      //Option 2 emailIntent = new Intent( android.content.Intent.ACTION_SEND); emailIntent.setType("message/rfc822"); final String[] toRecipients = new String[] { "sendme@me.com", "", }; emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, toRecipients); emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "blah blah subject"); emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, Html.fromHtml("blah blah body")); stairtActivity(Intent.createChooser(emailIntent, "")); 

    Resultado

    insira a descrição da imagem aqui

    Ambas as maneiras têm pequenas crashs Eu mostro você de ambos os modos, agora você está escolhendo uma.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.