2011-03-07 27 views
51

भेजने के लिए मुझे ईमेल के माध्यम से HTML फ़ाइल भेजनी है लेकिन अटैचमेंट के रूप में नहीं।एचटीएमएल ईमेल

Message simpleMessage = new MimeMessage(mailSession); 
try { 
    fromAddress = new InternetAddress(from); 
    toAddress = new InternetAddress(to); 

} catch (AddressException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

try { 
    simpleMessage.setFrom(fromAddress); 
    simpleMessage.setRecipient(RecipientType.TO, toAddress); 

    simpleMessage.setSubject(subject); 
    simpleMessage.setText(text); 

    Transport.send(simpleMessage); 
} catch (MessagingException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

यह टेक्स्ट संदेश के साथ ईमेल भेज रहा है।

MimeMessage simpleMessage = new MimeMessage(mailSession); 

फिर, जब आप संदेश का मुख्य भाग सेट करना चाहते हैं, या तो कॉल: मैं जो एक और फ़ाइल में संग्रहीत किया जाता है लेकिन नहीं अनुलग्नक के रूप में

+3

आपको वास्तव में [अपने प्रश्नों पर कुछ उत्तरों को स्वीकार करना चाहिए] (http://stackoverflow.com/faq#howtoask)। – dkarp

उत्तर

104

अपने MimeMessageMessage लिए Upcast न करें HTML सामग्री भेजना चाहते हैं

simpleMessage.setText(text, "utf-8", "html"); 

या फोन

simpleMessage.setContent(text, "text/html; charset=utf-8"); 

यदि आप utf-8 के अलावा एक वर्णमाला का उपयोग करना चाहते हैं, तो इसे उचित स्थान पर प्रतिस्थापित करें।

JavaMail अमूर्त कि अक्सर आप Multipart, Message, और Address तरह कक्षाएं पकड़े छोड़ देता है की एक अतिरिक्त, बेकार परत है, जो सभी वास्तविक उपवर्गों (MimeMultipart, MimeMessage, और InternetAddress) है कि वास्तव में निर्माण किया जा रहा है की तुलना में कम कार्यक्षमता है ...

+0

मैं 'simpleMessage.setContent (टेक्स्ट, "टेक्स्ट/एचटीएमएल; charset = utf-8") के साथ प्रश्न में कोड का उपयोग कर रहा हूं; सामग्री को सेट करने के लिए, लेकिन इसे करने पर, जहां सामग्री में मेरे पास कोई प्रश्न चिह्न है '=' इसे '= 3 डी' में परिवर्तित कर दिया गया है जो HTML गुणों को सही ढंग से सेट करने से रोकता है, कोई विचार क्यों? – mohamnag

+1

@ मोहम्मदग आप शायद ध्यान दें कि परिणामस्वरूप संदेश में 'हेडर-ट्रांसफर-एन्कोडिंग: उद्धृत-प्रिंट करने योग्य' पढ़ने वाला हेडर है। (ऐसा संभव है क्योंकि आप अपने एचटीएमएल भाग में गैर-ASCII पाठ शामिल कर रहे हैं और ईमेल को गैर-ASCII सामग्री पसंद नहीं है।) संदेश के प्राप्तकर्ता को '= 3 डी' को परिवर्तित करने के लिए संदेश सामग्री को स्थानांतरित करने की आवश्यकता होगी वापस '=' s है। प्राप्तकर्ता पक्ष पर 'MimeMessage.getContentStream' के बजाय' MimeMessage.getInputStream' का उपयोग करने का प्रयास करें। – dkarp

+0

@dkrap इसका उल्लेख करने के लिए धन्यवाद, मैं स्थानांतरण एन्कोडिंग को अनदेखा कर रहा था और परिणामस्वरूप HTML सही ढंग से प्रदर्शित नहीं हो रहा था। – mohamnag

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