Добрый день. Возникла проблема. Написал прогу которая с почитиы выгружает письма . Программа не работает, если отправитель на руччком языке. на пример если значение From='Vasea Pupkin < [email protected]>', то програма работает без ошибок А если From='Татьяна < [email protected]>', то програма ругается выдает вопросики. Но не навсе эмейлы. Вызов класса обращение к почте Код | public class Getemail {
public static void main(String[] args) { String host = "localhost"; String user = "[email protected]"; String pass = "111sdddd"; File dir = new File("/home/user/priem_zaiavki_email/"); try { List<Email> emails = IncomingMail.downloadPop3(host, user, pass, downloadDir); for ( Email email : emails ) { List<EmailAttachment> attachments = email.attachments; for ( EmailAttachment attachment : attachments ) { } } } catch (Exception e) { e.printStackTrace(); }
}
}
|
Класс обращение к почте Код | package fidesco;
import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Properties;
import javax.mail.Address; import javax.mail.Flags; import javax.mail.Folder; import javax.mail.Message; import javax.mail.Multipart; import javax.mail.Part; import javax.mail.Session; import javax.mail.Store; import javax.mail.internet.MimeBodyPart;
public class IncomingMail { // static String namefile =""; public static List<Email> downloadPop3(String host, String user, String pass, String downloadDir) throws Exception {
List<Email> emails = new ArrayList<Email>();
// Create empty properties Properties props = new Properties();
// Get the session Session session = Session.getInstance(props, null);
// Get the store Store store = session.getStore("pop3"); store.connect(host, user, pass);
// Get folder Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_WRITE);
try { // Get directory listing Message messages[] = folder.getMessages(); for (int i = 0; i < messages.length; i++) {
Email email = new Email();
// from email.from = messages[i].getFrom()[0].toString(); // to list Address[] toArray = messages[i] .getRecipients(Message.RecipientType.TO); for (Address to : toArray) { email.to.add(to.toString()); }
// cc list Address[] ccArray = null; try { ccArray = messages[i] .getRecipients(Message.RecipientType.CC); } catch (Exception e) { ccArray = null; } if (ccArray != null) { for (Address c : ccArray) { email.cc.add(c.toString()); } }
// subject email.subject = messages[i].getSubject();
// received date if (messages[i].getReceivedDate() != null) { email.received = messages[i].getReceivedDate(); } else { email.received = new Date(); }
// body and attachments email.body = ""; Object content = messages[i].getContent(); if (content instanceof java.lang.String) {
email.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();
if (disposition == null) {
MimeBodyPart mbp = (MimeBodyPart) part; if (mbp.isMimeType("text/plain")) { // Plain email.body += (String) mbp.getContent(); }
} else if ((disposition != null) && (disposition.equals(Part.ATTACHMENT) || disposition .equals(Part.INLINE))) {
// Check if plain MimeBodyPart mbp = (MimeBodyPart) part; if (mbp.isMimeType("text/plain")) { email.body += (String) mbp.getContent(); } else { EmailAttachment attachment = new EmailAttachment(); attachment.name = decodeName(part.getFileName()); String em=email.from; File savedir = new File(downloadDir); savedir.mkdirs(); File savefile1 = new File(downloadDir,em+"_"+attachment.name); File savefile=savefile1; String file_s=savefile.toString(); if (savefile.exists()){ // System.out.println("s ("+file_s.substring(0,file_s.length()-4)+") "+savefile); file_s=file_s.substring(0,file_s.length()-4)+"$1.xml"; savefile=new File(file_s); if (savefile.exists()){ Integer g=file_s.indexOf("$"); Integer n=Integer.parseInt(file_s.substring(g+1,file_s.length()-4).trim())+1; file_s=file_s.substring(0,g)+"$"+n.toString().trim()+".xml"; System.out.println(file_s); savefile=new File(file_s); } } attachment.path = savefile.getAbsolutePath(); attachment.size = saveFile(savefile, part); email.attachments.add(attachment); // namefile= attachment.path ; } } } // end of multipart for loop } // end messages for loop emails.add(email); // Finally delete the message from the server. messages[i].setFlag(Flags.Flag.DELETED, true); }
// Close connection folder.close(true); // true tells the mail server to expunge deleted messages store.close();
} catch (Exception e) { folder.close(true); // true tells the mail server to expunge deleted store.close(); throw e; }
return emails; }
private static String decodeName(String name) throws Exception { if (name == null || name.length() == 0) { return "unknown"; } String ret = java.net.URLDecoder.decode(name, "UTF-8");
// also check for a few other things in the string: ret = ret.replaceAll("=\\?utf-8\\?q\\?", ""); ret = ret.replaceAll("\\?=", ""); ret = ret.replaceAll("=20", " ");
return ret; }
private 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; }
}
|
Это сообщение отредактировал(а) izver84 - 16.1.2018, 16:20
--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно.
|