2015-06-12 5 views
0

Я внедрил простую службу электронной почты, которую хочу расширить с прикреплением файла. Это код до сих пор:Отправить электронное письмо с приложением

private String sendFromGMail(String from, String pass, String[] to, String subject, String body) 
    { 
     String status; 

     Properties props = System.getProperties(); 
     String host = "smtp.gmail.com"; 
     props.put("mail.smtp.starttls.enable", "true"); 
     props.put("mail.smtp.host", host); 
     props.put("mail.smtp.user", from); 
     props.put("mail.smtp.password", pass); 
     props.put("mail.smtp.port", "587"); 
     props.put("mail.smtp.auth", "true"); 

     Session session = Session.getDefaultInstance(props); 
     MimeMessage message = new MimeMessage(session); 

     try 
     { 
      message.setFrom(new InternetAddress(from)); 
      InternetAddress[] toAddress = new InternetAddress[to.length]; 

      // To get the array of addresses 
      for (int i = 0; i < to.length; i++) 
      { 
       toAddress[i] = new InternetAddress(to[i]); 
      } 

      for (int i = 0; i < toAddress.length; i++) 
      { 
       message.addRecipient(Message.RecipientType.TO, toAddress[i]); 
      } 

      message.setSubject(subject); 
      message.setText(body); 
      Transport transport = session.getTransport("smtp"); 
      transport.connect(host, from, pass); 
      transport.sendMessage(message, message.getAllRecipients()); 
      transport.close(); 
     } 
     catch (AddressException ae) 
     { 
      ae.printStackTrace(); 
      return status = "Cannot send Message!"; 
     } 
     catch (MessagingException me) 
     { 
      me.printStackTrace(); 
      return status = "Cannot send Message!"; 
     } 

     return status = "Message is send!"; 
    } 

В приложении я хотел бы использовать этот объект:

private Part file; 

Я пытался реализовать это таким образом, используя this код:

private Part file; 
........ 

MimeBodyPart messageBodyPart = new MimeBodyPart(); 

      Multipart multipart = new MimeMultipart(); 

      messageBodyPart = new MimeBodyPart(); 
//   String file = "path of file to be attached"; 
//   String fileName = "attachmentName"; 
      DataSource source = new FileDataSource((File) file); 
      messageBodyPart.setDataHandler(new DataHandler(source)); 
      messageBodyPart.setFileName(file.getName()); 
      multipart.addBodyPart(messageBodyPart); 

      message.setContent(multipart); 

I получить эту ошибку:

serverError: class javax.faces.el.EvaluationException org.apache.catalina.core.ApplicationPart cannot be cast to java.io.File 

Можете ли вы помочь мне решить проблему?

+0

'ApplicationPart' не' file'. Вы не можете просто бросать объекты в произвольные типы. – azurefrog

+0

@azurefrog Вы можете предложить какое-то решение? –

ответ

0

Заменить:

// String file = "..."; DataSource source = new FileDataSource((File) file);

с:

String pathToFile = "..."; DataSource source = new FileDataSource(new File(pathTofile));

+0

я не получаю подходящий конструктор найти для файла (часть) конструктор File.File (String) не применяется (аргумент несоответствия, часть не может быть преобразован в строку) конструктор File.File (URI) не применяется несоответствие (аргумент ; Часть не может быть преобразована в URI) –

+0

О, я не видел верхнего объявления «файла». Я отредактировал свой ответ. – sinclair

+0

Обновление: я использую JSF 2.2 для загрузки файла в объект. См. Этот пример: https://jsflive.wordpress.com/2013/04/23/jsf22-file-upload/ S owhe nI загружает файл, который он хранится как «частный файл детали»; проблема заключается в том, как я могу отправить файл объект? –