java mail 签名,如何使用DKIM签名Javamail

这篇博客展示了如何在JavaMail中实现DKIM签名,以便在发送邮件前对邮件进行签名。首先,你需要下载DKIM for JavaMail库,并设置DKIM相关的属性,如域名、选择器和私钥。然后,创建DKIMSigner实例并设置签名参数。最后,使用SMTPDKIMMessage创建消息并发送。这有助于提高邮件的可信度并防止邮件被标记为垃圾邮件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Is there a library or a way to do this without an external library? I am using apache james as my mail server and currently send email like this:

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

}

}

But i'd like to sign the email with DKIM before hand. I understand I need to implement DKIM signing into the james server and plan on use jDKIM to do this, I also understand I need to create the keys using something like www.port25.com, but how do I actually sign the email in java before I send it out?

解决方案

I ended up using DKIM for Javamail which can be downloaded at:

DKIM For Javamail

Here is an example (Its pretty well documented in the examples in the download):

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

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值