Il mio problema è il seguente:download del corpo del messaggio di posta elettronica contenente immagini inline in java
Ho impostato il mio codice per leggere le e-mail da un determinato account. Quella parte funziona perfettamente.
il problema è con l'analisi del messaggio di posta elettronica. Separazione di allegati e corpo dell'e-mail (contenente immagini in linea).
Il mio codice va in questo modo:
Void readMessages(Folder folder){
Message[] messages = folder.getMessages();
// loading of message objects.
for (int messageNumber = 0; messageNumber < messages.length; messageNumber++) {
final Message currentMessage = messages[messageNumber];
logger.info("Handling the mail with subject " + currentMessage.getSubject());
logger.info("Content type for the current message is " + currentMessage.getContentType());
final String messageFileName = currentMessage.getFileName();
logger.info("File name for the message " + messageFileName + ". File name is blank "
+ StringUtils.isBlank(messageFileName));
Object messageContentObject = currentMessage.getContent();
if (messageContentObject instanceof Multipart) {
Multipart multipart = (Multipart) messageContentObject;
// downloading all attachments....
int attachmentCount = multipart.getCount();
logger.info("Number of attachments ");
for (int i = 0; i < attachmentCount; i++) {
Part part = (Part) multipart.getBodyPart(i);
downloadAttachment(part, folderPath.toString());
}
}
}
}
}
private void downloadAttachment(Part part, String folderPath) throws Exception {
String disPosition = part.getDisposition();
String fileName = part.getFileName();
String decodedText = null;
logger.info("Disposition type :: " + disPosition);
logger.info("Attached File Name :: " + fileName);
if (disPosition != null && disPosition.equalsIgnoreCase(Part.ATTACHMENT)) {
logger.info("DisPosition is ATTACHMENT type.");
File file = new File(folderPath + File.separator + decodedText);
file.getParentFile().mkdirs();
saveEmailAttachment(file, part);
} else if (fileName != null && disPosition == null) {
logger.info("DisPosition is Null type but file name is valid. Possibly inline attchment");
File file = new File(folderPath + File.separator + decodedText);
file.getParentFile().mkdirs();
saveEmailAttachment(file, part);
} else if (fileName == null && disPosition == null) {
logger.info("DisPosition is Null type but file name is null. It is email body.");
File file = new File(folderPath + File.separator + "mail.html");
file.getParentFile().mkdirs();
saveEmailAttachment(file, part);
}
}
protected int saveEmailAttachment(File saveFile, Part part) throws Exception {
BufferedOutputStream bos = null;
InputStream is = null;
int ret = 0, count = 0;
try {
bos = new BufferedOutputStream(new FileOutputStream(saveFile));
part.writeTo(new FileOutputStream(saveFile));
} finally {
try {
if (bos != null) {
bos.close();
}
if (is != null) {
is.close();
}
} catch (IOException ioe) {
logger.error("Error while closing the stream.", ioe);
}
}
return count;
}
Il problema che ottengo è quando ho eseguito questo codice, ottengo un file HTML, ma le immagini in linea è sostituito da un segno un'immagine di errore per il quale indica l'immagine con nessuna fonte.
Per favore aiutatemi. Fammi sapere se sono necessarie ulteriori informazioni.
Ho provato anche salvare il corpo come un file .eml
modificando:
File file = new File(folderPath + File.separator + "mail.html");
a
File file = new File(folderPath + File.separator + "mail.eml");
ma ho ottenuto gli stessi risultati.
"..da un segno per l'immagine di errore che indica l'immagine senza fonte." Sei sicuro che la fonte sia vuota? Hai controllato la sorgente HTML? – Janoz
Controlla questo file HTML. https://www.dropbox.com/s/5evk4pjq721yo8m/mail.html – GSG
Questo codice HTML ti mostrerà la sorgente dell'immagine mancante. – GSG