发送电​​子邮件而无需用户交互的Andr​​oid [英] sending email without user interaction android

查看:165
本文介绍了发送电​​子邮件而无需用户交互的Andr​​oid的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图发送电子邮件而无需用户交互。每一件事情一直工作到一部分发送。

这是在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.

这篇关于发送电​​子邮件而无需用户交互的Andr​​oid的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