2016-04-11 12 views
0

Ich habe eine einfache Feder-Anwendung erstellt, die eine E-Mail an den Benutzer sendet. das scheint perfekt mit "SimpleMailMessage" zu funktionieren (die ganze Nachricht wird als einfacher Text angezeigt). Was ich will, ist eine Datei als Anhang zu senden, also habe ich versucht, javax.mail.internet.MimeMessage zu verwenden, aber einige verdrahtete Fehler zu bekommen, die ich nicht aufspüren kann. Unten ist mein SnippetDatei als Anhang oder Inline senden mit Spring JavaMailSender

try { 
      javax.mail.internet.MimeMessage message = mailSender.createMimeMessage(); 
      MimeMessageHelper helper = new MimeMessageHelper(message,true); 
      helper.setTo(employee.getEmailId()); 
      helper.setFrom("[email protected]"); 
      helper.setText(mailMessage, true); 
      helper.setSubject(subject); 
      FileSystemResource res = new FileSystemResource(new File("C:/software/Koala.jpeg")); 
      helper.addAttachment("happyBirthday", res); 
      mailSender.send(message); 
     } catch (MessagingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

Der Fehler ist:

Caused by: java.lang.LinkageError: loader constraint violation: when resolving method "javax.mail.internet.MimeBodyPart.setDataHandler(Ljavax/activation/DataHandler;)V" the class loader (instance of org/jboss/classloader/spi/base/BaseClassLoader) of the current class, org/springframework/mail/javamail/MimeMessageHelper, and the class loader (instance of org/jboss/classloader/spi/base/BaseClassLoader) for resolved class, javax/mail/internet/MimeBodyPart, have different Class objects for the type n/DataHandler;)V used in the signature 
    at org.springframework.mail.javamail.MimeMessageHelper.addAttachment(MimeMessageHelper.java:997) 
    at org.springframework.mail.javamail.MimeMessageHelper.addAttachment(MimeMessageHelper.java:1077) 
    at org.springframework.mail.javamail.MimeMessageHelper.addAttachment(MimeMessageHelper.java:1047) 
    at Example1.sendEmail(Example1.java:89) 

Jede Hilfe wirklich geschätzt würde.

Antwort

0

Alles sieht gut aus, außer

FileSystemResource res = new FileSystemResource(new File("C:/software/Koala.jpeg")); 

Sie können dies nur tun, Dateien an Nachrichten anhängen.

helper.addAttachment("happyBirthday", new File("C:/software/Koala.jpeg")); 
+0

Immer noch bekomme ich den gleichen Fehler wie oben beschrieben – user3092131

+0

Es sieht aus wie das Problem wahrscheinlich durch zwei Versionen des Java Activation Framework verursacht wird. Versuchen Sie herauszufinden, ob das Entfernen von activation.jar aus dem Klassenpfad das Problem löst. – Sachin

+0

Die activation.jar wurde aus dem jboss entfernt und alle spezifischen Mail-Jars entfernt, die im lib-Ordner des jboss kompiliert wurden. – user3092131

1

Versuchen Sie das Byte [] Typ verwendet, und Sie haben Ihre Datei in ein Byte [] konvertieren, indem Sie diesen Code verwenden:

Path path = Paths.get("path/to/file"); 
byte[] content = Files.readAllBytes(path); 

Und diese Funktion aufrufen, wenn Sie bereit sind, E-Mail senden :

public void sendEmail(String to,String from,String sub,String msgBody,byte[] content){ 

    MimeMessage message = mailSender.createMimeMessage(); 
    try { 
     MimeMessageHelper helper = new MimeMessageHelper(message, true); 
     helper.setFrom(from); 
     helper.setTo(to); 
     helper.setSubject(sub); 
     helper.setText(msgBody); 
     helper.addAttachment("MyTestFile.txt", new ByteArrayResource(content)); 
     mailSender.send(message); 
    } catch (MessagingException e) { 

     e.printStackTrace(); 
    } 
} 
+0

konvertieren, ist es möglich, dass ich die JPG-Datei als Anhang senden kann – user3092131

+0

sicher können Sie! ändere 'MyTestFile.txt' in' Koala.jpeg' in 'helper.addAttachment()' – Spartan

+0

Ich habe versucht, was du gesagt hast, aber das gleiche Problem ist immer noch da – user3092131

Verwandte Themen