目前我正在编写一个正在监听目录的代码.当目录用.apk文件更新时,我将使用此.apk文件发送邮件到Gmail帐户.我在我的程序中使用Jnotify和JAVA Mail.
我得到的错误是,
“javax.mail.MessagingException:IOException同时发送消息;
嵌套异常是:
javax.activation.UnsupportedDataTypeException:无对象DCH for MIME类型multipart / mixed; boundary =“—- = _ Part_0_145238.1392728439484”“我寻找在stackoverflow中给出的解决方案的帮助,但没有一个有帮助.
提前致谢
- public void fileCreated(int wd,String rootPath,String name) {
- print("created " + rootPath + " : " + name);
- if (name.contains(".apk"))
- SendEmail(name);
- else{
- System.out.println("Not the APK file");
- }
- void SendEmail(String strname){
- String Path = "D:/POC/Email/apk folder/"+strname;
- System.out.println("Path->" + Path);
- Properties props = new Properties();
- props.put("mail.smtp.host","173.194.78.108");
- 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");
- System.out.println("Properties has been set properly");
- Session session = Session.getDefaultInstance(props,new javax.mail.Authenticator(){
- protected PasswordAuthentication getPasswordAuthentication(){
- return new PasswordAuthentication("SenderEmailID@gmail.com","senderPassword");
- }
- }
- );
- System.out.println("Session Created successfully");
- try{
- Message message = new MimeMessage(session);
- message.setFrom(new InternetAddress("SenderEmailID@gmail.com"));
- message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("ToReceiverEmailID@gmail.com"));
- message.setSubject("Android : " + strname);
- MimeBodyPart msgbody = new MimeBodyPart();
- msgbody.setText("This is the message content which is sent using JAVA MAIL 1.4.5");
- Multipart mulpart = new MimeMultipart();
- mulpart.addBodyPart(msgbody);
- //Attachement Starts here.
- msgbody = new MimeBodyPart();
- javax.activation.DataSource source = new FileDataSource(Path);
- msgbody.setDataHandler(new DataHandler(source));
- msgbody.setFileName(strname);
- message.setContent(mulpart);
- System.out.println("Attached the message going to start transporting the mail");
- //If i've the code before sending the email is getting sent but without attachment.
- //Thread.currentThread().setContextClassLoader( getClass().getClassLoader() );
- Transport.send(message);
- System.out.println("Mail Sent successfully");
- }catch(MessagingException msg){
- msg.printStackTrace();
- }
- catch(Exception e){
- e.printStackTrace();}
- }
解决方法
JavaMail依赖于一些配置文件来将MIME类型映射到Java类(例如,“maultipart / mixed”到“javax.mail.internet.MimeMultipart”).这些配置文件使用应用程序的ClassLoader加载.如果ClassLoader无法正常运行,则不会找到这些配置文件.
- MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
- mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
- mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
- mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
- mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
- mc.addMailcap("message/rfc822;; x-java-content- handler=com.sun.mail.handlers.message_rfc822");