在没有用户交互的情况下发送电子邮件 - Android Studio
Sending email without user Interaction - Android Studio
动机:我正在创建一个注册Activity,我需要在按钮点击下发送一封自动电子邮件。我已经关注了很多博客、Whosebug 问题,但到目前为止无法发送电子邮件。
工作环境: Android Studio 1.2 Beta 3
当前关注的问题:Sending Email in Android using JavaMail API without using the default/built-in app
现在这是我所做的:
下载了三个 Jar 文件
- activation.jar
- additional.jar
- mail.jar
然后我在以下文件夹中复制了三个 jar 文件:
G:\Android Projects\Email\app\libs\
复制文件后,我通过指向 Android Studio 中的 "Project Explorer" 找到我的 .jar 文件,然后将我的树视图从 "Android" 更改为 "Project"
然后展开树Project > app > libs >
找到文件后;在我做的每个 .jar 文件上:右键单击 -> 添加为库
完成 gradle 构建后,我将上面的代码复制到问题和 运行 到我自己的项目中。它编译没有任何错误。
现在的问题是:
当我 运行 一个程序时,它会显示祝酒消息 "Email was Sent Successfully" 但我从未收到过电子邮件,我的帐户中也没有任何已发送的邮件。
这是我所有 类 和 .xml 文件的所有代码
MainActivity.java
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button send = (Button)findViewById(R.id.send_email);
send.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
try {
GMailSender sender = new GMailSender("ars@gmail.com", "123abc-123abc");
sender.sendMail("ARS",
"This is Body HEELO WORLD",
"ars@gmail.com",
"reciever@gmail.com");
Toast.makeText(MainActivity.this, "Email was sent successfully.", Toast.LENGTH_LONG).show();
} catch (Exception e) {
Log.e("SendMail", e.getMessage(), e);
Toast.makeText(MainActivity.this, "There was a problem sending the email.", Toast.LENGTH_LONG).show();
}
}
});
}
}
GMailSender.java
package com.example.hassnainmunir.email;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.Security;
import java.util.Properties;
class GMailSender extends javax.mail.Authenticator {
private String mailhost = "smtp.gmail.com";
private String user;
private String password;
private Session session;
static {
Security.addProvider(new JSSEProvider());
}
public GMailSender(String user, String password) {
this.user = user;
this.password = password;
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", mailhost);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.quitwait", "false");
session = Session.getDefaultInstance(props, this);
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
public synchronized void sendMail(String subject, String body, String sender, String recipients) throws Exception {
try{
MimeMessage message = new MimeMessage(session);
DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));
message.setSender(new InternetAddress(sender));
message.setSubject(subject);
message.setDataHandler(handler);
if (recipients.indexOf(',') > 0)
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
else
message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
Transport.send(message);
}catch(Exception e){
e.printStackTrace();
}
}
public class ByteArrayDataSource implements DataSource {
private byte[] data;
private String type;
public ByteArrayDataSource(byte[] data, String type) {
super();
this.data = data;
this.type = type;
}
public ByteArrayDataSource(byte[] data) {
super();
this.data = data;
}
public void setType(String type) {
this.type = type;
}
public String getContentType() {
if (type == null)
return "application/octet-stream";
else
return type;
}
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(data);
}
public String getName() {
return "ByteArrayDataSource";
}
public OutputStream getOutputStream() throws IOException {
throw new IOException("Not Supported");
}
}
}
JSSEProvider.java
package com.example.hassnainmunir.email;
import java.security.AccessController;
import java.security.Provider;
public final class JSSEProvider extends Provider {
public JSSEProvider() {
super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");
AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() {
public Void run() {
put("SSLContext.TLS",
"org.apache.harmony.xnet.provider.jsse.SSLContextImpl");
put("Alg.Alias.SSLContext.TLSv1", "TLS");
put("KeyManagerFactory.X509",
"org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl");
put("TrustManagerFactory.X509",
"org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl");
return null;
}
});
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:id="@+id/send_email"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/Send_Email" />
</LinearLayout>
AndroidMenifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hassnainmunir.email" >
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".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>
Strings.xml
<resources>
<string name="app_name">Email</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="Send_Email">Send Email</string>
</resources>
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "22.0.0"
defaultConfig {
applicationId "com.example.hassnainmunir.email"
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.0.0'
compile files('libs/activation.jar')
}
你能帮我找出我做错的地方吗?
因为我被困在那里已经三天了。而且收不到邮件。
这不是您问题的答案,但我认为它可能会有所帮助
看看这个 https://mandrillapp.com/api/docs/
我在我的应用程序中使用 mandrill api 发送电子邮件
首先,您在 mandrill 网站上创建帐户,然后填写电子邮件中应包含的数据 json 格式,就像您在 link https://mandrillapp.com/api/docs/messages.html#method=send
中看到的那样
然后执行 HTTP POST 包含你的 json 到这个 uri 的请求:https://mandrillapp.com/api/1.0/messages/send.json
实施
//**********Method to send email
public void sendEmail(){
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPostExecute(Void result) {
Toast.makeText(MainActivity.this,
"Your message was sent successfully.",
Toast.LENGTH_SHORT).show();
super.onPostExecute(result);
}
@Override
protected Void doInBackground(Void... params) {
String respond = POST(
URL,
makeMandrillRequest(fromEmail.getText()
.toString(), toEmail.getText()
.toString(), name.getText()
.toString(), text.getText()
.toString(), htmlText.getText()
.toString()));
Log.d("respond is ", respond);
return null;
}
}.execute();
}
//*********method to post json to uri
public String POST(String url , JSONObject jsonObject) {
InputStream inputStream = null;
String result = "";
try {
Log.d("internet json ", "In post Method");
// 1. create HttpClient
DefaultHttpClient httpclient = new DefaultHttpClient();
// 2. make POST request to the given URL
HttpPost httpPost = new HttpPost(url);
String json = "";
// 3. convert JSONObject to JSON to String
json = jsonObject.toString();
StringEntity se = new StringEntity(json);
// 4. set httpPost Entity
httpPost.setEntity(se);
// 5. Set some headers to inform server about the type of the
// content
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
// 6. Execute POST request to the given URL
HttpResponse httpResponse = httpclient.execute(httpPost);
// 7. receive response as inputStream
inputStream = httpResponse.getEntity().getContent();
// 8. convert inputstream to string
if(inputStream != null){
result = convertStreamToString(inputStream);
}else{
result = "Did not work!";
Log.d("json", "Did not work!" );
}
} catch (Exception e) {
Log.d("InputStream", e.toString());
}
// 9. return result
return result;
}
//*****************TO create email json
private JSONObject makeMandrillRequest(String from, String to, String name,
String text, String htmlText) {
JSONObject jsonObject = new JSONObject();
JSONObject messageObj = new JSONObject();
JSONArray toObjArray = new JSONArray();
JSONArray imageObjArray = new JSONArray();
JSONObject imageObjects = new JSONObject();
JSONObject toObjects = new JSONObject();
try {
jsonObject.put("key", "********************");
messageObj.put("html", htmlText);
messageObj.put("text", text);
messageObj.put("subject", "testSubject");
messageObj.put("from_email", from);
messageObj.put("from_name", name);
messageObj.put("track_opens", true);
messageObj.put("tarck_clicks", true);
messageObj.put("auto_text", true);
messageObj.put("url_strip_qs", true);
messageObj.put("preserve_recipients", true);
toObjects.put("email", to);
toObjects.put("name", name);
toObjects.put("type", "to");
toObjArray.put(toObjects);
messageObj.put("to", toObjArray);
if (encodedImage != null) {
imageObjects.put("type", "image/png");
imageObjects.put("name", "IMAGE");
imageObjects.put("content", encodedImage);
imageObjArray.put(imageObjects);
messageObj.put("images", imageObjArray);
}
jsonObject.put("message", messageObj);
jsonObject.put("async", false);
Log.d("Json object is ", " " + jsonObject);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonObject;
}
还要检查这个 library ,它可以使实施起来更容易。
您的 GMailSender.java 代码充满了这些 common JavaMail mistakes。
确保您使用的是 latest version of JavaMail。
您不需要 ByteArrayDataSource 因为 JavaMail includes it.
要了解您的邮件发生了什么,启用 JavaMail Session debugging 会有所帮助。调试输出可能会提供一些线索。
但实际上,您应该考虑从客户端应用程序发送电子邮件是否是正确的方法。如果您的客户端应用程序正在与您的网站进行某种 "signup activity" 交互,那么作为服务器上 activity 的结果发送电子邮件会好得多。要在客户端执行此操作,您需要将 Gmail 帐户的密码硬连接到客户端,或者您需要向应用程序的用户询问他们的 Gmail 帐户和密码。
我认为你需要做两件事:
1. 在异步任务中添加所有网络代码,因为 android 支持单线程模型。因此,如果您直接 运行 在主线程 ui 上发送电子邮件,这可能会冻结您的应用程序。
2. 您可以使用检查您的 gmail 设置,在那里您可以启用您的安全。这样您就可以从应用程序接收它。如果您有兴趣使用 java 库发送电子邮件,请点击以下链接。
http://www.javatpoint.com/java-mail-api-tutorial
动机:我正在创建一个注册Activity,我需要在按钮点击下发送一封自动电子邮件。我已经关注了很多博客、Whosebug 问题,但到目前为止无法发送电子邮件。
工作环境: Android Studio 1.2 Beta 3
当前关注的问题:Sending Email in Android using JavaMail API without using the default/built-in app
现在这是我所做的:
下载了三个 Jar 文件
- activation.jar
- additional.jar
- mail.jar
然后我在以下文件夹中复制了三个 jar 文件:
G:\Android Projects\Email\app\libs\
复制文件后,我通过指向 Android Studio 中的 "Project Explorer" 找到我的 .jar 文件,然后将我的树视图从 "Android" 更改为 "Project"
然后展开树Project > app > libs >
找到文件后;在我做的每个 .jar 文件上:右键单击 -> 添加为库
完成 gradle 构建后,我将上面的代码复制到问题和 运行 到我自己的项目中。它编译没有任何错误。
现在的问题是:
当我 运行 一个程序时,它会显示祝酒消息 "Email was Sent Successfully" 但我从未收到过电子邮件,我的帐户中也没有任何已发送的邮件。
这是我所有 类 和 .xml 文件的所有代码
MainActivity.java
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button send = (Button)findViewById(R.id.send_email);
send.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
try {
GMailSender sender = new GMailSender("ars@gmail.com", "123abc-123abc");
sender.sendMail("ARS",
"This is Body HEELO WORLD",
"ars@gmail.com",
"reciever@gmail.com");
Toast.makeText(MainActivity.this, "Email was sent successfully.", Toast.LENGTH_LONG).show();
} catch (Exception e) {
Log.e("SendMail", e.getMessage(), e);
Toast.makeText(MainActivity.this, "There was a problem sending the email.", Toast.LENGTH_LONG).show();
}
}
});
}
}
GMailSender.java
package com.example.hassnainmunir.email;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.Security;
import java.util.Properties;
class GMailSender extends javax.mail.Authenticator {
private String mailhost = "smtp.gmail.com";
private String user;
private String password;
private Session session;
static {
Security.addProvider(new JSSEProvider());
}
public GMailSender(String user, String password) {
this.user = user;
this.password = password;
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", mailhost);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.quitwait", "false");
session = Session.getDefaultInstance(props, this);
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
public synchronized void sendMail(String subject, String body, String sender, String recipients) throws Exception {
try{
MimeMessage message = new MimeMessage(session);
DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));
message.setSender(new InternetAddress(sender));
message.setSubject(subject);
message.setDataHandler(handler);
if (recipients.indexOf(',') > 0)
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
else
message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
Transport.send(message);
}catch(Exception e){
e.printStackTrace();
}
}
public class ByteArrayDataSource implements DataSource {
private byte[] data;
private String type;
public ByteArrayDataSource(byte[] data, String type) {
super();
this.data = data;
this.type = type;
}
public ByteArrayDataSource(byte[] data) {
super();
this.data = data;
}
public void setType(String type) {
this.type = type;
}
public String getContentType() {
if (type == null)
return "application/octet-stream";
else
return type;
}
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(data);
}
public String getName() {
return "ByteArrayDataSource";
}
public OutputStream getOutputStream() throws IOException {
throw new IOException("Not Supported");
}
}
}
JSSEProvider.java
package com.example.hassnainmunir.email;
import java.security.AccessController;
import java.security.Provider;
public final class JSSEProvider extends Provider {
public JSSEProvider() {
super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");
AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() {
public Void run() {
put("SSLContext.TLS",
"org.apache.harmony.xnet.provider.jsse.SSLContextImpl");
put("Alg.Alias.SSLContext.TLSv1", "TLS");
put("KeyManagerFactory.X509",
"org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl");
put("TrustManagerFactory.X509",
"org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl");
return null;
}
});
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:id="@+id/send_email"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/Send_Email" />
</LinearLayout>
AndroidMenifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hassnainmunir.email" >
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".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>
Strings.xml
<resources>
<string name="app_name">Email</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="Send_Email">Send Email</string>
</resources>
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "22.0.0"
defaultConfig {
applicationId "com.example.hassnainmunir.email"
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.0.0'
compile files('libs/activation.jar')
}
你能帮我找出我做错的地方吗?
因为我被困在那里已经三天了。而且收不到邮件。
这不是您问题的答案,但我认为它可能会有所帮助
看看这个 https://mandrillapp.com/api/docs/
我在我的应用程序中使用 mandrill api 发送电子邮件
首先,您在 mandrill 网站上创建帐户,然后填写电子邮件中应包含的数据 json 格式,就像您在 link https://mandrillapp.com/api/docs/messages.html#method=send
中看到的那样然后执行 HTTP POST 包含你的 json 到这个 uri 的请求:https://mandrillapp.com/api/1.0/messages/send.json
实施
//**********Method to send email
public void sendEmail(){
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPostExecute(Void result) {
Toast.makeText(MainActivity.this,
"Your message was sent successfully.",
Toast.LENGTH_SHORT).show();
super.onPostExecute(result);
}
@Override
protected Void doInBackground(Void... params) {
String respond = POST(
URL,
makeMandrillRequest(fromEmail.getText()
.toString(), toEmail.getText()
.toString(), name.getText()
.toString(), text.getText()
.toString(), htmlText.getText()
.toString()));
Log.d("respond is ", respond);
return null;
}
}.execute();
}
//*********method to post json to uri
public String POST(String url , JSONObject jsonObject) {
InputStream inputStream = null;
String result = "";
try {
Log.d("internet json ", "In post Method");
// 1. create HttpClient
DefaultHttpClient httpclient = new DefaultHttpClient();
// 2. make POST request to the given URL
HttpPost httpPost = new HttpPost(url);
String json = "";
// 3. convert JSONObject to JSON to String
json = jsonObject.toString();
StringEntity se = new StringEntity(json);
// 4. set httpPost Entity
httpPost.setEntity(se);
// 5. Set some headers to inform server about the type of the
// content
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
// 6. Execute POST request to the given URL
HttpResponse httpResponse = httpclient.execute(httpPost);
// 7. receive response as inputStream
inputStream = httpResponse.getEntity().getContent();
// 8. convert inputstream to string
if(inputStream != null){
result = convertStreamToString(inputStream);
}else{
result = "Did not work!";
Log.d("json", "Did not work!" );
}
} catch (Exception e) {
Log.d("InputStream", e.toString());
}
// 9. return result
return result;
}
//*****************TO create email json
private JSONObject makeMandrillRequest(String from, String to, String name,
String text, String htmlText) {
JSONObject jsonObject = new JSONObject();
JSONObject messageObj = new JSONObject();
JSONArray toObjArray = new JSONArray();
JSONArray imageObjArray = new JSONArray();
JSONObject imageObjects = new JSONObject();
JSONObject toObjects = new JSONObject();
try {
jsonObject.put("key", "********************");
messageObj.put("html", htmlText);
messageObj.put("text", text);
messageObj.put("subject", "testSubject");
messageObj.put("from_email", from);
messageObj.put("from_name", name);
messageObj.put("track_opens", true);
messageObj.put("tarck_clicks", true);
messageObj.put("auto_text", true);
messageObj.put("url_strip_qs", true);
messageObj.put("preserve_recipients", true);
toObjects.put("email", to);
toObjects.put("name", name);
toObjects.put("type", "to");
toObjArray.put(toObjects);
messageObj.put("to", toObjArray);
if (encodedImage != null) {
imageObjects.put("type", "image/png");
imageObjects.put("name", "IMAGE");
imageObjects.put("content", encodedImage);
imageObjArray.put(imageObjects);
messageObj.put("images", imageObjArray);
}
jsonObject.put("message", messageObj);
jsonObject.put("async", false);
Log.d("Json object is ", " " + jsonObject);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonObject;
}
还要检查这个 library ,它可以使实施起来更容易。
您的 GMailSender.java 代码充满了这些 common JavaMail mistakes。
确保您使用的是 latest version of JavaMail。
您不需要 ByteArrayDataSource 因为 JavaMail includes it.
要了解您的邮件发生了什么,启用 JavaMail Session debugging 会有所帮助。调试输出可能会提供一些线索。
但实际上,您应该考虑从客户端应用程序发送电子邮件是否是正确的方法。如果您的客户端应用程序正在与您的网站进行某种 "signup activity" 交互,那么作为服务器上 activity 的结果发送电子邮件会好得多。要在客户端执行此操作,您需要将 Gmail 帐户的密码硬连接到客户端,或者您需要向应用程序的用户询问他们的 Gmail 帐户和密码。
我认为你需要做两件事: 1. 在异步任务中添加所有网络代码,因为 android 支持单线程模型。因此,如果您直接 运行 在主线程 ui 上发送电子邮件,这可能会冻结您的应用程序。 2. 您可以使用检查您的 gmail 设置,在那里您可以启用您的安全。这样您就可以从应用程序接收它。如果您有兴趣使用 java 库发送电子邮件,请点击以下链接。 http://www.javatpoint.com/java-mail-api-tutorial