Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javamail for Android发送电子邮件_Android_Jakarta Mail - Fatal编程技术网

使用Javamail for Android发送电子邮件

使用Javamail for Android发送电子邮件,android,jakarta-mail,Android,Jakarta Mail,以下是我正在使用的代码: 错误似乎出现在GMail.sendMail行中,传输尝试使用有效的用户名和密码连接到GMail 我似乎找不到任何方法来解决这个问题,这很奇怪,因为大约一个月前,这个代码工作得很好 调试: 04-23 21:21:41.526: I/System.out(27546): DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,

以下是我正在使用的代码:

错误似乎出现在GMail.sendMail行中,传输尝试使用有效的用户名和密码连接到GMail

我似乎找不到任何方法来解决这个问题,这很奇怪,因为大约一个月前,这个代码工作得很好

调试:

 04-23 21:21:41.526: I/System.out(27546): DEBUG: getProvider() returning  javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport, Sun   Microsystems, Inc.,1.4.1]
 04-23 21:21:41.526: I/System.out(27546): DEBUG SMTP: useEhlo true, useAuth true 
 04-23 21:21:41.526: I/System.out(27546): DEBUG SMTP: trying to connect to host  "smtp.gmail.com", port 587, isSSL false
 04-23 21:21:41.526: D/AndroidRuntime(27546): Shutting down VM
日志:

04-23 21:25:53.651: E/AndroidRuntime(28125): java.lang.IllegalStateException: Could not execute method of the activity
04-23 21:25:53.651: E/AndroidRuntime(28125): Caused by:java.lang.reflect.InvocationTargetException
04-23 21:25:53.651: E/AndroidRuntime(28125): at  android.view.View$1.onClick(View.java:3964) This is clicking a button
04-23 21:25:53.651: E/AndroidRuntime(28125): Caused by: android.os.NetworkOnMainThreadException
04-23 21:25:53.651: E/AndroidRuntime(28125): at  com.javapapers.android.androidjavamail.GMail.sendEmail(GMail.java:74)
谢谢大家

应用程序中出现“NetworkOnMainThreadException”。您必须在后台线程上实现任何网络操作。如果您在活动、服务等主线程上工作,可能会产生ANR。请使用“AsyncTask”或“IntentService”发送电子邮件

请看这个答案。

如果遇到此问题,则应检查api级别-

Till Donut用于从1.6-2.3创建您以前使用的多个线程 但如果您现在使用的是3.0或更高版本,那么它将用于创建单线程模型 使用AsyncTask,否则将获得NetworkOnMainThreadException。

1。使用InvocationTargetException上的getCause()方法检索原始异常

you got this exception due to:

  (i)List all jar files from the Eclipse Navigator mode

  (ii)Verify that all the jar files are in binary mode.
2.来自Method.invoke()的Javadoc

如果调用的方法引发异常,则会引发此异常

you got this exception due to:

  (i)List all jar files from the Eclipse Navigator mode

  (ii)Verify that all the jar files are in binary mode.
3.您可以使用以下代码从您的android客户端发送电子邮件

 import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Properties;
import javax.mail.Authenticator;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;
public class EMailSender {
public EMailSender(String host, final String from, final String pass, String to, String  sub, String mess) throws Exception {
Properties props = System.getProperties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
Authenticator auth = new Authenticator() {

protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(from, pass);
}};
Session session = Session.getInstance(props, auth);
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
message.setSubject(sub);
message.setText(mess);
Transport.send(message);
}

public static void main(String arg[]) throws Exception {
if(arg.length == 5) {
StringBuilder message = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String temp = "", subject;
System.out.print("Enter subject: ");
subject = br.readLine();
System.out.println("Enter the message (end it with a . on a single line):");
while((temp = br.readLine()) != null) {
if(temp.equals("."))
break;
message.append(temp+"\n");
}
System.out.println("Sending message...");
new EMailSender(arg[0], arg[1], arg[2], arg[3], subject, message.toString());
System.out.println("Sent the message.");
  }
else System.err.println("Usage:\njava SendTextMail <host> <port> <from> <pass> <to>");
}
}
导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入java.util.Properties;
导入javax.mail.Authenticator;导入javax.mail.Message;
导入javax.mail.PasswordAuthentication;
导入javax.mail.Session;
导入javax.mail.Transport;
导入javax.mail.internet.InternetAddress;
导入javax.mail.internet.mimessage;
公共类电子邮件发送者{
公共EMailSender(字符串主机、最终字符串发件人、最终字符串传递、字符串收件人、字符串子项、字符串混乱)引发异常{
Properties props=System.getProperties();
props.put(“mail.smtp.auth”,“true”);
props.put(“mail.smtp.starttls.enable”、“true”);
props.put(“mail.smtp.host”,host);
Authenticator auth=新的验证器(){
受保护的密码身份验证getPasswordAuthentication(){
返回新的PasswordAuthentication(from,pass);
}};
Session Session=Session.getInstance(props,auth);
Message Message=新的mimessage(会话);
message.setFrom(新的InternetAddress(from));
setRecipients(message.RecipientType.TO,InternetAddress.parse(TO));
message.setSubject(sub);
message.setText(mess);
传输。发送(消息);
}
公共静态void main(字符串arg[])引发异常{
如果(arg.length==5){
StringBuilder消息=新建StringBuilder();
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
字符串temp=”,主题;
系统输出打印(“输入主题:”);
subject=br.readLine();
System.out.println(“输入消息(在单行上以.结尾):”;
而((temp=br.readLine())!=null){
如果(温度等于(“.”)
打破
message.append(temp+“\n”);
}
System.out.println(“发送消息…”);
新的EMailSender(arg[0],arg[1],arg[2],arg[3],主题,message.toString());
System.out.println(“发送消息”);
}
else System.err.println(“用法:\njava SendTextMail”);
}
}
单击按钮,在活动中调用该类的构造函数。