2012-10-15 20 views
1

您好我有以下代码:Filedatasource路径不是动态来

MimeMessage msg = new MimeMessage(session); 
    InternetAddress addressFrom = new InternetAddress("[email protected]"); 
    msg.setFrom(addressFrom); 

    InternetAddress[] addressTo = new InternetAddress[sendTo.length]; 
    for (int i = 0; i < sendTo.length; i++) { 
    addressTo[i] = new InternetAddress(sendTo[i]); 
    } 
    msg.setRecipients(Message.RecipientType.TO, addressTo); 

    // Setting the Subject and Content Type 
    msg.setSubject(emailSubjectTxt); 
    /*Image part*/ 

    MimeMultipart multipart = new MimeMultipart("related"); 

    // first part (the html) 
    BodyPart messageBodyPart = new MimeBodyPart(); 
    String htmlText = "<H1>Hello</H1><img src=\"cid:image\">"; 
    messageBodyPart.setContent(htmlText, "text/html"); 

    // add it 
    multipart.addBodyPart(messageBodyPart); 

    // second part (the image) 
    messageBodyPart = new MimeBodyPart(); 
    String contextPath=request.getContextPath(); 
    System.out.println("contextpath"+contextPath); 
    File contextDir = new File(contextPath); 
    System.out.println("contextDir"+contextDir); 
    File emailImage = new File(contextDir, "/images/sample.jpeg"); 
    System.out.println("emailImage"+emailImage); 

    DataSource fds = new FileDataSource(emailImage); 
    //System.out.println("fds"+fds.getName()); 
    messageBodyPart.setDataHandler(new DataHandler(fds)); 
    messageBodyPart.setHeader("Content-ID","<image>"); 

    // add it 
    multipart.addBodyPart(messageBodyPart); 

    // put everything together 
    msg.setContent(multipart); 
    Transport.send(msg); 
} 

它正常工作,如果我使用

DataSource fds = new FileDataSource("C:\\images\\sample.jpeg"); 

,而不是

DataSource fds = new FileDataSource(emailImage); 

但我想要从访问图片。
我运行这个时得到了java.lang.NullPointerException

+1

请发布堆栈跟踪,以便能够确定NullPointerException的位置。 你也应该用File.exists()来检查文件是否真的存在于你认为它的地方。 – ppeterka

+0

如果你正在使用servlet来调用那个图片,那么试试这个 http:///stackoverflow.com/questions/1479036/access-file-in-webcontent-folder-from-a-servlet –

+0

使用哪个Web应用程序API? 'Servlet JSP'或'JSF' ..... – CycDemo

回答

0

如果您想在Web应用程序中使用。首先,您必须将附件文件上传至服务器InputStream,然后使用此InputStream创建附件。

+0

我不想创建附件。我想让图像进入邮件。例如公司标识 – user1746981

+0

,不管它是什么,你必须首先将'Image'上传到服务器端。 – CycDemo

+0

@ CycDemo - 它已经存在于服务器端...它在WebContent->图像中 – user1746981

0

已解决:使用getRealPath(); 现在工作正常。

File contextDir = new File(request.getRealPath(“/ images/sample.jpeg”));
DataSource fds = new FileDataSource(contextDir);