JavaMail API获取NullpointerException

JavaMail API获取NullpointerException,java,android,email,Java,Android,Email,我正在尝试在不使用电子邮件客户端的情况下发送电子邮件。所以我尝试了一些教程中给出的代码。但是,当我尝试发送电子邮件时,总是会在transport.connect()方法上出现NullPointerException,发送失败 我的代码 package com.example.app; import java.io.UnsupportedEncodingException; import java.util.List; import java.util.Properties; import

我正在尝试在不使用电子邮件客户端的情况下发送电子邮件。所以我尝试了一些教程中给出的代码。但是,当我尝试发送电子邮件时,总是会在
transport.connect()
方法上出现
NullPointerException
,发送失败

我的代码

package com.example.app;


import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Properties;

import javax.mail.AuthenticationFailedException;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import android.util.Log;

public class GMail {

    final String emailPort = "587";// gmail's smtp port
    final String smtpAuth = "true";
    final String starttls = "true";
    final String emailHost = "smtp.gmail.com";
    // final String fromUser = "****";
    // final String fromUserEmailPassword = "****";

    String fromEmail;
    String fromPassword;
    List<String> toEmailList;
    String emailSubject;
    String emailBody;

    Properties emailProperties;
    Session mailSession;
    MimeMessage emailMessage;

    public GMail() {

    }

    public GMail(String fromEmail, String fromPassword,
            List<String> toEmailList, String emailSubject, String emailBody) {
        this.fromEmail = fromEmail;
        this.fromPassword = fromPassword;
        this.toEmailList = toEmailList;
        this.emailSubject = emailSubject;
        this.emailBody = emailBody;

        emailProperties = System.getProperties();
        emailProperties.put("mail.smtp.port", emailPort);
        emailProperties.put("mail.smtp.auth", smtpAuth);
        emailProperties.put("mail.smtp.starttls.enable", starttls);
        Log.i("GMail", "Mail server properties set.");
    }

    public MimeMessage createEmailMessage() throws AddressException,
            MessagingException, UnsupportedEncodingException {

        mailSession = Session.getInstance(emailProperties, null);
        emailMessage = new MimeMessage(mailSession);

        emailMessage.setFrom(new InternetAddress(fromEmail, fromEmail));
        for (String toEmail : toEmailList) {
            Log.i("GMail","toEmail: "+toEmail);
            emailMessage.addRecipient(Message.RecipientType.TO,
                    new InternetAddress(toEmail));
        }

        emailMessage.setSubject(emailSubject);
        emailMessage.setContent(emailBody, "text/html");// for a html email
//      emailMessage.setText(emailBody);// for a text email
        Log.i("GMail", "Email Message created.");
        return emailMessage;
    }

    public void sendEmail() throws AddressException, MessagingException, AuthenticationFailedException {
        try{
            Transport transport = mailSession.getTransport("smtp");
            Log.i("GMail", "Transport created");
            transport.connect(emailHost, fromEmail, fromPassword);
            Log.i("GMail","allrecipients: "+emailMessage.getAllRecipients());
            transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
            transport.close();
            Log.i("GMail", "Email sent successfully.");
        }
        catch(Exception e){
            Log.i("GMail", "Exception " + e.getMessage());
        }
    }

}
在这个活动中,我调用
sendMail()

忽略“邮件已发送”日志,因为我只捕获异常而不进行任何干预

编辑: e、 异常处理程序中的printStackTrace()提供:

08-28 10:06:04.317: I/GMail(5439): Exception null
08-28 10:06:04.317: W/System.err(5439): javax.mail.AuthenticationFailedException
08-28 10:06:04.317: W/System.err(5439):     at javax.mail.Service.connect(Service.java:319)
08-28 10:06:04.317: W/System.err(5439):     at com.example.app.GMail.sendEmail(GMail.java:82)
08-28 10:06:04.367: W/System.err(5439):     at com.example.app.SendMailTask.doInBackground(SendMailTask.java:40)
08-28 10:06:04.427: W/System.err(5439):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
08-28 10:06:04.437: W/System.err(5439):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-28 10:06:04.447: W/System.err(5439):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
08-28 10:06:04.447: W/System.err(5439):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
08-28 10:06:04.447: W/System.err(5439):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
08-28 10:06:04.497: W/System.err(5439):     at java.lang.Thread.run(Thread.java:841)
因此,我建议使用
transport.connect()-方法中的问题

编辑2:使用mailSession.setDebug(true):

