Добрый день.
Есть 100% работающий код почтового рор3 клиента на делфи, работает со всеми сервисами(ну кроме хугли), записывает письмо в ЕМЛ файл(вместе со всем что там есть), потом любой почтовый клиент(опера, муррзилла самтыберд и прочие) окрывает файл без проблем
версия Delphi, не все
Код:
try
try
POP3.Connect; //аналог messages = Inbox.getMessages();
MsgCnt:=POP3.CheckMessages; (*проверка наличия писем на сервере*) //ShowMessage(IntToStr(MsgCnt));
if (MsgCnt > 0) then
begin
for I := 1 to MsgCnt do
begin
if aRtvMail then
begin
Msg.Clear; (*очистка накопителя писем*)
fStream.Clear;
POP3.Retrieve(I,Msg);
Lst1.Add('<rowmail>'); (*ROW mail text*)
Msg.SaveToStream(fStream); //вот тут письмо отправляем в поток
fStream.Position:=0; // с позиции нуль
Lst2.LoadFromStream(fStream); // потом просто возвращаем в TStringList (аналог ArrayList<String> вроде бы?)
Lst1.Add(Lst2.Text); // тут все письмецо в бинарном виде всовываем в строку
Lst1.Add('</rowmail>'+sLineBreak); // это просто разделитель между письмами
end;
if aDelMail then POP3.Delete(I); (*delete current mail*)
end;
aList.Assign(Lst1); // это просто вывод массива строк вверх
end
else
begin
aList.Clear;
aErrStr:='Mail Box is Empty';
end;
POP3.Disconnect;
Result:=TRUE;
except
on E:EIdException do
begin
aList.Clear;
aErrStr:=E.Message;
end;
end;
finally
FreeAndNil(fSSL);
FreeAndNil(Lst1);
FreeAndNil(Lst2);
FreeAndNil(Msg);
FreeAndNil(POP3);
FreeAndNil(fStream);
end;
end;
что то немного не понял как все это перевести в java
версия java
Код:
public static ArrayList<String> getMail(String pop3Host, String login, String password) {
try {
Message[] messages = null;
ArrayList<String> rowMail = new ArrayList<String>();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
// create properties field
Properties props = new Properties();
props.put("mail.store.protocol", "pop3s");
props.put("mail.pop3s.host", pop3Host);
props.put("mail.pop3s.ssl.enable", "true");
props.put("mail.pop3s.ssl.trust", "*");
props.put("mail.pop3s.port", "995");
Session emailSession = Session.getDefaultInstance(props);
emailSession.setDebug(false);
// create the POP3 store object and connect with the pop server
Store store = emailSession.getStore("pop3s");
store.connect(pop3Host, login, password);
// create the folder object and open it
Folder Inbox = store.getFolder("INBOX");
Inbox.open(Folder.READ_WRITE); // (Folder.READ_WRITE READ_ONLY)
// retrieve the messages from the folder in an array and print it
// messages = Inbox.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false));
messages = Inbox.getMessages(); // ALL
if (messages.length > 0) {
for (Message message : messages) {
if (true) {
rowMail.add("<rowmail>");
message.writeTo(stream); // тут скинули письмо в поток? вроде нормально, компиллятор не гавкает
ВОПРОС! что тут?
надо вернуть данные из потока в виде строки и записать в rowMail.add()
если кто знает подскажите, а то там много всякого с потоками и прочим
rowMail.add("</rowmail>");
}
}
} else {
// это так
}
Inbox.close(false);
store.close();
return rowMail;
} catch (NoSuchProviderException e) {
e.printStackTrace();
// log
} catch (MessagingException e) {
e.printStackTrace();
// log
} catch (IOException e) {
e.printStackTrace();
// log
} catch (Exception e) {
e.printStackTrace();
// log
}
return null; //плохо конечно но компилятор требует вставит сюда возврат, а что еще?
}
Заранее спасибо за ответы по ЗАДАННЫМ вопросам