मैं जकार्ता मेल और मेरे ईमेल प्रदाताओं (होवर) एसएमटीपी सर्वर का उपयोग करके एक ईमेल भेज रहा हूं। मुझे उम्मीद थी कि एसएमटीपी सर्वर सार्वजनिक कुंजी स्थापित करनी होगी, और यातायात को एन्क्रिप्ट करने के लिए अनुरोध के साथ इसे पास करना होगा। हालांकि ऐसा लगता है कि इसके बिना काम कर रहा है। यह SO उत्तर (https://stackoverflow.com/a/16843712) इंगित करता है कि यह आवश्यक नहीं हो सकता है क्योंकि होवर उपयोग करेगा एक वाणिज्यिक प्रमाणपत्र प्राधिकरण द्वारा हस्ताक्षरित एक प्रमाण पत्र। इसके अलावा डिबग प्रिंटआउट से संकेत मिलता है कि ssl का उपयोग किया गया था।

मेरे 2 प्रश्न हैं। पहला वह है जो वास्तव में नीचे दिए गए कोड द्वारा एन्क्रिप्ट किया गया है: लॉगिन, ईमेल, दोनों या न ही।

यहाँ कोड है:

        // to and from addresses
        String to = "myemail@gmail.com";
        String from = "myemail@mycompany.com";

        final String password = "mypassword";

        String host = "mail.hover.com";
        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");

        props.put("mail.smtp.ssl.enable", "true");
        
        // works same with this commented or not
        // props.put("mail.smtp.ssl.trust", "mail.hover.com");

        props.put("mail.smtp.host", host);
        props.put("mail.smtp.port", "465");
        
        // print out debug messages
        props.put("mail.debug", "true");
        
        //create the Session object
        Session session = Session.getInstance(props, new Authenticator() {
            
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(to, password);
            }
            
        });
        
        
        try {
            //create a MimeMessage object

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
            message.setSubject("Here comes Jakarta Mail!");
            message.setContent("Just discovered that Jakarta Mail is fun and easy to use", "text/html");

            //send the email message
             Transport.send(message);
            
            // this works too
            // Transport transport = session.getTransport("smtps");
            // transport.connect("mail.hover.com", 465, username, password);
            // transport.sendMessage(message, message.getAllRecipients());

            System.out.println("Email Message Sent Successfully");

        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    

    }

मेरा दूसरा सवाल यह है कि Google भेजे गए ईमेल को प्राप्त होने पर असत्यापित के रूप में क्यों चिह्नित करता है? मुझे संदेह है कि इसका मेरे पहले प्रश्न से कुछ लेना-देना है।

unverified email image

यहाँ मेरा डिबग प्रिंटआउट है:

डीबग: जकार्ता मेल संस्करण 2.0.0 डीबग: सफलतापूर्वक लोड किया गया संसाधन: /META-INF/javamail.default.providers DEBUG: लोड किए गए प्रदाताओं की तालिकाएँ DEBUG: वर्ग के नाम से सूचीबद्ध प्रदाता: {com.sun.mail.smtp.SMTPTransport=jakarta .mail.प्रदाता [ट्रांसपोर्ट, smtp, com.sun.mail.smtp.SMTPTransport, Oracle], com.sun.mail.imap.IMAPSSLStore=jakarta.mail.Provider[STORE,imaps,com.sun.mail.imap. IMAPSSLSstore,Oracle], com.sun.mail.pop3.POP3Store=jakarta.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], com.sun.mail.smtp.SMTPSSLTransport=jakarta। mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], com.sun.mail.imap.IMAPStore=jakarta.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore ,Oracle], com.sun.mail.pop3.POP3SSLStore=jakarta.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle]} डीबग: प्रोटोकॉल द्वारा सूचीबद्ध प्रदाता: {imap=jakarta.mail .प्रदाता [स्टोर, आईमैप, कॉम.sun.mail.imap.IMAPStore, Oracle], smtp=jakarta.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTranspor t,Oracle], pop3=jakarta.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], imaps=jakarta.mail.Provider[STORE,imaps,com.sun.mail.imap. IMAPSSLSstore,Oracle], smtps=jakarta.mail.Provider[Transport,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], pop3s=jakarta.mail.Provider[STORE,pop3s,com.sun.mail.pop3. POP3SSLStore, Oracle]} डीबग: सफलतापूर्वक लोड किया गया संसाधन: /META-INF/javamail.default.address.map DEBUG: getProvider() jakarta.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle लौटा रहा है ] डीबग एसएमटीपी: प्रमाणीकरण के लिए उपयोगकर्ता नाम और पासवर्ड की आवश्यकता है डीबग एसएमटीपी: प्रोटोकॉलकनेक्ट रिटर्निंग झूठा, होस्ट = mail.hover.com, उपयोगकर्ता = पॉल, पासवर्ड = डिबग एसएमटीपी: ईहलो सत्य का उपयोग करें, प्रामाणिक सत्य का उपयोग करें डीबग एसएमटीपी: होस्ट करने के लिए कनेक्ट करने का प्रयास "mail. hover.com", पोर्ट 465, isSSL ट्रू 220 smtp.hostedemail.com ESMTP डीबग SMTP: होस्ट "mail.hover.com", पोर्ट: 465 EHLO 192.168.0.12 250-omf04.hostedemail.com 250-PIPELINING 250- SIZE 36700160 250-ETRN 250-AUTH प्लेन लॉगइन 250-AUTH=PLAIN LOGIN 250- उन्नत STATUSCODES 250-8BITMIME 250-DSN 250 चंकिंग डिबग SMTP: मिला एक्सटेंशन "पाइपलाइनिंग", arg "" डीबग SMTP: मिला एक्सटेंशन "SIZE", arg "36700160" डिबग SMTP: मिला एक्सटेंशन "ETRN", arg "" डीबग SMTP: मिला एक्सटेंशन "AUTH", arg "PLAIN LOGIN" DEBUG SMTP: मिला एक्सटेंशन "AUTH=PLAIN", arg "LOGIN" DEBUG SMTP: एक्सटेंशन "ENHANCEDSTATUSCODES", arg "" DEBUG SMTP: मिला एक्सटेंशन "8BITMIME", arg "" DEBUG SMTP: एक्सटेंशन "DSN", arg "" DEBUG SMTP: मिला एक्सटेंशन "CHUNKING", arg "" DEBUG SMTP: प्रोटोकॉल कनेक्ट लॉगिन, host=mail.hover.com, user=myemail@mybusiness.ca, password= DEBUG SMTP: तंत्र का उपयोग करके प्रमाणित करने का प्रयास: लॉगिन सादा डाइजेस्ट-एमडी5 एनटीएलएम XOAUTH2 डिबग एसएमटीपी: तंत्र का उपयोग करना लॉग इन डिबग एसएमटीपी: प्रमाणीकरण लॉगिन कमांड ट्रेस दबा हुआ डीबग एसएमटीपी: प्रमाणीकरण लॉगिन सफल डिबग एसएमटीपी: उपयोग 8 बिट गलत मेल से: myemail@mybusiness.ca 250 ओके आरसीपीटी टू: myemail@gmail.com 250 2.1.5 ओके डिबग एसएमटीपी: सत्यापित पते डिबग एसएमटीपी: myemail@gmail.com डेटा 354 एंड डेटा के साथ। दिनांक: मंगल, 9 फरवरी 2021 10:31:07 -0500 (ईएसटी) से: myemail@mybusiness.ca सेवा मेरे: myemail@gmail.com संदेश-आईडी: <1880587495.0.1612884672084@[192.168.0.11]> विषय: यहां आता है जकार्ता मेल! माइम-संस्करण: १.० सामग्री-प्रकार: पाठ/एचटीएमएल; charset=us-ascii सामग्री-स्थानांतरण-एन्कोडिंग: 7 बिट अभी पता चला है कि जकार्ता मेल मज़ेदार और उपयोग में आसान है 250 ठीक पुस्तकों के रूप में कतारबद्ध है05_4e0c9e627608 DEBUG SMTP: संदेश सफलतापूर्वक मेल सर्वर को दिया गया QUIT 221 2.0.0 अलविदा ईमेल संदेश सफलतापूर्वक भेजा गया

अग्रिम में धन्यवाद!

0
Paul 9 फरवरी 2021, 19:37
1
आप mail.hover.com पोर्ट 465 से कनेक्ट हो रहे हैं। उस पोर्ट पर mail.hover.com केवल एसएसएल (एसएमटीपीएस) पर एसएमटीपी का समर्थन करता है। इसलिए HTTPS के समान संपूर्ण संचार सुरक्षित है - न केवल एन्क्रिप्टेड।
 – 
Robert
9 फरवरी 2021, 19:51
धन्यवाद @ रॉबर्ट, यह मददगार है। ऐसा लगता है कि मेरे दूसरे प्रश्न का एन्क्रिप्शन से कोई लेना-देना नहीं होगा, शायद मुझे इसे दूसरी पोस्ट बनानी चाहिए?
 – 
Paul
9 फरवरी 2021, 20:13
आपके दूसरे प्रश्न का उत्तर भी सरल है: आप संदेश भेजने के लिए गलत सर्वर का उपयोग कर रहे हैं। mycompany.com के smtp सर्वर का उपयोग करें। DKIM के बाद से, केवल वे पते से हैं जो उस सर्वर से बंधे हैं जिससे यह "संबंधित" है। केवल वे मेल सत्यापित हो सकते हैं (भेजने वाले सर्वर द्वारा हस्ताक्षरित)।
 – 