08-2811:19:34.664:I/GMail(9492):创建电子邮件。
08-28 11:19:34.674:I/System.out(9492):调试:getProvider()返回javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,sun Microsystems,Inc.,1.4.1]
08-28 11:19:34.684:I/GMail(9492):已创建传输
08-28 11:19:34.684:I/GMail(9492):主机smtp.GMail.com
08-28 11:19:34.684:I/GMail(9492):用户名xxxx
08-28 11:19:34.734:I/GMail(9492):pwd xxxx
08-28 11:19:34.744:I/System.out(9492):调试SMTP:useEhlo true,useAuth true
08-28 11:19:34.744:I/System.out(9492):调试SMTP:尝试连接到主机“SMTP.gmail.com”,端口587,isSSL false
08-28 11:19:35.824:I/System.out(9492):220 mx.google.com ESMTP wr10sm10759961wjc.10-gsmtp
08-28 11:19:35.894:I/System.out(9492):调试SMTP:已连接到主机“SMTP.gmail.com”,端口:587
08-28 11:19:35.964:I/System.out(9492):EHLO本地主机
08-28 11:19:36.014:I/System.out(9492):250-mx.google.com随时为您服务,[158.181.68.197]
08-28 11:19:36.024:I/System.out(9492):250-SIZE 35882577
08-28 11:19:36.034:I/System.out(9492):250-8BITMIME
08-28 11:19:36.034:输入/系统输出(9492):250-STARTTLS
08-28 11:19:36.034:I/System.out(9492):250-EnhancedStatus代码
08-28 11:19:36.034:I/系统输出(9492):250-流水线
08-2811:19:36.034:I/System.out(9492):250-CHUNKING
08-28 11:19:36.084:I/System.out(9492):250 SMTPUTF8
08-28 11:19:36.094:I/System.out(9492):调试SMTP:找到扩展名“SIZE”,arg“35882577”
08-28 11:19:36.094:I/System.out(9492):调试SMTP:找到扩展名“8BITMIME”,arg“”
08-28 11:19:36.104:I/System.out(9492):调试SMTP:找到扩展名“STARTTLS”,arg“”
08-28 11:19:36.154:I/System.out(9492):调试SMTP:找到扩展名“ENHANCEDSTATUSCODES”,arg“”
08-28 11:19:36.164:I/System.out(9492):调试SMTP:找到扩展名“Pipeline”,arg“”
08-28 11:19:36.164:I/System.out(9492):调试SMTP:找到扩展名“CHUNKING”,arg“”
08-28 11:19:36.164:I/System.out(9492):调试SMTP:找到扩展名“SMTPUTF8”,arg“”
08-28 11:19:36.214:输入/系统输出(9492):开始
08-28 11:19:36.284:I/System.out(9492):220 2.0.0准备启动TLS
08-28 11:19:38.214:I/System.out(9492):EHLO本地主机
08-28 11:19:38.264:I/System.out(9492):250-mx.google.com随时为您服务,[158.181.68.197]
08-28 11:19:38.274:I/System.out(9492):250-SIZE 35882577
08-28 11:19:38.274:I/System.out(9492):250-8BITMIME
08-28 11:19:38.274:I/System.out(9492):250-AUTH登录普通XOAUTH XOAUTH2普通客户端令牌
08-28 11:19:38.274:I/System.out(9492):250-ENHANCEDSTATUSCODES
08-28 11:19:38.274:I/System.out(9492):250-流水线
08-2811:19:38.274:I/System.out(9492):250-CHUNKING
08-28 11:19:38.334:I/System.out(9492):250 SMTPUTF8
08-28 11:19:38.344:I/System.out(9492):调试SMTP:找到扩展名“SIZE”,arg“35882577”
08-28 11:19:38.344:I/System.out(9492):调试SMTP:找到扩展名“8BITMIME”,arg“”
08-28 11:19:38.394:I/System.out(9492):调试SMTP:找到扩展名“AUTH”,arg“LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN”
08-28 11:19:38.424:I/System.out(9492):调试SMTP:找到扩展名“ENHANCEDSTATUSCODES”,arg“”
08-28 11:19:38.444:I/System.out(9492):调试SMTP:找到扩展名“Pipeline”,arg“”
08-28 11:19:38.444:I/System.out(9492):调试SMTP:找到扩展名“CHUNKING”,arg“”
08-28 11:19:38.444:I/System.out(9492):调试SMTP:找到扩展名“SMTPUTF8”,arg“”
08-28 11:19:38.444:I/System.out(9492):调试SMTP:尝试验证
08-28 11:19:38.504:I/System.out(9492):验证登录
08-28 11:19:38.614:I/系统输出(9492):334 VXNlcm5hbWU6
08-28 11:19:38.614:I/System.out(9492):ZWIxNG1zQGdvb2dsZW1haWwuY29t
08-28 11:19:38.674:I/System.out(9492):334 UGFzc3dvcmQ6
08-28 11:19:38.704:I/System.out(9492):RkZ3UzIwMDM=
08-28 11:19:39.044:I/System.out(9492):534-5.7.14请通过web浏览器登录,然后重试。
08-28 11:19:39.144:I/System.out(9492):534-5.7.14了解更多信息,请访问
08-2811:19:39.164:I/System.out(9492):5345.7.14https://support.google.com/mail/bin/answer.py?answer=78754 wr10sm10759961wjc.10-gsmtp
08-28 11:19:39.314:I/GMail(9492):异常为空

