Добрый день. Есть почтовый ящик. Там есть письмо с файлом. Нужно взять этот файл и сохранить на компьютер. И потом удалить письмо. Нашел такой пример: Код | //переменные private Session session; private POP3SSLStore store; private String username; private String password; private POP3Folder folder; public static String numberOfFiles = null; public static int toCheck = 0; public static Writer output = null; URLName url; public static String receiving_attachments="/home/pavel/email/pavel/receive"; //присваивает переменной значения пользователя и пароль public void setUserPass(String username, String password) { this.username = username; this.password = password; } //соединение с почтой public void connect() throws Exception { String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; Properties pop3Props = new Properties(); pop3Props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY); pop3Props.setProperty("mail.pop3.socketFactory.fallback", "false"); pop3Props.setProperty("mail.pop3.port", "995"); pop3Props.setProperty("mail.pop3.socketFactory.port", "995"); url = new URLName("pop3", "pop.mail.ru",995, "", username, password); session = Session.getInstance(pop3Props, null); store = new POP3SSLStore(session, url); store.connect(); } //чтение почты public void openFolder(String folderName) throws Exception { folder = (POP3Folder)store.getFolder(folderName); System.out.println((new StringBuilder("For test----")).append (folder.getParent().getFullName()).toString()); if(folder == null) throw new Exception("Invalid folder"); try { folder.open(2); System.out.println((new StringBuilder("Folder name----")).append (folder.getFullName()).toString()); } catch(Exception ex) { System.out.println((new StringBuilder("Folder Opening Exception..")).append(ex).toString()); } } //проверка public void printAllMessages() throws Exception { Message msgs[] = folder.getMessages(); FetchProfile fp = new FetchProfile(); folder.fetch(msgs, fp); for(int i = 0; i < msgs.length; i++){ Message message = msgs[i]; dumpEnvelope(msgs[i]);/сохранение System.out.println("=============================="); System.out.println("Email #" + (i + 1)); System.out.println("Subject: " + message.getSubject()); System.out.println("From: " + message.getFrom()[0]); System.out.println("Text: " + message.getContent().toString()); } }
//запуск try { Pop3 gmail = new Pop3(); gmail.setUserPass("[email protected]", "***"); gmail.connect(); gmail.openFolder("INBOX"); gmail.printAllMessages();
} catch(Exception e) { e.printStackTrace(); System.exit(-1); }
|
Все работает. Само сохранение Код | //как я понимаю идет чтения письма и вызов сохранения private static void dumpEnvelope(Message m) throws Exception { String body=""; String path=""; int size=0; Object content = m.getContent(); if(content instanceof String){ body = (String)content; } else if(content instanceof Multipart) { Multipart mp = (Multipart)content; for (int j=0; j < mp.getCount(); j++) { Part part = mp.getBodyPart(j); String disposition = part.getDisposition(); //System.out.println("test disposition---->>"+disposition); if (disposition == null) { // Check if plain MimeBodyPart mbp = (MimeBodyPart)part; if (mbp.isMimeType("text/plain")) { body += mbp.getContent().toString(); } else if (mbp.isMimeType("TEXT/HTML")) { body += mbp.getContent().toString(); } else { //unknown } } else if ((disposition != null) && (disposition.equals(Part.ATTACHMENT) || disposition.equals (Part.INLINE) || disposition.equals("ATTACHMENT") || disposition.equals ("INLINE")) ) { // Check if plain MimeBodyPart mbp = (MimeBodyPart)part; if (mbp.isMimeType("text/plain")) { body += (String)mbp.getContent(); } else if (mbp.isMimeType("TEXT/HTML")) { body += mbp.getContent().toString(); } else { File savedir = new File(receiving_attachments); savedir.mkdirs(); File savefile = new File(savedir+"/"+part.getFileName()); path = savefile.getAbsolutePath(); size = saveFile( savefile, part);
} } } }
} //сохранение public static int saveFile(File saveFile, Part part) throws Exception {
BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(saveFile) );
byte[] buff = new byte[2048]; InputStream is = part.getInputStream(); int ret = 0, count = 0; while( (ret = is.read(buff)) > 0 ){ bos.write(buff, 0, ret); count += ret; } bos.close(); is.close(); return count; }
|
Я чего-то не понимаю. Программа сохраняет не вложенный файл, общею информацию о письме? Что не так? P.S. Задача. Пользователь нажимает на кнопку, программа скачивает файл с почты. Это сообщение отредактировал(а) izver84 - 7.2.2013, 12:47
--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно.
|