Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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
Android中使用Javamail的自动电子邮件_Java_Android_Jakarta Mail - Fatal编程技术网

Android中使用Javamail的自动电子邮件

Android中使用Javamail的自动电子邮件,java,android,jakarta-mail,Java,Android,Jakarta Mail,我正在尝试自动发送电子邮件,在我的Android应用程序中没有用户确认。我正在尝试使用Javamail,但当我在手机上尝试我的应用程序时,它与典型的“应用程序停止,再次打开”Android消息非常接近。 我的代码是: 发送邮件类别: package com.android.mdw.demo; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import

我正在尝试自动发送电子邮件,在我的Android应用程序中没有用户确认。我正在尝试使用Javamail,但当我在手机上尝试我的应用程序时,它与典型的“应用程序停止,再次打开”Android消息非常接近。 我的代码是:

发送邮件类别:

package com.android.mdw.demo;

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import android.util.Log;

public class EnviarEmail {
    public static String emailEnvio = "XXX@gmail.com";
    public static String passwordEmailEnvio = "@XXX";

    public void EnviarEmail(String Mensaje, String Asunto, String email) {
        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "587");

        Session session = Session.getInstance(props,
                new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(emailEnvio, passwordEmailEnvio);
                    }
                });

        try {

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(emailEnvio));
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse(email));
            message.setSubject(Asunto);
            message.setText(Mensaje);

            Transport.send(message);

        } catch (MessagingException e) {
            Log.w("ERROR", "No se ha podido enviar el email de confirmación.");
        }
    }
}
package com.android.mdw.demo;

public class EmailAviso {
    public void EmailAviso ()  {
        String Mensaje = "CUERPO";
        String Asunto = "ASUNTO";
        String email = "AQUIENVA@gmail.com";

        EnviarEmail EnviarEmail = new EnviarEmail();
        EnviarEmail.EnviarEmail(Mensaje, Asunto, email);

    }
}
通知邮件类别:

package com.android.mdw.demo;

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import android.util.Log;

public class EnviarEmail {
    public static String emailEnvio = "XXX@gmail.com";
    public static String passwordEmailEnvio = "@XXX";

    public void EnviarEmail(String Mensaje, String Asunto, String email) {
        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "587");

        Session session = Session.getInstance(props,
                new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(emailEnvio, passwordEmailEnvio);
                    }
                });

        try {

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(emailEnvio));
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse(email));
            message.setSubject(Asunto);
            message.setText(Mensaje);

            Transport.send(message);

        } catch (MessagingException e) {
            Log.w("ERROR", "No se ha podido enviar el email de confirmación.");
        }
    }
}
package com.android.mdw.demo;

public class EmailAviso {
    public void EmailAviso ()  {
        String Mensaje = "CUERPO";
        String Asunto = "ASUNTO";
        String email = "AQUIENVA@gmail.com";

        EnviarEmail EnviarEmail = new EnviarEmail();
        EnviarEmail.EnviarEmail(Mensaje, Asunto, email);

    }
}
摘自主类:

boolean PRUEBA=true;
boolean PRUEBA1=true;

if(PRUEBA==true && PRUEBA1==true) {
EmailAviso EmailAviso = new EmailAviso();
EmailAviso.EmailAviso();
}
我收到的日志如下:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.android.mdw.demo, PID: 18001
    android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303)
        at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:86)
        at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74)
        at java.net.InetAddress.getLocalHost(InetAddress.java:816)
        at javax.mail.internet.InternetAddress.getLocalAddress(InternetAddress.java:517)
        at javax.mail.internet.UniqueValue.getUniqueMessageIDValue(UniqueValue.java:99)
        at javax.mail.internet.MimeMessage.updateMessageID(MimeMessage.java:2054)
        at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:2076)
        at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:2042)
        at javax.mail.Transport.send(Transport.java:117)
        at com.android.mdw.demo.EnviarEmail.EnviarEmail(EnviarEmail.java:41)
        at com.android.mdw.demo.EmailAviso.EmailAviso(EmailAviso.java:10)
        at com.android.mdw.demo.Main.onSensorChanged(Main.java:77)
        at android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManager.java:699)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:323)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:6077)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

您试图从主线程发送电子邮件,这是不允许的,请尝试创建单独的工作线程来发送电子邮件。尝试以下方法:

    new Thread(new Runnable() {
        @Override
        public void run() {
            if(PRUEBA==true && PRUEBA1==true) {
               EmailAviso EmailAviso = new EmailAviso();
               EmailAviso.EmailAviso();
            }
        }
    }).start();

您试图从主线程发送电子邮件,这是不允许的,请尝试创建单独的工作线程来发送电子邮件。尝试以下方法:

    new Thread(new Runnable() {
        @Override
        public void run() {
            if(PRUEBA==true && PRUEBA1==true) {
               EmailAviso EmailAviso = new EmailAviso();
               EmailAviso.EmailAviso();
            }
        }
    }).start();

从Android直接发送电子邮件被认为是一种不好的做法,因为您必须将电子邮件和密码存储在源代码中,而简单的APK会损害凭据

如果您希望在不与用户交互的情况下发送电子邮件,则必须使用外部
API
来发送邮件,或者必须使用任何服务器堆栈(如
PHP
nodejs
JSP
等)开发自己的API

我创建了一个名为的简单库来解决这个问题。您所要做的就是从中获取
API密钥
,并像这样使用它


抱歉,文档太少了。请随意在评论中提出疑问

直接从Android发送电子邮件被认为是一种不好的做法,因为您必须将电子邮件和密码存储在源代码中,而简单的
APK
decomile可能会破坏凭据

如果您希望在不与用户交互的情况下发送电子邮件,则必须使用外部
API
来发送邮件,或者必须使用任何服务器堆栈(如
PHP
nodejs
JSP
等)开发自己的API

我创建了一个名为的简单库来解决这个问题。您所要做的就是从中获取
API密钥
,并像这样使用它


抱歉,文档太少了。请随意在评论中提出疑问

如果您试图从不允许的主线程发送电子邮件,请尝试创建单独的工作线程以发送电子邮件。如果您试图从不允许的主线程发送电子邮件,则没有用户权限,则无法发送邮件,尝试创建单独的工作线程来发送电子邮件。每次我执行我的应用程序时,当到达线程的行时,它将关闭。。。为什么?每次我执行我的应用程序,当到达线程行时,它就关闭了。。。为什么?