2012-01-23 17 views
6

मैं एक समस्या पहले से ही आज सुबह हल किया था: Java Mail, sending multiple attachments not workingजावा मेल - अनुलग्नकों && इनलाइन चित्र

इस बार मैं थोड़ी ज्यादा जटिल समस्या है: मैं छवियों के साथ संलग्न फाइल गठबंधन करना चाहते हैं।

import java.io.IOException; 
import java.util.Properties; 

import javax.activation.DataHandler; 
import javax.activation.FileDataSource; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 

public class MailTest 
{ 

    public static void main(String[] args) throws AddressException, MessagingException, IOException 
    { 
     String host = "***"; 
     String from = "***"; 
     String to = "***"; 

     // Get system properties 
     Properties props = System.getProperties(); 

     // Setup mail server 
     props.put("mail.smtp.host", host); 

     // Get session 
     Session session = Session.getDefaultInstance(props, null); 

     // Define message 
     MimeMessage message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(from)); 
     message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
     message.setSubject("Hello JavaMail"); 

     // Handle attachment 1 
     MimeBodyPart messageBodyPart1 = new MimeBodyPart(); 
     messageBodyPart1.attachFile("c:/Temp/a.txt"); 

     // Handle attachment 2 
     MimeBodyPart messageBodyPart2 = new MimeBodyPart(); 
     messageBodyPart2.attachFile("c:/Temp/b.txt"); 

     FileDataSource fileDs = new FileDataSource("c:/Temp/gti.jpeg"); 
     MimeBodyPart imageBodypart = new MimeBodyPart(); 
     imageBodypart.setDataHandler(new DataHandler(fileDs)); 
     imageBodypart.setHeader("Content-ID", "<myimg>"); 
     imageBodypart.setDisposition(MimeBodyPart.INLINE); 

     // Handle text 
     String body = "<html><body>Elotte<img src=\"cid:myimg\" width=\"600\" height=\"90\" alt=\"myimg\" />Utana</body></html>"; 

     MimeBodyPart textPart = new MimeBodyPart(); 
     textPart.setHeader("Content-Type", "text/plain; charset=\"utf-8\""); 
     textPart.setContent(body, "text/html; charset=utf-8"); 

     MimeMultipart multipart = new MimeMultipart("mixed"); 

     multipart.addBodyPart(textPart); 
     multipart.addBodyPart(imageBodypart); 
     multipart.addBodyPart(messageBodyPart1); 
     multipart.addBodyPart(messageBodyPart2); 

     message.setContent(multipart); 

     // Send message 
     Transport.send(message); 
    } 
} 

जब मैं Gmail हर चीज में ईमेल खोलने ठीक है: मैं दो संलग्नक है, और छवि मेल की सामग्री में प्रदर्शित किया जाता है (img टैग में)।

समस्या थंडरबर्ड और राउंडक्यूबिक वेबमेल के साथ है: छवि की तरह दिखने वाला प्रत्येक व्यक्ति गायब है और अटैचमेंट के रूप में इसे नीचे प्रदर्शित कर रहा है।

मैं यह काम कैसे कर सकता हूं?

+0

माइक्रोसॉफ्ट आउटलुक 2010 अब इनलाइन-छवियों को अनुमति नहीं देता है! क्या यह आपके लिए एक बड़ी समस्या है? –

+0

वैसे मैं Outlook का उपयोग नहीं कर रहा था लेकिन थंडरबर्ड। मल्टीपार्ट को "संबंधित" से "मिश्रित" में बदलने से पहले यह काम कर रहा था। Pls। जुड़े हुए स्टैक ओवरफ्लो प्रश्न देखें। – dbalakirev

+0

इसलिए मुझे इसका उपयोग करके हल किया गया: http://static.springsource.org/spring/docs/1.2.x/reference/mail.html वसंत पृष्ठभूमि में चाल चल रहा है। लेकिन मैं सवाल बंद नहीं कर सकता क्योंकि मेरा प्रतिनिधि पर्याप्त नहीं है। – dbalakirev

उत्तर

2

काफी विश्वसनीय org.apache.commons.mail library से ImageHtmlEmail का उपयोग भी है। (अद्यतन: इसे केवल 1.3 के स्नैपशॉट में शामिल किया गया है) उदाहरण के लिए:

HtmlEmail email = new ImageHtmlEmail(); 
    email.setHostName("mail.myserver.com"); 
    email.addTo("[email protected]", "John Doe"); 
    email.setFrom("[email protected]", "Me"); 
    email.setSubject("Test email with inline image"); 

    // embed the image and get the content id 
    URL url = new URL("http://www.apache.org/images/asf_logo_wide.gif"); 
    String cid = email.embed(url, "Apache logo"); 

    // set the html message 
    email.setHtmlMsg(htmlEmailTemplate, new File("").toURI().toURL(), false); 
1

तो मैं इस दे javamail जाने के लिए और वसंत आवरण का उपयोग द्वारा हल मिल गया:

http://static.springsource.org/spring/docs/1.2.x/reference/mail.html

मैं नहीं जानता कि क्या जादू पृष्ठभूमि में क्या कर रही है, लेकिन यह काम करता है।

सभी के लिए धन्यवाद!

संबंधित मुद्दे