原文: https://javatutorial.net/send-email-with-attachments-android

在本教程中,您将学习如何在 Android 中以编程方式发送电子邮件以及如何附加文件,图像或视频。

电子邮件通常用于专业和个人对话。 许多应用程序需要电子邮件选项才能将数据发送给其他人。 您可以使用 Android 应用程序轻松发送电子邮件。 附件呢? 不幸的是,Android 不允许我们附加许多不同的文件格式,但是您可以添加其中的一些格式,例如照片,音频,视频,pdf 和 Word 文档。

电子邮件附件的示例

首先创建一个允许用户通过电子邮件发送数据的应用程序。Intent.ACTION_SEND用于通过手机中的现有客户端发送电子邮件。 类似地,Intent.ACTION_GET_CONTENT用于附件。

Intent.ACTION_SEND

ACTION_SEND用于将数据发送到您应用中的其他活动或其他应用。 两者都很容易理解和使用。 如果要将数据发送到应用程序中的其他活动,则只需指定数据及其类型。 Android 操作系统将完成剩下的工作……它将找到兼容的活动并显示数据。 同样,您可以将数据发送到其他应用程序。 将内容类型设置为简单的纯文本。 这是应该如何编码的

  1. final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
  2. emailIntent.setType("plain/text");
  3. emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,new String[] { email });
  4. emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,subject);

Intent.ACTION_GET_CONTENT

ACTION_GET_CONTENT用于选择多种类型的数据并返回。 您可以通过将 MIME 类型设置为此类数据来直接选择所需的内容类型。 或者,您可以选择所需的任何类型的数据。 为此,请使用选择器包装您的意图,该选择器将启动一个新活动,并让用户选择所需的内容。 这是怎么做的

  1. Intent intent = new Intent();
  2. intent.setType("image/*");
  3. intent.setAction(Intent.ACTION_GET_CONTENT);
  4. intent.putExtra("return-data", true);
  5. startActivityForResult(Intent.createChooser(intent, "Complete action using"), PICK_FROM_GALLERY);

向清单文件添加权限

向清单文件添加以下权限。

  1. <uses-sdk
  2. android:minSdkVersion="8"
  3. android:targetSdkVersion="16" />
  4. <uses-permission android:name="android.permission.INTERNET" />
  5. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  6. <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
  7. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

打开 Android Studio 并创建一个新项目。 创建主要活动并将以下代码粘贴到activity_main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:padding="5dp"
  7. tools:context=".MainActivity" >
  8. <RelativeLayout
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent"
  11. android:layout_margin="5dp"
  12. android:padding="5dp" >
  13. <EditText
  14. android:id="@+id/et_to"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:layout_alignParentLeft="true"
  18. android:layout_alignParentTop="true"
  19. android:layout_margin="5dp"
  20. android:hint="Receiver's Email Address!"
  21. android:inputType="textEmailAddress"
  22. android:singleLine="true" />
  23. <EditText
  24. android:id="@+id/et_subject"
  25. android:layout_width="match_parent"
  26. android:layout_height="wrap_content"
  27. android:layout_below="@id/et_to"
  28. android:layout_margin="5dp"
  29. android:hint="Enter Subject"
  30. android:singleLine="true" />
  31. <EditText
  32. android:id="@+id/et_message"
  33. android:layout_width="match_parent"
  34. android:layout_height="200dp"
  35. android:layout_below="@id/et_subject"
  36. android:layout_margin="5dp"
  37. android:gravity="top|left"
  38. android:hint="Compose Email"
  39. android:inputType="textMultiLine" />
  40. <Button
  41. android:id="@+id/bt_send"
  42. android:layout_width="80dp"
  43. android:layout_height="50dp"
  44. android:layout_below="@id/et_message"
  45. android:layout_margin="5dp"
  46. android:text="Send" />
  47. <Button
  48. android:id="@+id/bt_attachment"
  49. android:layout_width="wrap_content"
  50. android:layout_height="wrap_content"
  51. android:text="attachment"
  52. android:layout_alignParentBottom="true"
  53. android:layout_alignParentRight="true"
  54. android:layout_alignParentEnd="true" />
  55. </RelativeLayout>
  56. </ScrollView>

