Всем привет. Подскажите, как преобразовать тело письма в стркоу для дальнейшего парсинга, если getContentType выдает
multipart/RELATED;
boundary="=swift_v4_1537887900_699eef32ec246c2aac8bf9cdd37225fb = "
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", emailID, password);
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
Message[] messages = null;
boolean mailFound = false;
Message email = null;
for (int i = 0; i < 30; i++) {
messages = folder.search(new SubjectTerm(subjectToBeSearched), folder.getMessages());
if (messages.length == 0) {
Thread.sleep(10000);
}
}
for (Message mail : messages) {
if (!mail.isSet(Flags.Flag.SEEN)) {
email = mail;
mailFound = true;
System.out.println("Mail is found");
}
}
/*String content = (String) email.getContent();
pass = content.substring(content.indexOf("Password:") + 1, content.indexOf("</td>"));
System.out.println(pass);*/
Вот код получения письма
1 лайк
BabyRoot
(Vasily)
26.Сентябрь.2018 12:52:23
#2
Что-то подобное. Надо использовать Multipart
.
StringBuilder mail_mess = new StringBuilder();
if (message.getContentType().toLowerCase().contains("multipart/")) {
Multipart mp = (Multipart) message.getContent();
for (int i=0; i<mp.getCount(); i++){
Part part = mp.getBodyPart(i);
if (part.getContentType().toLowerCase().contains("text/")
&& !part.getContentType().toLowerCase().contains("/calendar")) {
mail_mess.append( (String) part.getContent() );
}
}
}
sergueik
(Сергей Кузьмин)
26.Сентябрь.2018 13:42:08
#3
Почему на таком содержимом:
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td align="center" height="103" ><a href="https://www.codemyconcept.com/" target="_blank"><img src="cid:16b17ed277eb6fd6a131fcce542a012e@www.codemyconcept.com" border="0" style="vertical-align:top;" width="188" height="47" alt="codemyconcept" /></a></td>
</tr>
</table>
<!--[if gte mso 9]>
</v:textbox>
</v:rect>
<![endif]-->
</td>
</tr>
<tr>
<td class="frame" bgcolor="#ffffff" style="padding:40px 60px 34px;">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td style="padding:0 0 24px; font:14px/24px Verdana, Geneva, sans-serif; color:#333;">
<b>Hello!</b>
<br />
A request to reset your password has been made.
</td>
</tr>
<tr>
<td class="frame" style="border-radius:14px; border:2px solid #c2d2de; padding:23px 27px 26px;">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td style="font:14px/24px Verdana, Geneva, sans-serif; color:#333;">Password: e22wwGy5</td>
</tr>
<tr>
<td style="font:14px/24px Verdana, Geneva, sans-serif; color:#3399cc;"><a href="https://www.codemyconcept.com/login" target="_blank" style="text-decoration:none; color:#3399cc;">https://www.codemyconcept.com/login</a></td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="padding:23px 0 14px; border-bottom:2px solid #c2d2de; font:14px/24px Verdana, Geneva, sans-serif; color:#333;">
If you should have problems with the password provided above,<br />please feel free to contact us at <span style="font:14px/24px Verdana, Geneva, sans-serif; text-decoration:none; color:#3399cc;">hello@codemyconcept.com</span> and we will assist you right away!
</td>
</tr>
<tr>
Не отрабатывает
pass = mail_mess.substring(mail_mess.indexOf("Password: "), mail_mess.indexOf("</td>"));
System.out.println(pass);
и не возвращает подстроку пароля?
BabyRoot
(Vasily)
28.Сентябрь.2018 12:57:18
#5
Тег </td>
ищется для всей строки mail_mess
, по этому, лучше разделить на 2 шага - первый взять субстринг начиная с Пассворда, ворой шаг - от того что получилось на первом шаге - искать /td.
MOSTOR
28.Сентябрь.2018 14:12:24
#6
может лучше использовать специальные инструменты для работы с html? Например jsoup
BabyRoot
(Vasily)
28.Сентябрь.2018 14:15:15
#7
Это обсуждалось тут Не получается достать пароль из письма JavaMail
Влада, просто топиком ошиблась.
Да я просто в работе со строками плаваю пока, но вы дали мне хорошую наводку. Вообщем, реализовала так:
String str1 = mail_mess.substring(mail_mess.indexOf("Password: "));
String str2 = str1.substring(0, str1.indexOf("</td>"));
String pass = str2.split(" ")[1].substring(0,8);
System.out.println(pass);
Я теперь поняла, что изначально нужно было во всем mail_mess
отсечь лишнее и уже работать со строкой понятной
1 лайк