2016-06-21 3 views
0

Ich habe eine Methode erstellt, um eine Mail mit Java-GUI mit mehreren Dateien Anhänge zu senden. Wenn die Methode die E-Mail sendet, werden Anhangsdateien wie Microsoft Office und PDF an die empfangende E-Mail als BitSarver gesendet. Ich muss Datei senden, um dort zu schreiben, also kann anderes automatisches System arbeiten, indem er die Anlagedatei liest und sie druckt.JavaMail schickte BitSarver-Datei und keine PDF-Datei

Dies ist die Methode.

static public boolean sendMail(String to,String subject,String text_filed) 
{ 
    Properties props = new Properties(); 
    props.put("mail.smtp.host","smtp.gmail.com"); 
    props.put("mail.smtp.socketFactory.port ","465"); 
    props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.auth","true"); 
    props.put("mail.smtp.port","465"); 
    Session session = Session.getDefaultInstance(props, 
      new javax.mail.Authenticator(){ 
       protected PasswordAuthentication getPasswordAuthentication() 
       { 
        return new PasswordAuthentication("eamil", pass); 
       } 
      } 
    ); 
    try 
    { 
     Message m = new MimeMessage(session); 
     m.setFrom(new InternetAddress(userMAil)); 

     System.out.println("from "+userMAil); 

     m.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); 

     System.out.println("to "+to); 

     m.setSubject(subject); 

     System.out.println("the subject "+subject); 

     MimeBodyPart bodypart = new MimeBodyPart(); 
     bodypart.setText(text_filed); 
     Multipart multipart = new MimeMultipart(); 
     multipart.addBodyPart(bodypart); 

     System.out.println("the content "+text_filed); 
     for(int i = 0;i< main_controller.attachments_path.size();i++) 
     { 
      bodypart = new MimeBodyPart(); 
      DataSource source = new FileDataSource(main_controller.attachments_path.get(i)); 
      System.out.println("the file location"+main_controller.attachments_path.get(i)); 
      bodypart.setDataHandler(new DataHandler(source)); 
      //bodypart.setFileName(main_controller.filesFrame.getFilename()); 

      System.out.println("the file name"+main_controller.filesFrame.getFilename()); 
      multipart.addBodyPart(bodypart); 
     } 


     m.setContent(multipart); 
     //m.setText(text_filed); 

     Transport.send(m); 

     JOptionPane.showMessageDialog(null, "done!"); 
     return true; 
    } 
    catch(Exception e) 
    { 
     String m = e.getMessage(); 
     JOptionPane.showMessageDialog(null, e); 
     System.out.println(m); 
     return false; 
    } 
} 

hoffen, dass Sie mir helfen können: D

Antwort

0

Scheint, wie das Problem im Zusammenhang mit dieser könnte:

How to set MimeBodyPart ContentType to "text/html"?

Versuchen Sie, rufen MimeMessage.saveChanges() vor der Vorlage zu erhalten Der Inhaltstyp wird ordnungsgemäß von den DataHandlern ausgefüllt.

+0

Ich habe versucht, aber ich bekomme immer noch das gleiche Ergebnis 'm.saveChanges(); m.setContent (mehrteilig); Transport.send (m); ' –

0

JavaMail wählt über das JavaBeans Activation Framework (JAF) den MIME-Typ anhand der Dateinamenserweiterung aus. Die Liste der "bekannten" Dateinamenerweiterungen ist relativ klein. Sie können hinzufügen, wie in der MimetypesFileTypeMap Javadocs beschrieben. Oder Sie können die Methode MimeBodyPart.attachFile verwenden und den MIME-Typ direkt angeben.

Oh, und Sie werden diese common JavaMail mistakes aufräumen wollen.

+0

Ich verstehe nicht ganz, was Sie meinen, ich werde die Dateien in E-Mail anhängen können Sie spezifischer sein. –

+0

Sie lesen alle Links, die ich zur Verfügung gestellt habe, oder? Welcher Teil verwirrte dich? –