现在这里是MainActivity.java

  1. package com.example.admin.emailattachmentexample;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.database.Cursor;
  5. import android.net.Uri;
  6. import android.os.Bundle;
  7. import android.provider.MediaStore;
  8. import android.util.Log;
  9. import android.view.View;
  10. import android.widget.Button;
  11. import android.widget.EditText;
  12. import android.widget.Toast;
  13. public class MainActivity extends Activity {
  14. EditText et_email;
  15. EditText et_subject;
  16. EditText et_message;
  17. Button Send;
  18. Button Attachment;
  19. String email;
  20. String subject;
  21. String message;
  22. String attachmentFile;
  23. Uri URI = null;
  24. private static final int PICK_FROM_GALLERY = 101;
  25. int columnIndex;
  26. @Override
  27. protected void onCreate(Bundle savedInstanceState)
  28. {
  29. super.onCreate(savedInstanceState);
  30. setContentView(R.layout.activity_main);
  31. et_email = (EditText) findViewById(R.id.et_to);
  32. et_subject = (EditText) findViewById(R.id.et_subject);
  33. et_message = (EditText) findViewById(R.id.et_message);
  34. Attachment = (Button) findViewById(R.id.bt_attachment);
  35. Send = (Button) findViewById(R.id.bt_send);
  36. //send button listener
  37. Send.setOnClickListener(new View.OnClickListener() {
  38. @Override
  39. public void onClick(View v) {
  40. sendEmail();
  41. }
  42. });
  43. //attachment button listener
  44. Attachment.setOnClickListener(new View.OnClickListener() {
  45. @Override
  46. public void onClick(View v) {
  47. openFolder();
  48. }
  49. });
  50. }
  51. protected void onActivityResult(int requestCode, int resultCode, Intent data)
  52. {
  53. if (requestCode == PICK_FROM_GALLERY && resultCode == RESULT_OK) {
  54. Uri selectedImage = data.getData();
  55. String[] filePathColumn = { MediaStore.Images.Media.DATA };
  56. Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
  57. cursor.moveToFirst();
  58. columnIndex = cursor.getColumnIndex(filePathColumn[0]);
  59. attachmentFile = cursor.getString(columnIndex);
  60. Log.e("Attachment Path:", attachmentFile);
  61. URI = Uri.parse("file://" + attachmentFile);
  62. cursor.close();
  63. }
  64. }
  65. public void sendEmail()
  66. {
  67. try
  68. {
  69. email = et_email.getText().toString();
  70. subject = et_subject.getText().toString();
  71. message = et_message.getText().toString();
  72. final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
  73. emailIntent.setType("plain/text");
  74. emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,new String[] { email });
  75. emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,subject);
  76. if (URI != null) {
  77. emailIntent.putExtra(Intent.EXTRA_STREAM, URI);
  78. }
  79. emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, message);
  80. this.startActivity(Intent.createChooser(emailIntent,"Sending email..."));
  81. }
  82. catch (Throwable t)
  83. {
  84. Toast.makeText(this, "Request failed try again: " + t.toString(),Toast.LENGTH_LONG).show();
  85. }
  86. }
  87. public void openFolder()
  88. {
  89. Intent intent = new Intent();
  90. intent.setType("image/*");
  91. intent.setAction(Intent.ACTION_GET_CONTENT);
  92. intent.putExtra("return-data", true);
  93. startActivityForResult(Intent.createChooser(intent, "Complete action using"), PICK_FROM_GALLERY);
  94. }
  95. }

运行您的应用,这是输出

如何在 Android 中发送带有附件的电子邮件 - 图1

带附件的电子邮件示例

点击“添加附件”

如何在 Android 中发送带有附件的电子邮件 - 图2

添加附件

现在点击“发送”按钮

如何在 Android 中发送带有附件的电子邮件 - 图3

发电子邮件

您可以通过单击链接下载此项目。

参考文献

Android ACTION_SEND javadoc

Android ACTION_GET_CONTENT javadoc