Null Pointer Exception while sending mail with att

2020-04-16 06:29发布

while sending a mail with pdf attachment in amazon server using javamail API, Its throwing null pointer exception in the logs. But same code is working in local.

public void sendMail(final String mailTo, final String mailSubject, final String mailText, final String filePath, final String fileName) {
    logger.info("Inside sendMail Method...");
    final Properties config = createConfiguration();

    // Creates a mail session. We need to supply username and password for Gmail authentication.
    final Session session = Session.getInstance(config, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(mailFrom, mailPassword);
        }
    });

    // Creates email message
    final MimeMessage message = new MimeMessage(session);
    try {
        message.setFrom(new InternetAddress(mailFrom));
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailTo));
        message.setSubject(mailSubject);

        final BodyPart messagePart = new MimeBodyPart();
        messagePart.setContent(mailText, contentType);

        final MimeMultipart multipart = new MimeMultipart();
        multipart.addBodyPart(messagePart);

        if (filePath != null) {
            final MimeBodyPart attachmentPart = new MimeBodyPart();
            final URL url;
            try {
                url = new URL(filePath);
                final DataSource source = new URLDataSource(url);
                attachmentPart.setDataHandler(new DataHandler(source));
                attachmentPart.setFileName(fileName);
                multipart.addBodyPart(attachmentPart);
            } catch (MalformedURLException e) {
                logger.error("Malformed URL Exception: " + e.getMessage());
            }
        }
        message.setContent(multipart);
        // Send a message
        Transport.send(message);
        logger.info("Mail triggered successfully");
    } catch (final AddressException e) {
        logger.error("Address Exception: " + e.getMessage());
    } catch (final MessagingException e) {
        logger.error("Messaging Exception: " + e.getMessage());
    }
}

Please find below the exception generated on amozon server application log.

2014-03-20 19:01:30,936 [DefaultQuartzScheduler_Worker-2] INFO            net.app.api.jobs.MailJob - Error in triggering the mail : null
java.lang.NullPointerException
at javax.mail.internet.MimeUtility.getEncoding(MimeUtility.java:226)
at javax.mail.internet.MimeUtility.getEncoding(MimeUtility.java:299)
at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1375)
at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1021)
at javax.mail.internet.MimeMultipart.updateHeaders(MimeMultipart.java:419)
at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1354)
at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:2107)
at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:2075)
at javax.mail.Transport.send(Transport.java:123)
at net.app.api.mail.MailTrigger.sendMail(MailTrigger.java:104)
at net.app.api.jobs.MailJob.execute(MailJob.java:41)
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)

Anybody please provide some feasible solution to this. Thanks in advance.

2条回答
神经病院院长
2楼-- · 2020-04-16 07:10

The problem may be that you can't access the URL in filePath.

Is filePath a "file:" URL? If so, why not just use a FileDataSource?

查看更多
我想做一个坏孩纸
3楼-- · 2020-04-16 07:20

I have changed the attachment code base part as

final MimeBodyPart attachmentPart = new MimeBodyPart();
final URL url;
try {
    url = new URL(filePath);
    final DataSource source = new URLDataSource(url);
    attachmentPart.setDataHandler(new DataHandler(source));
    attachmentPart.setFileName(fileName);
    attachmentPart.setDisposition(Part.ATTACHMENT);
    attachmentPart.setHeader("Content-Transfer-Encoding", "base64");
    multipart.addBodyPart(attachmentPart);
} catch (final MalformedURLException e) {
    logger.error("Malformed URL Exception: " + e.getMessage());
}

The null pointer exception issue got resolved and got a new exception as SSLProtocol Exception and came to know the difference on java jdk's installed in both machines as 1.6 in local machine and 1.7 in amazon cloud. So followed SSL handshake alert: unrecognized_name error since upgrade to Java 1.7.0 and now the mail is triggering in both servers as expected.

查看更多
登录 后发表回答