小编典典

在Java Application中的Amazon服务器上通过JavaMail API发送带有附件的邮件时,出现空指针异常

java

在使用javamail API在亚马逊服务器中发送带有pdf附件的邮件时,在日志中抛出空指针异常。但是相同的代码在本地工作。

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());
    }
}

请在下面找到amozon服务器应用程序日志上生成的异常。

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)

有人请为此提供一些可行的解决方案。提前致谢。


阅读 481

收藏
2020-11-26

共1个答案

小编典典

问题可能是您无法访问filePath中的URL。

filePath是“ file:” URL吗?如果是这样,为什么不只使用FileDataSource?

2020-11-26