2012-12-12 28 views
6

के साथ जावामेल पर हस्ताक्षर कैसे करें बाहरी लाइब्रेरी के बिना ऐसा करने के लिए कोई पुस्तकालय या कोई तरीका है? मैं अपने मेल सर्वर के रूप में अपाचे जेम्स उपयोग कर रहा हूँ और वर्तमान में इस तरह ईमेल भेजें:डीकेआईएम

public void sendMessage(String to, String subject, String content) { 
    MimeMessage message = new MimeMessage(session); 
    try { 
     message.addRecipients(Message.RecipientType.TO, to); 
     message.setFrom(new InternetAddress(from)); 
     message.setSubject(subject); 
     message.setContent(content, "text/html; charset=utf-8"); 
     Transport.send(message); 
    } catch (MessagingException e) { 
     e.printStackTrace(); 
    }  
} 

लेकिन मैं पहले से ईमेल को DKIM से प्रवेश करना चाहते हैं। मैं समझता हूं कि मुझे जेम्स सर्वर में डीकेआईएम हस्ताक्षर को लागू करने की आवश्यकता है और ऐसा करने के लिए जेडीकेआईएम का उपयोग करने की योजना है, मैं यह भी समझता हूं कि मुझे www.port25.com जैसे कुछ का उपयोग करके चाबियां बनाने की ज़रूरत है, लेकिन मैं वास्तव में जावा में ईमेल कैसे हस्ताक्षर करूं मैं इसे भेजता हूँ?

public void sendMessage(String to, String subject, String content) { 
    //Create DKIM Signer 
    DKIMSigner dkimSigner = null; 
    try { 
     dkimSigner = new DKIMSigner(properties.getProperty("mail.smtp.dkim.signingdomain"), properties.getProperty("mail.smtp.dkim.selector"), properties.getProperty("mail.smtp.dkim.privatekey")); 
     dkimSigner.setIdentity(properties.getProperty("mail.user") + "@" + properties.getProperty("mail.smtp.dkim.signingdomain")); 
     dkimSigner.setHeaderCanonicalization(Canonicalization.SIMPLE); 
     dkimSigner.setBodyCanonicalization(Canonicalization.RELAXED); 
     dkimSigner.setLengthParam(true); 
     dkimSigner.setSigningAlgorithm(SigningAlgorithm.SHA1withRSA); 
     dkimSigner.setZParam(true); 
    } catch (Exception e) { 
    e.printStackTrace(); 
     } 
    if(dkimSigner != null) { 
     //Create message 
     Message message = new SMTPDKIMMessage(session, dkimSigner); 
     try { 
      message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false)); 
      message.setFrom(new InternetAddress(from)); 
      message.setSubject(subject); 
      message.setContent(content, "text/html; charset=utf-8"); 
      Transport.send(message); 
     } catch (MessagingException e) { 
      e.printStackTrace(); 
     } 
    }   
} 

उत्तर

3

मैं का उपयोग कर Javamail के लिए DKIM जिस पर डाउनलोड किया जा सकता समाप्त हो गया डीकेआईएम हस्ताक्षर के लिए समर्थन। यहाँ सरल जावा मेल के साथ अब अपने कोड है, लेकिन:

public void sendMessage(String to, String subject, String content) { 
    final Email email = new Email.Builder() 
      .from(null, from) 
      .to(null, to) 
      .subject(subject) 
      .textHTML(content) 
      .build(); 

    email.signWithDomainKey(new File(properties.getProperty("mail.smtp.dkim.privatekey")), 
          properties.getProperty("mail.smtp.dkim.signingdomain"), 
          properties.getProperty("mail.smtp.dkim.selector")); 

    new Mailer(...).sendMail(email); 
} 

निजी कुंजी तर्क एक File, InputStream या एक byte[] हो सकता है।

दिलचस्प है, पर्दे के पीछे सरल जावा मेल का उपयोग करता java-utils-mail-dkim (GitHub) है, जो निष्क्रिय DKIM-for-JavaMail (GitHub) पर एक सक्रिय कांटा, जो पुस्तकालय अब आप उपयोग कर रहे हैं, DKIM For Javamail (SourceForge) की निरंतरता था। तो, आप जिस का उपयोग कर रहे हैं वह बहुत पुराना है।

+0

मेल सर्वर पर डीकेआईएम स्थापित करने के विरोध में इसका उपयोग करने के क्या फायदे हैं, जैसे Postfix के साथ openDKIM? –

+0

@Half_Duplex लाभ यह है कि आप उनमें से प्रत्येक के लिए OpenDKIM को कॉन्फ़िगर किए बिना एकाधिक एमटीए का उपयोग कर सकते हैं – Horen

+0

यह उदाहरण स्रोत फोर्ज पर जावा के लिए डीकेआईएम के पुराने संस्करण का उपयोग करता है। तब से इसे गिटहब में स्थानांतरित कर दिया गया है और निष्क्रिय हो गया है। बाद में अभी भी इसे [जावा-यूटिल-मेल-डीकिम] नामक एक सक्रिय परियोजना के लिए फोर्क किया गया था (https://github.com/markenwerk/java-utils-mail-dkim)। आप इसे मेरे [अन्य उत्तर] (http://stackoverflow.com/a/37161192/441662) में कार्रवाई में देख सकते हैं। –

2

Simple Java Mail हाल ही में कहा: DKIM For Javamail

यहाँ (इसकी बहुत अच्छी तरह से डाउनलोड में उदाहरण में दस्तावेज) एक उदाहरण है: