2013-02-07 69 views
22

मेरे पास एक टोमकैट एप्लिकेशन है जिसे पुष्टिकरण ईमेल भेजने की आवश्यकता है। मैंने ईमेलर को जवामेल (mail.jar) के साथ मल्टीपार्ट टेक्स्ट/एचटीएमएल ईमेल भेजने के लिए कोड किया है। मैं जावा ईई उदाहरणों पर कोड आधारित है। मैं स्थानीय सर्वर पर एसएमटीपी एमटीए का उपयोग कर रहा हूं।सर्वोत्तम व्यवहार - जवामेल माइम मल्टीपार्ट ईमेल भेजना - और जीमेल

यह बहुत अच्छा काम करता है। आउटलुक में, मैं HTML संस्करण देखता हूं। अगर मैं इसे Outlook स्पैम फ़ोल्डर में खींचता हूं, तो मुझे टेक्स्ट संस्करण दिखाई देता है। तो मैं यह कहता हूं कि यह काम करता है।

हालांकि, अगर मैं जीमेल में ईमेल देखता हूं, तो मुझे केवल टेक्स्ट संस्करण दिखाई देता है। मुझे पता है कि एचटीएमएल वहां है (यही वह जगह है जहां से इसे आउटलुक मिला)। लेकिन जीमेल यह नहीं दिखा रहा है ... मेरे पास अन्य सिस्टम से बहुत से ईमेल हैं जो जीमेल में एचटीएमएल के रूप में दिखाए जाते हैं।

क्या कोई मुझे उस spec पर इंगित कर सकता है जो दिखाता है कि मुझे क्या याद आ रहा है? क्या मुझे विशेष हेडर बनाने की ज़रूरत है?

धन्यवाद

कोड इस तरह दिखता है:

Message message = new MimeMessage(session); 
Multipart multiPart = new MimeMultipart("alternative"); 

try { 

    MimeBodyPart textPart = new MimeBodyPart(); 
    textPart.setText(text, "utf-8"); 

    MimeBodyPart htmlPart = new MimeBodyPart(); 
    htmlPart.setContent(html, "text/html; charset=utf-8"); 

    multiPart.addBodyPart(htmlPart); 
    multiPart.addBodyPart(textPart); 
    message.setContent(multiPart); 

    if(from != null){ 
     message.setFrom(new InternetAddress(from)); 
    }else 
     message.setFrom(); 

    if(replyto != null) 
     message.setReplyTo(new InternetAddress[]{new InternetAddress(replyto)}); 
    else 
     message.setReplyTo(new InternetAddress[]{new InternetAddress(from)}); 

    InternetAddress[] toAddresses = { new InternetAddress(to) }; 
    message.setRecipients(Message.RecipientType.TO, toAddresses); 
    message.setSubject(subject); 
    message.setSentDate(new Date()); 

    Transport.send(message); 

} catch (AddressException e) { 
    e.printStackTrace(); 
    System.out.println("Error: "+e.getMessage()); 

} catch (MessagingException e) { 
    e.printStackTrace(); 
    System.out.println("Error: "+e.getMessage()); 

} finally {  
    System.out.println("Email sent!"); 
} 
+0

आपका कोड ठीक दिखता है। सुरक्षित रूप से एचटीएमएल सामग्री को प्रस्तुत करने वाले सभी मुद्दों से बचने के लिए जीमेल जानबूझकर सादा पाठ संस्करण प्रदर्शित कर सकता है। एक विकल्प दिया गया है, यह सादे पाठ पसंद कर सकते हैं। –

उत्तर

51

हल! ऐसा लगता है कि मल्टीपार्ट एमआईएमई स्पेक के अनुसार, भागों का क्रम महत्वपूर्ण है। उन्हें कम निष्ठा से उच्च निष्ठा के क्रम में जोड़ा जाना चाहिए। तो ऐसा लगता है कि जीमेल ने spec का पालन किया है और अंतिम भाग का उपयोग करता है। मेरे मामले में मैंने उन्हें HTML, टेक्स्ट किया था। मैं सिर्फ पाठ, HTML करने के क्रम बदली और जीमेल इसे सही ढंग से renders ...

अर्थात

MimeBodyPart textPart = new MimeBodyPart(); 
textPart.setText(text, "utf-8"); 

MimeBodyPart htmlPart = new MimeBodyPart(); 
htmlPart.setContent(html, "text/html; charset=utf-8"); 

multiPart.addBodyPart(textPart); // <-- first 
multiPart.addBodyPart(htmlPart); // <-- second 
message.setContent(multiPart); 

मदद के लिए धन्यवाद!

+0

धन्यवाद यह बहुत अच्छा है और वर्षों से मेरी समस्या हल हो गई है। एक और सवाल, हमें डेटा हैंडलर का उपयोग करके एचटीएमएल सामग्री में छवि जोड़ने की आवश्यकता होने पर हमें क्या करना चाहिए? – serkan