Transport.send не работает в библиотеке javax.mail - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть классы основной класс плюс класс JavaMailUtl. Это мой класс JavaMailUtl:

import javax.mail.Authenticator;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;


public class JavaMailUtl {
    public static void sendMail(String recepient) throws Exception{
        System.out.println("Preparing Email");
        Properties properties = new Properties();

        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true");
        properties.put("mail.smtp.host", "smtp.gmail.com");
        properties.put("mail.smtp.port", "587");

        String myAccountEmail = "someEmail@gmail.com";
        String password = "xxxxxxxx";

        Session session = Session.getInstance(properties, new Authenticator() {
            @Override
            protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
                return new javax.mail.PasswordAuthentication(myAccountEmail, password);
            }

});
        Message message = prepareMessage(session, myAccountEmail, recepient);
        Transport.send(message);
        System.out.println("Message sent!");
    }

    private static Message prepareMessage(Session session, String myAccountEmail, String recepient){
        try {
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(myAccountEmail));
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(recepient));
            message.setSubject("Gmail API");
            message.setText("This Message sent from Java APP");
        } catch (Exception ex) {
            Logger.getLogger(JavaMailUtl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
}

, а это мой основной класс:

public class JavaEmailMessaging {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception {
        JavaMailUtl.sendMail("someOtherEmail@gmail.com");
    }

}

Когда я пытаюсь запустить Я получаю следующую ошибку:

Preparing Email
Exception in thread "main" java.lang.NullPointerException
    at javax.mail.Transport.send(Transport.java:123)
    at mailing.email.messaging.JavaMailUtl.sendMail(JavaMailUtl.java:43)
    at mailing.email.messaging.JavaEmailMessaging.main(JavaEmailMessaging.java:18)

Дважды проверяю код много раз и не вижу проблем для меня, каждый мой объект указывает на правильное место.

1 Ответ

1 голос
/ 15 февраля 2020

Ваш метод prepareMessage возвращает ноль. Определите сообщение перед try - и затем верните его.

Что-то вроде этого:

    private static Message prepareMessage(Session session, String myAccountEmail, String recepient) {
        Message message = null;
        try {
            message = new MimeMessage(session);
            message.setFrom(new InternetAddress(myAccountEmail));
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(recepient));
            message.setSubject("Gmail API");
            message.setText("This Message sent from Java APP");
        } catch (Exception ex) {
            Logger.getLogger(JavaMailUtl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return message;
    }

Надеюсь, что поможет.

РЕДАКТИРОВАТЬ : Также стоит отметить, что улучшение в Java 14 должно сделать эту ситуацию менее болезненной. Вы получите больше информации о том, что именно было нулевым.

...