【问题标题】:Getting Null Pointer Exception while sending mail in JAVA在 JAVA 中发送邮件时出现空指针异常
【发布时间】:2015-08-23 23:53:05
【问题描述】:

我有以下用于发送邮件的代码,但出现以下错误。我在 Windows 7 机器上使用 JAVA 7,Eclipse Luna。我正在使用 smtp.gmail.com 服务器,但每次运行此代码时,我都会在 Transport.send() 方法处收到空指针异常错误。

// Recipient's email ID needs to be mentioned.
              String to = "***@tibco.com,***@tibco.com";
              String[] mailAddressTo = to.split(",");

              // Sender's email ID needs to be mentioned
              String from = "PHD";

              // Assuming you are sending email from localhost
              String host = "10.106.136.29";

              // Get system properties
              Properties properties = System.getProperties();

              // Setup mail server
              properties.setProperty("mail.smtp.host", host);

              // Get the default Session object.
              Session session = Session.getDefaultInstance(properties);

              try{
                 // Create a default MimeMessage object.
                 MimeMessage message = new MimeMessage(session);

                 // Set From: header field of the header.
                 message.setFrom(new InternetAddress(from));

                 // Set To: header field of the header.
             //    message.addRecipient(Message.RecipientType.TO,
                //                          new InternetAddress(to));

               //can put multiple receivers in the array
                 InternetAddress[] mailAddress_TO = new InternetAddress [mailAddressTo.length] ;
                 for(int i=0;i<mailAddressTo.length;i++){
                     mailAddress_TO[i] = new InternetAddress(mailAddressTo[i]);
                 }
                 message.addRecipients(Message.RecipientType.TO, mailAddress_TO);

                 // Set Subject: header field
                 message.setSubject("Test Report!");

              // This mail has 2 part, the BODY and the embedded image
                 MimeMultipart multipart = new MimeMultipart("related");

                 // first part (the html)
                 BodyPart messageBodyPart = new MimeBodyPart();
                 String htmlText = "<table border=  \'1\'  align=  \'center\'   cellpadding=  \'10\'  cellspacing=  \'10\'  frame=  \'box\'  rules=  \'all\' ><caption><h1><em><strong>JUnit Test Report</strong></em></h1></caption><tr><th width=\'200\'>Test ID</th><td>r1014_runtime</td></tr><tr><th>Users</th><td>gajoshi<br><br>dsathiya</td></tr><tr><th> Test Suits Failed</th><td><font color=\'blue\'>10</font></td></tr></table><br><footer>--<br><br><div id=\'mainContainer\' style=\'float:left\'></div></footer><br><br><br>";
                 messageBodyPart.setContent(htmlText, "text/html");
                 // add it
                 multipart.addBodyPart(messageBodyPart);

                 // second part (the image)
                 messageBodyPart = new MimeBodyPart();
                 DataSource fds = new FileDataSource("icon/TIB.png");



                 messageBodyPart.setDataHandler(new DataHandler(fds));
                 messageBodyPart.setHeader("Content-ID", "<image>");

                 // add image to the multipart
                 multipart.addBodyPart(messageBodyPart);

                 // put everything together
                 message.setContent(multipart);
                 // Send message
                 try{
                 Transport.send(message);}
                 catch(NullPointerException e){
                     System.out.println(e + " is occured");
                 }

                 System.out.println("Sent message successfully....");

              } catch (MessagingException e) {
                 throw new RuntimeException(e);
              } 

现在运行此代码时出现以下错误。

 Exception in thread "main" 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 SendMail.main(SendMail.java:111)

请帮帮我。

【问题讨论】:

  • 什么是运输?是上课吗?
  • 你可以从这里mkyong.com/java/… 举一个例子来检查该代码是否能完成这项工作。
  • @nafas 你可以通过导入import javax.mail.Transport;来使用它
  • 原因很可能是new FileDataSource("icon/TIB.png")。您给它一个相对文件名,这意味着它取决于 Java 进程的当前目录。尝试将这一行放在它前面:System.out.println(new File("icon/TIB.png").exists()); 如果它打印为 false,那么您已经找到了问题。我怀疑你最好使用 Class.getResource 访问该文件并创建一个 URLDataSource 。
  • 谢谢@VGR ..这是由于TIB.png的文件路径错误...感谢大家的回复...

标签: java eclipse smtp jakarta-mail sendmail


【解决方案1】:

升级您的 JavaMail 版本 1.4.7 或更高版本。这是在Avoid NullPointerException when encountering a bad Content-Type 下修复的。

【讨论】:

    猜你喜欢
    • 2014-10-28
    • 2023-03-18
    • 2015-04-01
    • 2018-06-24
    • 2016-07-18
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多