J'essaye d'envoyer un message en utilisant Javamail API, avec tomcat en tant que serveur web, mais le code suivant m'a causé une grosse exception chaque fois que j'ai essayé d'envoyer le message sans un fichier et un attachement. Bien que cela fonctionne avec des messages en pièce jointe.Envoyer le résultat du message dans une exception
public static String send(String to,String body,Stringsubject,String file,String from)throws Exception{
if(file!=null||file!=" "){
File file1=new File(file);
MimeBodyPart mb=new MimeBodyPart();
FileDataSource f=new FileDataSource(file1.getCanonicalPath());
mb.setDataHandler(new DataHandler(f));
mb.setFileName(f.getName());
mm.addBodyPart(mb);
}
mb1.setText(body);
mm.addBodyPart(mb1);
message.setFrom(new InternetAddress(from));
Address[] add={ new InternetAddress(to) };
message.setRecipients(Message.RecipientType.TO,add);
message.setSubject(subject);
message.setContent(mm);
//message.setText(body);
Transport.send(message);
return "Message sent";
}
Exception:
javax.mail.MessagingException: IOException while sending message;
nested exception is:
java.io.FileNotFoundException: C:\Program Files\Apache Software Foundation\Tomcat 6.0 (Access is denied)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:779)
at javax.mail.Transport.send0(Transport.java:191)
at javax.mail.Transport.send(Transport.java:120)
at foo.SendMessage.send(SendMessage.java:57)
at foo.Mail.doPost(Mail.java:39)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.io.FileNotFoundException: C:\Program Files\Apache Software Foundation\Tomcat 6.0 (Access is denied)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at javax.activation.FileDataSource.getInputStream(FileDataSource.java:82)
at javax.activation.DataHandler.writeTo(DataHandler.java:290)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1381)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:852)
at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:452)
at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:98)
at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:869)
at javax.activation.DataHandler.writeTo(DataHandler.java:302)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1381)
at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1742)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:737)
... 18 more
Ma question est, je l'ai utilisé une condition dans le code ci-dessus avant de faire un fichier comme pièce jointe, alors pourquoi je reçois cette exception?
Je vais avoir un espace vide dans la variable de fichier, chaque fois que je reçois exception. – Jazzy
Ahh, donc cela revient au commentaire de Jherico sur la clause broken if. Si la clause if était correcte, c'est-à-dire && au lieu de ||, votre code n'essaierait jamais d'ajouter un fichier en pièce jointe au message.Au moment où vous acceptez "" en tant que nom de fichier, vous essayez d'ajouter le répertoire de travail en cours en pièce jointe à votre e-mail, ce qui entraîne l'exception. – liwp