Robert
9 फरवरी 2021, 22:48
@ रॉबर्ट, मुझे यकीन नहीं है कि मैं समझता हूं। होवर मेरी company.com के लिए smtp सर्वर है। तो मेरा जावा ऐप क्लाइंट के रूप में कार्य कर रहा है और ईमेल को होवर पर भेज रहा है जो इसे प्राप्तकर्ता को भेजता है, जैसा कि कोई भी क्लाइंट करेगा। क्या मैं आपकी बात को गलत समझ रहा हूँ? पुनश्च डीकेआईएम के बारे में सूचक के लिए धन्यवाद, मैं उस पर पढ़ूंगा।
 – 
Paul
9 फरवरी 2021, 23:00

1 उत्तर

सबसे बढ़िया उत्तर

सबसे पहले मुझे @Robert को श्रेय देना होगा जिन्होंने अपनी टिप्पणी में मेरे पहले प्रश्न का उत्तर दिया, और मेरे दूसरे प्रश्न के बारे में अपनी टिप्पणी में उन्होंने DKIM का उल्लेख किया, जिसने मुझे मेरे दूसरे प्रश्न को हल करने के मार्ग पर खड़ा कर दिया।

तो मेरे पहले प्रश्न का उत्तर जकार्ता मेल उदाहरण में सब कुछ एन्क्रिप्ट किया गया है, जिसमें लॉगिन और संदेश शामिल हैं। आपको smpt सर्वर सार्वजनिक कुंजी का उपयोग करने की आवश्यकता नहीं है क्योंकि मेरे मामले में यह एक वाणिज्यिक प्रमाणपत्र प्राधिकरण द्वारा हस्ताक्षरित प्रमाणपत्र का उपयोग करता है। (प्रति @Robert और https://stackoverflow.com/a/16843712)

मेरे दूसरे प्रश्न के लिए, गूल मेरे ईमेल प्राप्त होने पर असत्यापित के रूप में चिह्नित क्यों कर रहा है, इसका उत्तर ईमेल भेजते समय डीकेआईएम का उपयोग करके हस्ताक्षर करना है। ऐसा करने के लिए मैंने इन चरणों का पालन किया:

अपने ईमेल पर हस्ताक्षर करने के लिए मैंने इस पुस्तकालय का उपयोग किया: https://github.com/markenwerk/java -utils-mail-dkim. नोट मुझे जकार्ता मेल से जावैक्स मेल का उपयोग करने के लिए वापस जाना पड़ा क्योंकि पुस्तकालय में यह विधि javax.mail.internet.MimeMessage की अपेक्षा करती है DkimMessage (mimeMessage, dkimSigner);

तब मैंने निजी और सार्वजनिक कुंजी बनाने के लिए इस टूल का उपयोग किया: https://tools.socketlabs.com/dkim /generator निजी कुंजी को एक फ़ाइल में चिपकाएँ और इसे .pem एक्सटेंशन के साथ नाम दें।

अब आपको अपनी वेबसाइट की DNS सेटिंग्स में एक DKIM TXT रिकॉर्ड जोड़ना होगा। यहां एक लिंक दिया गया है जो बताता है कि कैसे: https://blog.mailtrap.io/create-dkim -ट्यूटोरियल/

पुस्तकालय एक .der फ़ाइल की अपेक्षा करता है इसलिए Opensl का उपयोग करके .pem को .der में परिवर्तित करें, इस आदेश के साथ: Opensl pkcs8 -topk8 -nocrypt -in myDkim.pem -out myDkim.der -outform der

फिर मैंने अपने ईमेल पर हस्ताक्षर करने के लिए निम्नलिखित विधि का उपयोग किया, जो कि लाइब्रेरी वेब पेज पर दिए गए निर्देशों से अनुकूलित है।

private DkimMessage dkimSignMessage(MimeMessage message, String from, String signingDomain, String selector, File derFile) {    
    try {
        DkimSigner dkimSigner = new DkimSigner(signingDomain, selector, derFile);
        dkimSigner.setIdentity(from);
        dkimSigner.setHeaderCanonicalization(Canonicalization.SIMPLE);
        dkimSigner.setBodyCanonicalization(Canonicalization.RELAXED);
        dkimSigner.setSigningAlgorithm(SigningAlgorithm.SHA256_WITH_RSA);
        dkimSigner.setLengthParam(true);
        dkimSigner.setCopyHeaderFields(false);
        return new DkimMessage(message, dkimSigner);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

इन चरणों को पूरा करने के बाद, Google ने ईमेल को अमान्य के रूप में चिह्नित नहीं किया। यहाँ DKIM की अच्छी व्याख्या के साथ एक लिंक दिया गया है: https://postmarkapp.com/guides/dkim

0
Paul 10 फरवरी 2021, 21:42