问题描述
我试图发送电子邮件而无需用户交互。每一件事情一直工作到一部分发送。
这是在Gmailsender类的sendemail功能,我使用
公共无效sendEmail()抛出MessagingException
{
Log.i(检查,开始);字符串主机=smtp.gmail.com;
从=blabla@gmail.com字符串; //发件人电子邮件,这是我们网站的电子邮件
字符串传递=blablabla; //发送电子邮件的密码属性道具= System.getProperties();
props.put(mail.smtp.starttls.enable,真); //加入这一行
props.put(mail.smtp.host,主机);
props.put(mail.smtp.user,从);
props.put(mail.smtp.password,通过);
props.put(mail.smtp.port,587);
props.put(mail.smtp.auth,真);
Log.i(检查,完成啪啪);
//创建会话
会话的会话=作为Session.getDefaultInstance(道具,NULL);
的MimeMessage消息=新的MimeMessage(会话);
message.setFrom(新网际地址(从));
Log.i(检查,完成会话);网际地址的toAddress;
的toAddress =新的网际地址(至);
message.addRecipient(Message.RecipientType.TO,的toAddress);
Log.i(检查,增加recipante);message.setSubject(一级学科);
message.setText(这是我的应用程序);
Log.i(检查,交通);交通运输= session.getTransport(SMTP);// ..连接
Log.i(检查,连接);
transport.connect(主机,从,通);
//发送...
Log.i(检查,送瓦纳);
transport.sendMessage(消息,message.getAllRecipients());
transport.close();
Log.i(检查,派);
}
日志想送不会出现。
这是我创造从gmailSender对象主要活动有以下code:
发送=(按钮)this.findViewById(R.id.button1);
send.setOnClickListener(新View.OnClickListener(){
公共无效的onClick(视图v){
// TODO自动生成方法存根
尝试{
GMailSender发件人=新GMailSender(blabla@gmail.com,blablabla);
Log.e(检查,测试1);
sender.sendEmail();
Log.e(DEBUG_TAG,测试2);
}赶上(例外五){
Log.e(DEBUG_TAG,测试3); }
我收到测试3记录,这意味着异常发生。
其结果是,邮件不发送和应用程序被卡住......我不知道什么是错误的。
请注意:我加入了Internet权限+我加的jar文件
在logcat的是
12月12日至25日:55:00.774:E /检查(1350):1测试
12月12日至25日:55:00.774:I /检查(1350年):启动
12月12日至25日:55:00.774:I /检查(1350):做持久性有机污染物
12月12日至25日:55:00.774:I /检查(1350年):完成会议
12月12日至25日:55:00.774:I /检查(1350):添加recipante
12月12日至25日:55:00.779:I /检查(1350):运输
12月12日至25日:55:00.789:I /检查(1350):连接
12月12日至25日:55:00.789:E /检查(1350):测试3
这是检查标签全logcat的:
12-25 13:20:18.698:E /检查(5547):1测试
12-25 13:20:18.698:I /检查(5547):启动
12-25 13:20:18.698:I /检查(5547):做持久性有机污染物
12-25 13:20:18.723:I /检查(5547):做会议
12-25 13:20:18.723:I /检查(5547):添加recipante
12-25 13:20:18.723:I /检查(5547):运输
12-25 13:20:18.733:I /检查(5547):连接
12-25 13:20:18.758:E /检查(5547):Ljava.lang.StackTraceElement; @ 4193bb00
12-25 13:20:18.758:E /检查(5547):android.os.NetworkOnMainThreadException
12-25 13:20:18.758:E /检查(5547):在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
12-25 13:20:18.758:E /检查(5547):在java.net.InetAddress.lookupHostByName(InetAddress.java:391)
12-25 13:20:18.758:E /检查(5547):在java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
12-25 13:20:18.758:E /检查(5547):在java.net.InetAddress.getByName(InetAddress.java:295)
12-25 13:20:18.758:E /检查(5547):在java.net.InetSocketAddress<&初始化GT;(InetSocketAddress.java:105)。
12-25 13:20:18.758:E /检查(5547):在java.net.InetSocketAddress<&初始化GT;(InetSocketAddress.java:90)。
12-25 13:20:18.758:E /检查(5547):在com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233)
12-25 13:20:18.758:E /检查(5547):在com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
12-25 13:20:18.758:E /检查(5547):在com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1359)
12-25 13:20:18.758:E /检查(5547):在com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)
12-25 13:20:18.758:E /检查(5547):在javax.mail.Service.connect(Service.java:288)
12-25 13:20:18.758:E /检查(5547):在javax.mail.Service.connect(Service.java:169)
12-25 13:20:18.758:E /检查(5547):在com.example.sendmail.GMailSender.sendEmail(GMailSender.java:100)
12-25 13:20:18.758:E /检查(5547):在com.example.sendmail.MailSenderActivity $ 1.onClick(MailSenderActivity.java:31)
12-25 13:20:18.758:E /检查(5547):在android.view.View.performClick(View.java:3627)
12-25 13:20:18.758:E /检查(5547):在android.view.View $ PerformClick.run(View.java:14329)
12-25 13:20:18.758:E /检查(5547):在android.os.Handler.handleCallback(Handler.java:605)
12-25 13:20:18.758:E /检查(5547):在android.os.Handler.dispatchMessage(Handler.java:92)
12-25 13:20:18.758:E /检查(5547):在android.os.Looper.loop(Looper.java:137)
12-25 13:20:18.758:E /检查(5547):在android.app.ActivityThread.main(ActivityThread.java:4511)
12-25 13:20:18.758:E /检查(5547):在java.lang.reflect.Method.invokeNative(本机方法)
12-25 13:20:18.758:E /检查(5547):在java.lang.reflect.Method.invoke(Method.java:511)
12-25 13:20:18.758:E /检查(5547):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:980)
12-25 13:20:18.758:E /检查(5547):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
12-25 13:20:18.758:E /检查(5547):在dalvik.system.NativeStart.main(本机方法)
我收到测试3记录,这意味着异常发生..
其结果是,该邮件不发送和应用程序被卡住......我不知道什么是错误..
盲假设,只要把你的邮件在的AsyncTask
发送code。我觉得你的异常的原因为 NetworkOnMainThread ..
另外张贴异常充分的堆栈跟踪。因此,我们可以进一步帮助你..
更新:
我觉得这行 transport.connect(主机,从,通);
从 sendEmail()
给你例外。
I was trying to send email without user interaction. every thing worked until the part for sending.
This is the sendemail function in the Gmailsender class that I am using
public void sendEmail() throws MessagingException
{
Log.i("check","start");
String host = "smtp.gmail.com";
String from = "blabla@gmail.com"; //sender email, this is our website email
String pass = "blablabla"; //password of sender email
Properties props = System.getProperties();
props.put("mail.smtp.starttls.enable", "true"); // added this line
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
Log.i("check","done pops ");
//creating session
Session session = Session.getDefaultInstance(props, null);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
Log.i("check","done sessions ");
InternetAddress toAddress;
toAddress = new InternetAddress(to);
message.addRecipient(Message.RecipientType.TO, toAddress);
Log.i("check","add recipante ");
message.setSubject(subject);
message.setText("This is my app");
Log.i("check","transport");
Transport transport = session.getTransport("smtp");
//connecting..
Log.i("check","connecting");
transport.connect(host, from, pass);
//sending...
Log.i("check","wana send");
transport.sendMessage(message, message.getAllRecipients());
transport.close();
Log.i("check","sent");
}
The log "wanna send" doesn't appear..
The main activity that I am creating an object from the gmailSender has the following code:
send = (Button) this.findViewById(R.id.button1);
send.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
try {
GMailSender sender = new GMailSender("blabla@gmail.com", "blablabla");
Log.e("check", "test 1");
sender.sendEmail() ;
Log.e(DEBUG_TAG, "test 2");
} catch (Exception e) {
Log.e(DEBUG_TAG, "test 3"); }
I am getting the "test 3" log which means that the exception happened..
The result is that the email is not sent and the app is stuck... I dont know what is the wrong..
NOTE: I added the internet permission + I added the jar files
The logcat is
12-25 12:55:00.774: E/check(1350): test 1
12-25 12:55:00.774: I/check(1350): start
12-25 12:55:00.774: I/check(1350): done pops
12-25 12:55:00.774: I/check(1350): done sessions
12-25 12:55:00.774: I/check(1350): add recipante
12-25 12:55:00.779: I/check(1350): transport
12-25 12:55:00.789: I/check(1350): connecting
12-25 12:55:00.789: E/check(1350): test 3
this is the whole logcat for the check tag :
12-25 13:20:18.698: E/check(5547): test 1
12-25 13:20:18.698: I/check(5547): start
12-25 13:20:18.698: I/check(5547): done pops
12-25 13:20:18.723: I/check(5547): done sessions
12-25 13:20:18.723: I/check(5547): add recipante
12-25 13:20:18.723: I/check(5547): transport
12-25 13:20:18.733: I/check(5547): connecting
12-25 13:20:18.758: E/check(5547): [Ljava.lang.StackTraceElement;@4193bb00
12-25 13:20:18.758: E/check(5547): android.os.NetworkOnMainThreadException
12-25 13:20:18.758: E/check(5547): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
12-25 13:20:18.758: E/check(5547): at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
12-25 13:20:18.758: E/check(5547): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
12-25 13:20:18.758: E/check(5547): at java.net.InetAddress.getByName(InetAddress.java:295)
12-25 13:20:18.758: E/check(5547): at java.net.InetSocketAddress.<init>(InetSocketAddress.java:105)
12-25 13:20:18.758: E/check(5547): at java.net.InetSocketAddress.<init>(InetSocketAddress.java:90)
12-25 13:20:18.758: E/check(5547): at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233)
12-25 13:20:18.758: E/check(5547): at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
12-25 13:20:18.758: E/check(5547): at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1359)
12-25 13:20:18.758: E/check(5547): at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)
12-25 13:20:18.758: E/check(5547): at javax.mail.Service.connect(Service.java:288)
12-25 13:20:18.758: E/check(5547): at javax.mail.Service.connect(Service.java:169)
12-25 13:20:18.758: E/check(5547): at com.example.sendmail.GMailSender.sendEmail(GMailSender.java:100)
12-25 13:20:18.758: E/check(5547): at com.example.sendmail.MailSenderActivity$1.onClick(MailSenderActivity.java:31)
12-25 13:20:18.758: E/check(5547): at android.view.View.performClick(View.java:3627)
12-25 13:20:18.758: E/check(5547): at android.view.View$PerformClick.run(View.java:14329)
12-25 13:20:18.758: E/check(5547): at android.os.Handler.handleCallback(Handler.java:605)
12-25 13:20:18.758: E/check(5547): at android.os.Handler.dispatchMessage(Handler.java:92)
12-25 13:20:18.758: E/check(5547): at android.os.Looper.loop(Looper.java:137)
12-25 13:20:18.758: E/check(5547): at android.app.ActivityThread.main(ActivityThread.java:4511)
12-25 13:20:18.758: E/check(5547): at java.lang.reflect.Method.invokeNative(Native Method)
12-25 13:20:18.758: E/check(5547): at java.lang.reflect.Method.invoke(Method.java:511)
12-25 13:20:18.758: E/check(5547): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
12-25 13:20:18.758: E/check(5547): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
12-25 13:20:18.758: E/check(5547): at dalvik.system.NativeStart.main(Native Method)
I am getting the "test 3" log which means that the exception happened..
The result is that the email is not sent and the app is stuck... I dont know what is the wrong..
Blind assumption, Just Put your Mail sending code in AsyncTask
. I think the reason for your Exception is NetworkOnMainThread..
Also post the full stacktrace of Exception. So we can further help you..
Update:
I think this line transport.connect(host, from, pass);
from sendEmail()
gives you Exception.
这篇关于发送电子邮件而无需用户交互的Android的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!