2012-12-12 4 views
6

외부 라이브러리없이이 작업을 수행 할 수있는 라이브러리가 있습니까? 내 메일 서버로 아파치 제임스를 사용하여 현재이 같은 이메일을 보내 오전 :DKIM으로 Javamail에 서명하는 방법

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으로 전자 메일에 서명하고 싶습니다. 나는 james 서버에 DKIM 서명을 구현하고 이것을 사용하기 위해 jDKIM을 사용할 계획이 있다는 것을 이해한다. 나는 또한 www.port25.com과 같은 것을 사용하여 키를 만들 필요가 있음을 이해한다. 그러나 어떻게 실제로 java에서 이메일을 서명 하는가? 내가 보내 줄까?

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을 사용하여 종료 DKIM 서명 지원. 여기에 간단한 자바 메일로 이제 코드,하지만 : 개인 키 인수가 File, InputStream 또는 byte[] 수 있습니다

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); 
} 

.

흥미롭게도, 뒤에서는 간단한 자바 메일 사용 java-utils-mail-dkim 지금 사용하고있는 라이브러리, DKIM For Javamail (소스 포지)의 연속이었다 휴면 DKIM-for-JavaMail (GitHub의)의 활성 포크입니다 (GitHub의). 그래서, 당신이 사용하고있는 것은 아주 오래되었습니다.

+0

Postfix가있는 openDKIM과 같이 메일 서버에 DKIM을 설정하는 것과는 대조적으로이 기능을 사용하면 어떤 이점이 있습니까? –

+0

@Half_Duplex 장점은 각 Java 용 openDKIM을 구성하지 않고도 여러 MTA를 사용할 수 있다는 것입니다. – Horen

+0

이 예에서는 Source Forge에서 Java 용 DKIM의 아주 오래된 버전을 사용합니다. 이후 GitHub로 옮겨져 비활성 상태가되었습니다. 나중에 여전히 [java-utils-mail-dkim] (https://github.com/markenwerk/java-utils-mail-dkim)이라는 여전히 활성 인 프로젝트로 갈 렸습니다. 내 [다른 대답] (http://stackoverflow.com/a/37161192/441662) 여기에서 실제로 볼 수 있습니다. –