11

外部ライブラリなしでこれを行うライブラリまたは方法はありますか? メール サーバーとして apache james を使用しており、現在次のようなメールを送信しています。

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で実際に電子メールに署名するにはどうすればよいですか発送しますか?

4

2 に答える 2

9

Simple Java Mailは最近、DKIM 署名のサポートを追加しました。コードは次のとおりですが、Simple Java Mail を使用します。

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

秘密鍵の引数はFileInputStreamまたはbyte[]です。

興味深いことに、Simple Java Mail は舞台裏でjava-utils-mail-dkim (GitHub) を使用しています。これは、休止中のDKIM-for-JavaMail (GitHub)のアクティブなフォークです。これは、現在使用しているライブラリであるDKIMの継続でした。Javamail (SourceForge) の場合。だから、あなたが使っているのはとても古いものです。

于 2016-05-11T11:24:46.927 に答える
4

最終的に、DKIM for Javamail を使用しました。これは次の場所からダウンロードできます: DKIM For Javamail

以下に例を示します (ダウンロードの例で十分に文書化されています)。

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();
        }   
    }           
}
于 2012-12-12T06:58:34.647 に答える