2013-06-13 37 views
9

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.

enter image description here

samej wiadomości, ale z innym mocujące (gif). Wszystko wygląda dobrze. enter image description here

=== 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()); 
        } 
       } 
      } 

Odpowiedz

10

Struktura wiadomości jest nieprawidłowa. Potrzebujesz zagnieżdżonych wieloczęści, aby uzyskać odpowiednią strukturę, coś w tym stylu:

multipart/mixed 
    multipart/alternative (holding the two forms of the body part) 
     text/plain 
     text/html 
    text/plain or image/gif (the attachment) 
+0

Zgadza się. Właściwie to zaimplementowałem rozwiązanie tego problemu trochę przed zobaczeniem twojej odpowiedzi. Dziękuję Ci bardzo. – Rafa

+0

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

+0

Trzymaj mieszane.Odpowiedzi przedstawione tutaj działały bardzo z plików tekstowych i binarnych. – Rafa