J'ai cherché et essayé ceci tellement longtemps j'ai besoin de votre aide. J'ai un serveur qui reçoit des emails HTML. Après cela, je veux en avoir les parties (en-tête, sujet et corps). Obtenir l'en-tête et le sujet n'est pas un problème, mais le contenu est.Obtenir le contenu de MimeMessage en tant que chaîne
Alors, voici le code où je reçois un SmtpMessage:
private SmsItem getEmailData(SmtpMessage msg) throws MessagingException, IOException {
String to = msg.getHeaderValue("To");
String from = msg.getHeaderValue("From");
String content = null;
LOG.info("Mail from: " + from + " to: " + to);
String toNr;
Pattern mobileNr = Pattern.compile("(\\+?[0-9]+)@*");
Matcher matcher = mobileNr.matcher(to);
if (matcher.find()) {
toNr = Utils.processAddress(matcher.group(1));
} else {
throw new RuntimeException("Illegal address to send SMS from mail: " + to);
}
Pattern fromMail = Pattern.compile("\\<+([[email protected]]*)\\>+");
matcher = fromMail.matcher(from);
if(matcher.find()){
from = matcher.group(1);
LOG.info(from);
}else{
throw new RuntimeException("Ilegal From Address: " + from);
}
Maintenant, je reçois le contenu lui-même:
Session s = Session.getDefaultInstance(new Properties());
String ip = msg.toString();
ip = MimeUtility.decodeText(ip);
InputStream is = new ByteArrayInputStream(ip.getBytes("ISO-8859-1"));
MimeMessage mi = new MimeMessage(s, is);
Object message = mi.getContent();
String test = mi.getContent().toString();
test.toString();
Maintenant, j'ai une chaîne qui ressemble à ceci: [email protected]
Mais quand je l'écris comme ceci:
((Multipart) message).writeTo(System.out);
Je paie où je peux voir le contenu que je veux:
This is a multi-part message in MIME format.--------------010600010509000401060604Content-Type: text/plain; charset=utf-8; format=flowedContent-Transfer-Encoding: 7bit
*asdasd ad asd asddfgdfgsdfsd:-)*
asdsad
javax.mail.MessagingException: Empty multipart: multipart/alternative;
at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:548)
at ...
Mais il ne peut pas avoir raison vide? Je suis en train de l'obtenir le contenu comme ça:
if (message instanceof String)
{
message = (String)message;
LOG.info("String");
}
else if (message instanceof Multipart)
{
Multipart mp = (Multipart)message;
LOG.info("Count: " + mp.getCount() + mp.getParent() + test.toString());
for (int i = 0; i < mp.getCount(); i++){
LOG.info("Multipart");
LOG.info(i + ". " + mp.getBodyPart(i).toString());
BodyPart bp = mp.getBodyPart(i);
String dp = bp.getDisposition();
if(dp != null){
LOG.error("Something's wrong");
}else if(dp.equalsIgnoreCase("ATTACHMENT")){
LOG.error("Attachment dürfen nicht mitgegeben werden!");
}else{
content = bp.getContent().toString();
}
}
}
je vraiment besoin de ce fait et je suis à la recherche sur Internet pour les âges ..
Ce serait une bonne idée merci. Mais il serait préférable de le faire avec les choses que j'ai – Sundaze
Je ne reçois pas cette méthode sur l'ajout de commons-email à mon projet android avec gradle. J'ajoute ceci à mon projet: compile "commons-io: commons-io: +" –
@DineshVG Ajoute l'email commun d'Apache Commons à vos dépendances. Voir: https://mvnrepository.com/artifact/org.apache.commons/commons-email/1.4 – Daniel