似乎gmail可以选择阻止脚本访问,您可以通过以下方式启用:

。它应该处于异常活动状态

编辑:

您正在使用tls(
端口587,isSSL false

尝试通过ssl连接,然后:

Properties emailProperties = new Properties();
emailProperties.put("mail.smtp.host", "smtp.gmail.com");
emailProperties.put("mail.smtp.auth", "true");
emailProperties.put("mail.smtp.port", "465");
emailProperties.put("mail.smtp.socketFactory.port", "465");
emailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

希望这能解决您的问题。

使用
e.printStackTrace()或者这可能是一个问题,因为我在模拟器中运行此代码?使用了INTERNET权限。在连接之前,请尝试从电子邮件打印
从密码打印
,看看是否正确。好的,我检查过了。用户名、主机、pwd正确…启用调试消息:
mailSession.setDebug(true)并发布日志。您已经精疲力竭了。当我在我的gooogle账户上启用“不安全连接”时,它就起作用了。但我该怎么做,我不需要这个?这是SSL加密的问题吗?事实上,我没有使用一些情感管理器。。。
08-28 09:42:59.456: I/GMail(4304): Email Message created.
08-28 09:42:59.846: I/GMail(4304): Transport created
08-28 09:43:02.846: I/GMail(4304): Exception null
08-28 09:43:02.846: I/SendMailTask(4304): Mail Sent.
08-28 10:06:04.317: I/GMail(5439): Exception null
08-28 10:06:04.317: W/System.err(5439): javax.mail.AuthenticationFailedException
08-28 10:06:04.317: W/System.err(5439):     at javax.mail.Service.connect(Service.java:319)
08-28 10:06:04.317: W/System.err(5439):     at com.example.app.GMail.sendEmail(GMail.java:82)
08-28 10:06:04.367: W/System.err(5439):     at com.example.app.SendMailTask.doInBackground(SendMailTask.java:40)
08-28 10:06:04.427: W/System.err(5439):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
08-28 10:06:04.437: W/System.err(5439):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-28 10:06:04.447: W/System.err(5439):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
08-28 10:06:04.447: W/System.err(5439):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
08-28 10:06:04.447: W/System.err(5439):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
08-28 10:06:04.497: W/System.err(5439):     at java.lang.Thread.run(Thread.java:841)
08-28 11:19:34.664: I/GMail(9492): Email Message created.
08-28 11:19:34.674: I/System.out(9492): DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc.,1.4.1]
08-28 11:19:34.684: I/GMail(9492): Transport created
08-28 11:19:34.684: I/GMail(9492): host smtp.gmail.com
08-28 11:19:34.684: I/GMail(9492): user name xxxx
08-28 11:19:34.734: I/GMail(9492): pwd xxxx
08-28 11:19:34.744: I/System.out(9492): DEBUG SMTP: useEhlo true, useAuth true
08-28 11:19:34.744: I/System.out(9492): DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
08-28 11:19:35.824: I/System.out(9492): 220 mx.google.com ESMTP wr10sm10759961wjc.10 - gsmtp
08-28 11:19:35.894: I/System.out(9492): DEBUG SMTP: connected to host "smtp.gmail.com", port: 587
08-28 11:19:35.964: I/System.out(9492): EHLO localhost
08-28 11:19:36.014: I/System.out(9492): 250-mx.google.com at your service, [158.181.68.197]
08-28 11:19:36.024: I/System.out(9492): 250-SIZE 35882577
08-28 11:19:36.034: I/System.out(9492): 250-8BITMIME
08-28 11:19:36.034: I/System.out(9492): 250-STARTTLS
08-28 11:19:36.034: I/System.out(9492): 250-ENHANCEDSTATUSCODES
08-28 11:19:36.034: I/System.out(9492): 250-PIPELINING
08-28 11:19:36.034: I/System.out(9492): 250-CHUNKING
08-28 11:19:36.084: I/System.out(9492): 250 SMTPUTF8
08-28 11:19:36.094: I/System.out(9492): DEBUG SMTP: Found extension "SIZE", arg "35882577"
08-28 11:19:36.094: I/System.out(9492): DEBUG SMTP: Found extension "8BITMIME", arg ""
08-28 11:19:36.104: I/System.out(9492): DEBUG SMTP: Found extension "STARTTLS", arg ""
08-28 11:19:36.154: I/System.out(9492): DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
08-28 11:19:36.164: I/System.out(9492): DEBUG SMTP: Found extension "PIPELINING", arg ""
08-28 11:19:36.164: I/System.out(9492): DEBUG SMTP: Found extension "CHUNKING", arg ""
08-28 11:19:36.164: I/System.out(9492): DEBUG SMTP: Found extension "SMTPUTF8", arg ""
08-28 11:19:36.214: I/System.out(9492): STARTTLS
08-28 11:19:36.284: I/System.out(9492): 220 2.0.0 Ready to start TLS
08-28 11:19:38.214: I/System.out(9492): EHLO localhost
08-28 11:19:38.264: I/System.out(9492): 250-mx.google.com at your service, [158.181.68.197]
08-28 11:19:38.274: I/System.out(9492): 250-SIZE 35882577
08-28 11:19:38.274: I/System.out(9492): 250-8BITMIME
08-28 11:19:38.274: I/System.out(9492): 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN
08-28 11:19:38.274: I/System.out(9492): 250-ENHANCEDSTATUSCODES
08-28 11:19:38.274: I/System.out(9492): 250-PIPELINING
08-28 11:19:38.274: I/System.out(9492): 250-CHUNKING
08-28 11:19:38.334: I/System.out(9492): 250 SMTPUTF8
08-28 11:19:38.344: I/System.out(9492): DEBUG SMTP: Found extension "SIZE", arg "35882577"
08-28 11:19:38.344: I/System.out(9492): DEBUG SMTP: Found extension "8BITMIME", arg ""
08-28 11:19:38.394: I/System.out(9492): DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN"
08-28 11:19:38.424: I/System.out(9492): DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
08-28 11:19:38.444: I/System.out(9492): DEBUG SMTP: Found extension "PIPELINING", arg ""
08-28 11:19:38.444: I/System.out(9492): DEBUG SMTP: Found extension "CHUNKING", arg ""
08-28 11:19:38.444: I/System.out(9492): DEBUG SMTP: Found extension "SMTPUTF8", arg ""
08-28 11:19:38.444: I/System.out(9492): DEBUG SMTP: Attempt to authenticate
08-28 11:19:38.504: I/System.out(9492): AUTH LOGIN
08-28 11:19:38.614: I/System.out(9492): 334 VXNlcm5hbWU6
08-28 11:19:38.614: I/System.out(9492): ZWIxNG1zQGdvb2dsZW1haWwuY29t
08-28 11:19:38.674: I/System.out(9492): 334 UGFzc3dvcmQ6
08-28 11:19:38.704: I/System.out(9492): RkZ3UzIwMDM=
08-28 11:19:39.044: I/System.out(9492): 534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbsSi
08-28 11:19:39.084: I/System.out(9492): 534-5.7.14 WAPBKxXrfqaVMKdB7zRhISihBZWTJlb98chHX5cnpuqhm_KUO2czQYBBRTt4KObt7ntZSJ
08-28 11:19:39.084: I/System.out(9492): 534-5.7.14 QIqeHh6gs0Q2XQDVlZGCxCrGEsYoz5-1Qv7Tc98LT7lP6dO8gCnAbkydaRLbsmTfI8Xl-s
08-28 11:19:39.084: I/System.out(9492): 534-5.7.14 zG47TvmrvdIMiSF0R91lNdduhygKxOW-VCJcH8KADwJJkJeWxOQXK-uBA-YF2ZUnEMLWvV
08-28 11:19:39.134: I/System.out(9492): 534-5.7.14 LQKdhEA> Please log in via your web browser and then try again.
08-28 11:19:39.144: I/System.out(9492): 534-5.7.14 Learn more at
08-28 11:19:39.164: I/System.out(9492): 534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 wr10sm10759961wjc.10 - gsmtp
08-28 11:19:39.314: I/GMail(9492): Exception null
Properties emailProperties = new Properties();
emailProperties.put("mail.smtp.host", "smtp.gmail.com");
emailProperties.put("mail.smtp.auth", "true");
emailProperties.put("mail.smtp.port", "465");
emailProperties.put("mail.smtp.socketFactory.port", "465");
emailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");