Android(安卓)发送电子邮件
电子邮件(Email)是通过电子方式从一个系统用户通过网络分发给一个或多个接收者的消息。
在启动电子邮件活动之前,您必须了解电子邮件功能的意图,意图是将数据从一个组件传送到应用程序内或应用程序外的另一个组件。
要从应用程序发送电子邮件,您不必从一开始就实现电子邮件客户端,但您可以使用现有的电子邮件应用程序,如 Android、Gmail、Outlook、K-9 Mail 等提供的默认电子邮件应用程序。为此,我们需要编写一个活动来启动电子邮件客户端,使用具有正确操作和数据的隐式 Intent。在本例中,我们将使用启动现有电子邮件客户端的 Intent 对象从应用程序发送电子邮件。
以下部分解释了发送电子邮件所需的 Intent 对象的不同部分。
Intent 对象 - 发送电子邮件的行为
您将使用 ACTION_SEND
启动安装在 Android 设备上的电子邮件客户端。以下是使用 ACTION_SEND
操作创建意图的简单语法。
Intent emailIntent = new Intent(Intent.ACTION_SEND);
Intent 对象 - 要发送电子邮件的数据/类型
要发送电子邮件,您需要使用 setData()
方法将 mailto:
指定为 URI,使用 setType()
方法,数据类型将为 text/plain,如下所示:
emailIntent.setData(Uri.parse("mailto:"));
emailIntent.setType("text/plain");
Intent 对象 - 附加数据发送电子邮件
Android 内置支持添加 To、SUBJECT、CC、TEXT 等字段,这些字段可以在将意图发送到目标电子邮件客户端之前附加到意图中。您可以在电子邮件中使用以下额外字段:
编号 | 额外数据 & 描述 |
---|---|
1 | EXTRA_BCC 一个字符串数组,其中包含应进行盲抄写的电子邮件地址。 |
2 | EXTRA_CC 一个字符串数组,其中包含应抄写的电子邮件地址。 |
3 | EXTRA_EMAIL 一个字符串数组,包含应发送到的电子邮件地址。 |
4 | EXTRA_HTML_TEXT 与 Intent 关联的常量字符串,与 ACTION_SEND 一起使用,作为 HTML 格式文本提供 EXTRA_TEXT 的替代。 |
5 | EXTRA_SUBJECT 包含消息所需主题行的常量字符串。 |
6 | EXTRA_TEXT 与 Intent 关联的常量 CharSequence,与 ACTION_SEND 一起用于提供要发送的文本数据。 |
7 | EXTRA_TITLE 与 ACTION_CHOOSER 一起使用时提供给用户的 CharSequence 对话框标题。 |
Here is an example showing you how to assign extra data to your intent −The out-put of above code is as below shown an image
下面是一个实例,演示如何为您的意图分配额外的数据:
emailIntent.putExtra(Intent.EXTRA_EMAIL , new String[]{"Recipient"});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "subject");
emailIntent.putExtra(Intent.EXTRA_TEXT , "Message Body");
结果如下:
实例
下面的实例实际演示了如何使用 Intent 对象启动电子邮件客户端,向给定的收件人发送电子邮件。
要用这个实例进行电子邮件实验,您需要实际的移动设备配备最新的 Android 操作系统,否则您可能会遇到无法正常工作的仿真器问题。其次,您需要在设备上安装一个电子邮件客户端,如 GMail(默认情况下,每个 Android 版本都有 GMail 客户端应用程序)或 K9mail。
步骤 | 描述 |
---|---|
1 | 您将使用 Android studio 创建一个 Android 应用程序,并将其命名为 com.example.demo 包下的 My Application。 |
2 | 修改 src/MainActivity.java 文件并添加所需代码以处理发送电子邮件。 |
3 | 修改布局 XML 文件 res/layout/activity_main.xml 加入需要的 GUI 组件。 我们添加一个简单的按钮以启动电子邮件客户端。 |
4 | 修改 res/values/strings.xml 定义需要的常量 |
5 | 修改 AndroidManifest.xml |
6 | 运行应用程序以启动 Android 模拟器并验证应用程序中所做更改的结果。 |
以下是修改后的主活动文件的内容 src/com.example.demo/MainActivity.java:
package com.example.demo;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button startBtn = (Button) findViewById(R.id.sendEmail);
startBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
sendEmail();
}
});
}
protected void sendEmail() {
Log.i("Send email", "");
String[] TO = {""};
String[] CC = {""};
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setData(Uri.parse("mailto:"));
emailIntent.setType("text/plain");
emailIntent.putExtra(Intent.EXTRA_EMAIL, TO);
emailIntent.putExtra(Intent.EXTRA_CC, CC);
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Your subject");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message goes here");
try {
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
finish();
Log.i("Finished sending email...", "");
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(MainActivity.this, "There is no email client installed.", Toast.LENGTH_SHORT).show();
}
}
}
下面是 res/layout/activity_main.xml 文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sending Mail Example"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="30dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="demo "
android:textColor="#ff87ff09"
android:textSize="30dp"
android:layout_above="@+id/imageButton"
android:layout_alignRight="@+id/imageButton"
android:layout_alignEnd="@+id/imageButton" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:src="@drawable/abc"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
<Button
android:id="@+id/sendEmail"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/compose_email"/>
</LinearLayout>
下面是 res/values/strings.xml 文件定义了两个常量:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">demo</string>
<string name="compose_email">Compose Email</string>
</resources>
下面是默认的 AndroidManifest.xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.demo" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.demo.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
让我们尝试运行 My Application 应用程序。假设您已经将实际的 Android 移动设备与计算机连接。要从 Android Studio 运行应用程序,请打开项目的 activity 文件之一,然后单击工具栏上的运行 Eclipse 图标。在启动应用程序之前,Android studio 安装程序将显示以下窗口,以选择要运行 Android 应用程序的选项。选择您的移动设备作为选项,然后检查将显示以下屏幕的移动设备:
现在使用 Compose Email 按钮列出所有已安装的电子邮件客户端。从列表中,您可以选择一个电子邮件客户端来发送您的电子邮件。我将使用 Gmail 客户端发送我的电子邮件,其中将包含所有提供的默认字段,如下所示。此处发件人:将是您为 Android 设备注册的默认电子邮件 ID。
您可以修改任何一个给定的默认字段,最后使用发送电子邮件按钮将电子邮件发送给上述收件人。