2010-01-11 19 views
10

मैंने कई साइट्स पर पढ़ा है, जब JavaMail API का उपयोग करते हैं, तो संपत्ति mail.smtp.ssl.enable को सत्य पर सेट करने के लिए। मैं कुछ कोड के रूप में निम्नानुसार है:जावामेल मेल.smtp.ssl.enable काम नहीं कर रहा है

props.put("mail.smtp.host", "exchangemail1.example.com"); 
props.put("mail.from", "[email protected]"); 
props.put("mail.smtp.starttls.enable", "true"); 
// I tried this by itself and also together with ssl.enable) 
props.put("mail.smtp.ssl.enable", "true"); 

Session session = Session.getInstance(props, null); 
MimeMessage msg = new MimeMessage(session); 
msg.setFrom(); 
msg.setRecipients(Message.RecipientType.TO, "[email protected]"); 
    // also tried @gmail.com 
msg.setSubject("JavaMail ssl test"); 
msg.setSentDate(new Date()); 
msg.setText("Hello, world!\n"); 
props.put("mail.smtp.auth", "false"); 

Transport trnsport; 
trnsport = session.getTransport("smtp"); 
trnsport.connect(); 
msg.saveChanges(); 
trnsport.sendMessage(msg, msg.getAllRecipients()); 
trnsport.close(); 

इस ईमेल भेजता है, लेकिन:

  1. जब मैं यातायात पर कब्जा करते हैं, मैं देख रहा हूँ यह एन्क्रिप्टेड नहीं है
  2. डिबग (props.put("mail.debug", "true")), मैं देख रहा हूँ का उपयोग करते समय कि "isSSL गलत"

(मैं भी props.put("mail.smtp.auth","true") + उपयोगकर्ता/कूटशब्द में जोड़ने से ऊपर की कोशिश की ....)

कोई विचार क्या मैं गलत कर रहा हूँ?

उत्तर

2

मैं अपाचे commons-email का उपयोग करने का सुझाव दूंगा। इसमें सबसे अधिक उपयोग किए जाने वाले गुणों (एसएसएल/टीएलएस समेत) के लिए सेटर्स हैं और जावामेल एपीआई के उपयोग पर बैठने और बैठने के लिए अधिक मित्रवत हैं।

अद्यतन: मैं कॉमन्स-ईमेल कोड देख रहा था, और इन पंक्तियों देखा:

properties.setProperty("mail.smtp.starttls.enable", this.tls); 
properties.setProperty("mail.smtp.auth", "true"); 

हां, तो इन गुणों एक के रूप में अच्छी कोशिश दे।

11

SSL का उपयोग करने के लिए आप को बदल कर SMTPS को SMTP से अपने प्रोटोकॉल बदलना चाहिए

trnsport = session.getTransport("smtp"); 

को
trnsport = session.getTransport("smtps"); 
+0

मैं बस एसएसएल पर भेज रहा था और जब मैं session.getTransport ("smtps") को कॉल करता हूं; यह ठीक काम करता है। तो यह जवाब मान्य है। –

+0

यह संदेश के साथ बहिष्कृत है: 'प्रकार से स्थिर विधि भेजना (संदेश) परिवहन को स्थिर तरीके से एक्सेस किया जाना चाहिए' क्या 'smtps' निर्दिष्ट करने का एक और आधुनिक तरीका है? –

5

फार्म Java Doc:

ध्यान दें कि आप उपयोग कर रहे हैं SSL पर SMTP तक पहुंचने के लिए "smtps" प्रोटोकॉल, सभी गुणों का नाम होगा डी "mail.smtps। *"।

3

props.put("mail.smtp.auth", "true"); 
props.setProperty("mail.smtp.**ssl.enable", "true"); 
props.setProperty("mail.smtp.**ssl.required", "true"); 
2

यह JavaMail से SSLNOTES दस्तावेज़ से है (जोर जोड़ा) का प्रयास करें:

पहले, और शायद सबसे सरल, के उपयोग सक्षम करने के लिए एक गुण सेट करने के लिए है एसएसएल। उदाहरण के लिए, एसएमटीपी कनेक्शन के लिए एसएसएल के उपयोग को सक्षम करने के लिए, संपत्ति "mail.smtp.ssl.enable" "सत्य" पर सेट करें।

वैकल्पिक रूप से, आप एसएसएल सक्षम प्रोटोकॉल नाम में से एक का उपयोग करने के JavaMail कॉन्फ़िगर कर सकते हैं। गैर-एसएसएल जावामेल प्रोटोकॉल के अलावा "imap", "pop3", और "smtp", प्रोटोकॉल "imaps", "pop3s", और "smtps" का उपयोग कर संबंधित सेवाओं से कनेक्ट करने के लिए उपयोग किया जा सकता है एक एसएसएल कनेक्शन।

- STARTTLS का समर्थन

STARTTLS समर्थन मानक "imap" और "smtp" प्रोटोकॉल में उपलब्ध है, लेकिन उचित संपत्ति की स्थापना द्वारा सक्षम किया जाना चाहिए mail.imap.starttls.enable या mail.smtp.starttls.enable, "सत्य" पर। सेट करते समय, यदि सर्वर STARTTLS कमांड का समर्थन करता है, तो यह कनेक्शन बनाने के बाद और जानकारी भेजने से पहले होगा।

तो STARTTLS समर्थन का उपयोग करते समय ऐसा लगता है कि प्रोटोकॉल को smtps पर सेट करना आवश्यक नहीं है।

+0

STARTTLS तंत्र का उपयोग करके [JavaMail README] (https://javaee.github.io/javamail/docs/README.txt) के अनुसार 'smtp' प्रोटोकॉल का उपयोग करने की आवश्यकता है। यह थोड़ा सा अंतर्ज्ञानी है। 'Smtps' प्रोटोकॉल का उद्देश्य सीधे SSL कनेक्शन के लिए है, जिसे STARTTLS की आवश्यकता नहीं है। – MikeOnline

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