Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java应用程序中,通过amazon服务器上的JavaMail API发送带有附件的邮件时出现空指针异常_Java_Amazon Ec2_Jakarta Mail - Fatal编程技术网

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

在Java应用程序中,通过amazon服务器上的JavaMail API发送带有附件的邮件时出现空指针异常,java,amazon-ec2,jakarta-mail,Java,Amazon Ec2,Jakarta Mail,在amazon服务器上使用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...");

在amazon服务器上使用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)

任何人请提供一些可行的解决方案。提前感谢。

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


文件路径是“文件:”URL吗?如果是这样,为什么不使用FileDataSource呢?

我已经将附件代码基础部分更改为

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

空指针异常问题得到了解决,得到了一个新的异常,称为SSLProtocol异常,并了解了两台机器上安装的java jdk的区别,本地机器上安装了1.6,amazon云上安装了1.7。接下来,邮件将按预期在两台服务器中触发。

检查
DataSource
DataHandler
是否初始化为正确的值,并将所需的值传递给它。此行给出异常:Transport.send(message);amazon服务器中的文件路径类似于“”,我们可以通过浏览器和代码库在本地访问此文件路径。我也尝试使用FileDataSource,但出现了相同的错误。你能建议其他的方法吗?谢谢。这个文件和JavaMail应用程序在同一台机器上,对吗?假设它确实是存储在服务器上的文件。。。确保可以在应用程序中使用FileInputStream访问该文件,然后在创建消息时使用FileDataSource。如果无法使用FileInputStream访问该文件,则需要调试该问题。如果它实际上不是存储在服务器上的文件,而是使用URL访问的资源,请确保您可以使用URLConnection.getInputStream访问它。我有相同的堆栈跟踪。。。更新到最近的mail.jar后,我收到了一条更有用的消息——该文件不存在。