के साथ जावामेल का उपयोग करके मुझे जावामेल एपीआई के संबंध में एसओ पर कई अन्य प्रश्न मिले और एक एसएमटीपी सर्वर के माध्यम से मेल भेजना, लेकिन उनमें से कोई भी टीएलएस सुरक्षा का उपयोग करके चर्चा नहीं कर पाया। मैं अपने काम के लिए एसएमटीपी मेल सर्वर के माध्यम से अपने आप को स्टेटस अपडेट भेजने के लिए जावामेल का उपयोग करने की कोशिश कर रहा हूं, लेकिन इसके लिए टीएलएस की आवश्यकता है, और मुझे किसी भी उदाहरण के लिए जावामेल का उपयोग करने के लिए कोई उदाहरण नहीं मिल सकता है जो एक एसएमटीपी सर्वर तक पहुंचने के लिए है जिसे टीएलएस एन्क्रिप्शन की आवश्यकता होती है। क्या कोई इसके लिए सहायता कर सकता है?टीएलएस
टीएलएस
उत्तर
हमारे पास वास्तव में हमारे उत्पाद में कुछ अधिसूचना कोड है जो मेल उपलब्ध कराने के लिए टीएलएस का उपयोग करता है।
आपको जावा मेल गुण सेट करने की आवश्यकता होगी। आपको केवल टीएलएस की आवश्यकता है लेकिन अगर आपका एसएमटीपी सर्वर एसएसएल का उपयोग करता है तो आपको एसएसएल की आवश्यकता हो सकती है।
Properties props = new Properties();
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.auth", "true"); // If you need to authenticate
// Use the following if you need SSL
props.put("mail.smtp.socketFactory.port", d_port);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
फिर आप या तो एक JavaMail सत्र या Session.getDefaultInstance(props)
की तरह किसी अन्य सत्र instantiator को यह पारित कर सकते हैं।
अच्छा पोस्ट, लाइन
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
अनिवार्य एसएमटीपी सर्वर, एसएसएल प्रमाणीकरण का उपयोग करता है, तो जीमेल एसएमटीपी सर्वर की तरह काम करता है। हालांकि यदि सर्वर TLS पर प्लेनटेक्स्ट प्रमाणीकरण का उपयोग करता है, तो यह उपस्थित नहीं होना चाहिए, क्योंकि जावा मेल प्रारंभिक कनेक्शन सादे टेक्स्ट के बारे में शिकायत करेगा।
यह भी सुनिश्चित करें कि आप जावा मेल का नवीनतम संस्करण उपयोग कर रहे हैं। हाल ही में मैंने पिछले प्रोजेक्ट से कुछ पुराने जावा मेल जार का इस्तेमाल किया था और कोड काम नहीं कर सका, क्योंकि लॉगिन प्रक्रिया विफल रही थी। जावा मेल के नवीनतम संस्करण में अपग्रेड करने के बाद, त्रुटि का कारण स्पष्ट हो गया: यह एक javax.net.ssl.SSLHandshakeException था, जिसे lib के पुराने संस्करण में नहीं फेंक दिया गया था।
ऊपर दिए गए उदाहरण से सेटिंग्स उस सर्वर के लिए काम नहीं करती थी जिसका उपयोग मैं कर रहा था (authsmtp.com)। मुझे यह त्रुटि मिल रही है:
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
मैंने mail.smtp.socketFactory सेटिंग्स और सबकुछ काम किया। अंतिम सेटिंग्स इस थे (एसएमटीपी प्रमाणन इस्तेमाल किया गया था नहीं और मैं बंदरगाह कहीं और सेट):
java.util.Properties props = new java.util.Properties();
props.put("mail.smtp.starttls.enable", "true");
बस निम्नलिखित कोड का उपयोग करें। यह जावा के माध्यम से ईमेल भेजने के लिए वास्तव में उपयोगी है, और यह काम करता है:
import java.util.*;
import javax.activation.CommandMap;
import javax.activation.MailcapCommandMap;
import javax.mail.*;
import javax.mail.Provider;
import javax.mail.internet.*;
public class Main {
public static void main(String[] args) {
final String username="[email protected]";
final String password="password";
Properties prop=new Properties();
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.host", "smtp.gmail.com");
prop.put("mail.smtp.port", "587");
prop.put("mail.smtp.starttls.enable", "true");
Session session = Session.getDefaultInstance(prop,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
String body="Dear Renish Khunt Welcome";
String htmlBody = "<strong>This is an HTML Message</strong>";
String textBody = "This is a Text Message.";
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));
message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("[email protected]"));
message.setSubject("Testing Subject");
MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
CommandMap.setDefaultCommandMap(mc);
message.setText(htmlBody);
message.setContent(textBody, "text/html");
Transport.send(message);
System.out.println("Done");
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
Simple Java Mail 5.0.0 के साथ (simplejavamail.org) यह बहुत ही सरल है और पुस्तकालय आप के लिए सभी सत्र गुण का ख्याल रखना होगा।
यहाँ गूगल के SMTP सर्वर का उपयोग एक उदाहरण है:
Email email = EmailBuilder.startingBlank()
.from("lollypop", "[email protected]")
.to("C.Cane", "[email protected]")
.withSubject("hey")
.withPlainText("We should meet up!")
.withHTMLText("<b>We should meet up!</b>")
.buildEmail();
MailerBuilder.withSMTPServer("smtp.gmail.com", 25, "user", "pass", SMTP_TLS)
.buildMailer()
.sendMail(email);
MailerBuilder.withSMTPServer("smtp.gmail.com", 587, "user", "pass", SMTP_TLS)
.buildMailer()
.sendMail(email);
MailerBuilder.withSMTPServer("smtp.gmail.com", 465, "user", "pass", SMTP_SSL)
.buildMailer()
.sendMail(email);
आप द्वि-कारक लॉगिन चालू किया हुआ है, तो आप अपने गूगल खाते से एक application specific password उत्पन्न करने के लिए की जरूरत है।
- 1. टीएलएस
- 2. टीएलएस
- 3. टीएलएस/एसएसएल
- 4. एफटीपीएस (टीएलएस/एसएसएल)
- 5. Java.nio चैनल और टीएलएस
- 6. सी # एएसपी.नेट टीएलएस
- 7. रूबी प्रोग्राम से टीएलएस
- 8. STARTTLS बनाम एसएसएल/टीएलएस
- 9. एसएसएल/टीएलएस सिक्योर चैनल
- 10. टीएलएस हैंडशेक संदेश पार्सिंग
- 11. एसपीडीवाई - टीएलएस के बिना?
- 12. जावा टीएलएस-पीएसके सॉकेट
- 13. ब्राउज़र में टीएलएस/एसआरपी?
- 14. टीएलएस/एसएसएल प्रोटोकॉल को समझना
- 15. आईएमएपी + टीएलएस/एसएसएल synapse के साथ?
- 16. PHP सर्वर सॉकेट के साथ टीएलएस
- 17. एंड्रॉइड टीएलएस कनेक्शन और स्वयं हस्ताक्षरित प्रमाणपत्र
- 18. Nodejs के माध्यम से टीएलएस सॉकेट कनेक्शन
- 19. जावा क्लाइंट में एसएनआई के साथ टीएलएस
- 20. एसएसएल/टीएलएस प्रमाण पत्र के बिना
- 21. टीएफएस - टीएलएस स्रोत नियंत्रण के तहत उपयोगकर्ता
- 22. नेटटी https (टीएलएस) सत्र अवधि: पुनर्विचार की आवश्यकता क्यों है?
- 23. पायथन में सक्रिय कनेक्शन पर टीएलएस कैसे शुरू करें?
- 24. क्या गोलांग टीएलएस आईई 8 का समर्थन करता है?
- 25. क्या डार्ट समर्थन क्लाइंट एसएसएल/टीएलएस कनेक्शन अभी तक है?
- 26. HsOpenSSL एपीआई का उचित उपयोग एक टीएलएस सर्वर
- 27. एसएसएल वेबसाइट: एसएसएल/टीएलएस सुरक्षित चैनल नहीं बना सका
- 28. https: अपाचे टीएलएस रीनेगोसिएशन: डेबियन, अपाचे 2, ओपनएसएल। कैसे?
- 29. त्रुटि: सी # अंतर्निहित कनेक्शन बंद था: एसएसएल/टीएलएस सुरक्षित चैनल
- 30. एसएसएल और टीएलएस और जावा में उनके उपयोग
बहुत बहुत धन्यवाद! सचमुच मैंने जो किया वह लाइन props.put ("mail.smtp.starttls.enable", "true") जोड़ रहा था; मेरे कोड के लिए और यह पूरी तरह से काम किया! – dancavallaro
ध्यान दें कि आधुनिक जावा.मेल के साथ सॉकेट फैक्ट्री की आवश्यकता नहीं है: http://stackoverflow.com/questions/17581066/using-javamail-with-a-self-igned-certificate/17584714#17584714 – Vadzim