【发布时间】: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