Android 简明教程
Android - Sending Email
在开始邮件活动之前,您必须了解搭配启动意图的邮件功能,启动意图是在应用程序中或应用程序外将数据从一个组件传送到另一个组件。
如果想从应用程序发送电子邮件,则不必从头开始实现电子邮件客户端,而是可以使用现成的客户端,例如 Android 提供的默认邮件应用程序、Gmail、Outlook、K-9 邮件等。为此,我们需要编写一项活动来启动电子邮件客户端,使用带有正确操作和数据的隐式启动意图。在此示例中,我们要通过使用启动现有电子邮件客户端的启动意图对象从我们的应用程序发送电子邮件。
以下段落解释了发送电子邮件所需的启动意图对象的不同部分。
Intent Object - Action to send Email
您将使用 ACTION_SEND 操作来启动安装在您的 Android 设备上的电子邮件客户端。以下为创建带有 ACTION_SEND 操作的启动意图的简单语法。
Intent emailIntent = new Intent(Intent.ACTION_SEND);
Intent Object - Data/Type to send Email
若要发送电子邮件,您需要使用 setData() 方法将 mailto: 指定为 URI,并且数据类型应如下所示使用 setType() 方法为 text/plain 。
emailIntent.setData(Uri.parse("mailto:"));
emailIntent.setType("text/plain");
Intent Object - Extra to send Email
Android 具有内置支持,可以在将启动意图发送到目标电子邮件客户端之前将 TO、SUBJECT、CC、TEXT 等字段附加到启动意图中。您可以在电子邮件中使用以下额外字段,
Sr.No. |
Extra Data & Description |
1 |
EXTRA_BCC 一个包含应秘密抄送给电子邮件地址的字符串数组。 |
2 |
EXTRA_CC 一个包含应抄送给电子邮件地址的字符串数组。 |
3 |
EXTRA_EMAIL 一个包含应收到的电子邮件地址的字符串数组。 |
4 |
EXTRA_HTML_TEXT 一个与启动意图关联的常量字符串,与 ACTION_SEND 一起使用,以作为 HTML 格式文本提供 EXTRA_TEXT 的替代项。 |
5 |
EXTRA_SUBJECT 一个包含一条消息的所需主题行的常量字符串。 |
6 |
EXTRA_TEXT 一个与启动意图关联的常量 CharSequence,与 ACTION_SEND 一起使用,以提供要发送的文字数据。 |
7 |
EXTRA_TITLE 当与 ACTION_CHOOSER 一起使用时提供给用户的 CharSequence 对话框标题。 |
这是一个示例,向您展示如何为启动意图分配额外数据
emailIntent.putExtra(Intent.EXTRA_EMAIL , new String[]{"Recipient"});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "subject");
emailIntent.putExtra(Intent.EXTRA_TEXT , "Message Body");
上述代码的输出如下所示
Example
以下示例实际向您展示如何使用启动意图对象启动电子邮件客户端,以便向给定的收件人发送电子邮件。
Step |
Description |
1 |
您将使用 Android studio 创建一个 Android 应用程序,并将其命名为 Tutorialspoint,位于包 com.example.tutorialspoint 下。 |
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.Tutorialspoint/MainActivity.java 的内容。
package com.example.tutorialspoint;
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="Tutorials point "
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">Tutorialspoint</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.Tutorialspoint" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.tutorialspoint.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>
让我们尝试运行您的 tutorialspoint 应用程序。我假设您已将实际 Android 移动设备连接到计算机。要从 Android Studio 运行应用,请打开项目的活动文件之一,然后从工具栏中单击“运行”图标。在启动应用程序之前,Android Studio 安装程序将显示以下窗口以选择您要运行 Android 应用程序的位置。选择移动设备作为选项,然后检查移动设备上将显示以下屏幕的内容 -
现在使用 Compose Email 按钮列出所有已安装的电子邮件客户端。您可在列表中选择一个电子邮件客户端来发送电子邮件。我将使用 Gmail 客户端发送邮件,这里将显示所有提供的默认字段,如下所示。在此, From: 将是您为 Android 设备注册的默认电子邮件 ID。
您可以修改任何已给出的默认字段,最后使用“发送电子邮件”按钮将电子邮件发送给所提到的收件人。