2014-02-19 44 views
1

我試圖發送使用JavaMail郵件,但得到IO異常訪問被拒絕 請讓我知道我在哪裏犯了一個錯誤。我已經使用java郵件和互聯網API以及數據源,數據處理程序API。此外,我試圖發送作爲附件的HTML文件是在適當的路徑,我有該文件的訪問權限。下面是我的代碼IO異常,同時發送使用JavaMail郵件(訪問被拒絕)

import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.activation.FileDataSource; 
import javax.mail.*; 
import javax.mail.internet.*; 
import java.util.*; 

public class SendMail 

{ 

public static void execute(String reportFileName) throws Exception 

{ 
    String path="C:/reports"; 

    String[] to={"[email protected]"}; 
    String[] cc={"[email protected]"}; 
    String[] bcc={"[email protected]"}; 

    SendMail.sendMail("[email protected]", 
         "******", 
         "smtp.gmail.com", 
         "465", 
         "true", 
         "true", 
         true, 
         "javax.net.ssl.SSLSocketFactory", 
         "false", 
         to, 
         cc, 
         bcc, 
         "Test Mail", 
         "Test Message", 
         path, 
         reportFileName); 
    } 

    public static boolean sendMail(String userName, 
      String passWord, 
      String host, 
      String port, 
      String starttls, 
      String auth, 
      boolean debug, 
      String socketFactoryClass, 
      String fallback, 
      String[] to, 
      String[] cc, 
      String[] bcc, 
      String subject, 
      String text, 
      String attachmentPath, 
      String attachmentName){ 

    //Object Instantiation of a properties file. 
    Properties props = new Properties(); 

    props.put("mail.smtp.user", userName); 

    props.put("mail.smtp.host", host); 

    props.put("mail.smtp.password", passWord); 

    props.put("mail.smtps.auth", "true"); 



    if(!"".equals(port)){ 
    props.put("mail.smtp.port", port); 
    } 

    if(!"".equals(starttls)){ 
     props.put("mail.smtp.starttls.enable",starttls); 
     props.put("mail.smtp.auth", auth); 
    } 

    if(debug){ 

    props.put("mail.smtp.debug", "true"); 

    }else{ 

    props.put("mail.smtp.debug", "false"); 

    } 

    if(!"".equals(port)){ 
     props.put("mail.smtp.socketFactory.port", port); 
    } 
    if(!"".equals(socketFactoryClass)){ 
     props.put("mail.smtp.socketFactory.class",socketFactoryClass); 
    } 
    if(!"".equals(fallback)){ 
     props.put("mail.smtp.socketFactory.fallback", fallback); 
    } 

    try{ 
     props.put("mail.smtp.isSSL", "true"); 

     Session session = Session.getDefaultInstance(props, null); 

     session.setDebug(debug); 

     MimeMessage msg = new MimeMessage(session); 

     msg.setText(text); 

     msg.setSubject(subject); 

     Multipart multipart = new MimeMultipart(); 
     MimeBodyPart messageBodyPart = new MimeBodyPart(); 
     DataSource source = new FileDataSource(attachmentPath); 
     messageBodyPart.setDataHandler(new DataHandler(source)); 
     messageBodyPart.setFileName(attachmentName); 
     multipart.addBodyPart(messageBodyPart); 

     msg.setContent(multipart); 
     msg.setFrom(new InternetAddress(userName)); 

     for(int i=0;i<to.length;i++){ 
      msg.addRecipient(Message.RecipientType.TO, new 

     InternetAddress(to[i])); 
     } 

     for(int i=0;i<cc.length;i++){ 
      msg.addRecipient(Message.RecipientType.CC, new 
     InternetAddress(cc[i])); 
     } 

     for(int i=0;i<bcc.length;i++){ 
      msg.addRecipient(Message.RecipientType.BCC, new 
     InternetAddress(bcc[i])); 
     } 

     msg.saveChanges(); 

     Transport transport = session.getTransport("smtps"); 

     transport.connect("smtp.gmail.com","[email protected]", "******"); 

     transport.sendMessage(msg, msg.getAllRecipients()); 

     transport.close(); 

     return true; 

    } catch (Exception mex){ 
     mex.printStackTrace(); 
     return false; 
    } 
} 

    public static void main (String []args) throws Exception 
    { 
     SendMail.execute("dummy_report.html"); 
    } 
} 

下面是堆棧跟蹤

java.io.FileNotFoundException: C:\reports (Access is denied) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(Unknown Source) 
at javax.activation.FileDataSource.getInputStream(Unknown Source) 
at javax.activation.DataHandler.writeTo(Unknown Source) 
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1350) 
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:845) 
at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:361) 
at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:85) 
at javax.activation.ObjectDataContentHandler.writeTo(Unknown Source) 
at javax.activation.DataHandler.writeTo(Unknown Source) 
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1350) 
at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1683) 
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:585) 
at sel.SendMail.sendMail(SendMail.java:143) 
at sel.SendMail.execute(SendMail.java:22) 
at sel.SendMail.main(SendMail.java:157) 
    javax.mail.MessagingException: IOException while sending message; 
     nested exception is: 
java.io.FileNotFoundException: C:\reports (Access is denied) 
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:625) 
at sel.SendMail.sendMail(SendMail.java:143) 
at sel.SendMail.execute(SendMail.java:22) 
at sel.SendMail.main(SendMail.java:157) 
    Caused by: java.io.FileNotFoundException: C:\reports (Access is denied) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(Unknown Source) 
at javax.activation.FileDataSource.getInputStream(Unknown Source) 
at javax.activation.DataHandler.writeTo(Unknown Source) 
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1350) 
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:845) 
at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:361) 
at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:85) 
at javax.activation.ObjectDataContentHandler.writeTo(Unknown Source) 
at javax.activation.DataHandler.writeTo(Unknown Source) 
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1350) 
at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1683) 
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:585) 
... 3 more 

回答

8

的FileDataSource只指向目錄,而不是文件。它看起來像attachmentName應該命名由attachmentPath命名的目錄中的文件。試試這個:

File att = new File(new File(attachmentPath), attachmentName); 
messageBodyPart.attachFile(att); 
+0

謝謝比爾,工作:) – bhargav

相關問題