Null Pointer Exception while sending mail with attachment through JavaMail API on amazon server in Java Application

给你一囗甜甜゛ 提交于 2019-12-20 03:32:25

问题


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.


回答1:


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?




回答2:


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.



来源:https://stackoverflow.com/questions/22551439/null-pointer-exception-while-sending-mail-with-attachment-through-javamail-api-o

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!