Mój cel: Wysyłaj wiadomości e-mail transakcyjne przez SMTP za pomocą zwykłego/tekstu, tekstu/html i załączników.Wysyłaj wiadomości e-mail przez SMTP z załącznikiem, zwykły tekst i tekst/hml
Mój kod: realizowane z JavaMail
Mój problem: Wygląda dobrze na Hotmail lub perspektywy. Ale na gmail nie wyświetla ona treści wiadomości poprawnie, jeśli jest to wiadomość e-mail z załącznikiem .txt (działa poprawnie, jeśli załączniki są obrazami).
Oto mój surowy wyjście SMTP:
Subject: ALTERNATIVE | TXT | HTML |ATT.ATTACHMENT | Thu Jun 13 17:48:04 EDT
2013
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_Part_0_21791733.1371160084561"
------=_Part_0_21791733.1371160084561
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Body message in text format!
------=_Part_0_21791733.1371160084561
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit
Body message in <b>html</b> format! Sent on Thu Jun 13 17:48:04 EDT 2013<br> to: [email protected]<br> to: [email protected]<br> cc: [email protected]<br> cc: [email protected]
------=_Part_0_21791733.1371160084561
Content-Type: text/plain; charset=us-ascii; name=email_attachment.txt
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename=email_attachment.txt
This is a text attachment file!
------=_Part_0_21791733.1371160084561--
.
250 Delivery in progress
QUIT
Niektóre screeny
Wysłane tylko jedną .txt przywiązania. Treść wiadomości nie jest wyświetlana, a załącznik jest duplikowany.
samej wiadomości, ale z innym mocujące (gif). Wszystko wygląda dobrze.
=== ROZWIĄZANIE DLA Java Developers ====
Ogólna idea opisana jest tutaj: http://www.coderanch.com/t/503380/java/java/Java-Mail-text-html-attachment
Więc teraz moje kod wygląda następująco:
// contentPart is the content to be sent. It is divided in bodyContent and attachmentContent
MimeMultipart contentPart = new MimeMultipart("mixed");
// Message body in txt and html format
MimeMultipart bodyPart = new MimeMultipart("alternative");
// Creates plain text message
BodyPart bodyTxt = new MimeBodyPart();
bodyTxt.setText(getMessageBodyText());
// Creates html message
BodyPart bodyHtml = new MimeBodyPart();
bodyHtml.setContent(getMessageBodyHtml(), "text/html");
bodyPart.addBodyPart(bodyTxt);
bodyPart.addBodyPart(bodyHtml);
// Wrapper for bodyTxt and bodyHtml
MimeBodyPart bodyContent = new MimeBodyPart();
bodyContent.setContent(bodyPart);
// At this point, contentPart contains bodyTxt and bodyHtml wrapped in a multipart/alternative
contentPart.addBodyPart(bodyContent);
// Adds attachments to contentPart
if (getAttachments() != null) {
for(File f : getAttachments()) {
try {
MimeBodyPart attachmentPart = new MimeBodyPart();
attachmentPart.attachFile(f);
contentPart.addBodyPart(attachmentPart);
} catch (IOException e) {
logger.severe("Could not attach file to email!" +
" TO: "+ getTo().toString() +
"; CC: "+ getCc().toString() +
"; ExceptionMessage: " + e.getMessage());
throw new SmtpRequestException(e.getMessage());
}
}
}
Zgadza się. Właściwie to zaimplementowałem rozwiązanie tego problemu trochę przed zobaczeniem twojej odpowiedzi. Dziękuję Ci bardzo. – Rafa
Co się stanie, jeśli niektóre załączniki są faktycznie obrazkami osadzonymi w części text/html? Jak wygląda wtedy właściwa struktura? Czy mogę po prostu zastąpić "mixed" przez "related"? Czy muszę używać różnych części do "powiązanych" załączników z dyspozycją INLINE i "mieszanych" do reszty? Jestem bardzo zdezorientowany ... :( – snooze92
Trzymaj mieszane.Odpowiedzi przedstawione tutaj działały bardzo z plików tekstowych i binarnych. – Rafa