有人知道Java的邮件(SMTP)交付库吗?

我想发送邮件而不用打扰用于传递的SMTP服务器。

所以JavaMail API对我不起作用,因为我必须指定要连接的SMTP服务器。

我希望图书馆通过查询邮件地址域的MX记录,自行查找哪个SMTP服务器负责哪个电子邮件地址。

我正在寻找像阿司匹林这样的东西。 不幸的是我不能使用Aspirin本身,因为开发停止了2004年,并且库无法正确地与现代垃圾邮件强化服务器通信。

詹姆斯的可嵌入版本可以完成任务。 但是我没有找到关于这是否可能的文件。

或者有没有人知道我可以使用的其他库?

这完全是处理这个问题的错误方法。

任何连接到互联网的人都会有一些“合法”的SMTP服务器可供他们提交电子邮件 – 您的ISP,您的办公室等。

你想要利用,因为他们为你做了几件事。

1)他们接受您的信息并负责处理该信息。 放下它之后,它不再是你的问题了。

2)任何邮件反垃圾邮件技术都由服务器处理。 更好的是,当/如果这些技术发生变化(Domain keys any?),服务器会处理它,而不是代码。

3)作为发送邮件系统的客户,您已经拥有与该服务器通信所需的任何凭据。 主SMTP服务器通过身份validation,IP范围等锁定。

4)你没有重新发明轮子。 利用您拥有的基础设施。 你在写一个应用程序或邮件服务器吗? 设置邮件服务器是一项通常很容易完成的日常任务。 互联网上所有那些随意的“哑巴”用户都设法收到了电子邮件。

一种可能的解决方案:自己获取MX记录并使用JavaMail API 。

您可以使用dnsjava项目获取MX记录:

Maven2依赖:

 dnsjava dnsjava 2.0.1  

MX记录检索方法:

 public static String getMXRecordsForEmailAddress(String eMailAddress) { String returnValue = null; try { String hostName = getHostNameFromEmailAddress(eMailAddress); Record[] records = new Lookup(hostName, Type.MX).run(); if (records == null) { throw new RuntimeException("No MX records found for domain " + hostName + "."); } if (log.isTraceEnabled()) { // log found entries for debugging purposes for (int i = 0; i < records.length; i++) { MXRecord mx = (MXRecord) records[i]; String targetString = mx.getTarget().toString(); log.trace("MX-Record for '" + hostName + "':" + targetString); } } // return first entry (not the best solution) if (records.length > 0) { MXRecord mx = (MXRecord) records[0]; returnValue = mx.getTarget().toString(); } } catch (TextParseException e) { throw new RuntimeException(e); } if (log.isTraceEnabled()) { log.trace("Using: " + returnValue); } return returnValue; } private static String getHostNameFromEmailAddress(String mailAddress) throws TextParseException { String parts[] = mailAddress.split("@"); if (parts.length != 2) throw new TextParseException("Cannot parse E-Mail-Address: '" + mailAddress + "'"); return parts[1]; } 

通过JavaMail代码发送邮件:

 public static void sendMail(String toAddress, String fromAddress, String subject, String body) throws AddressException, MessagingException { String smtpServer = getMXRecordsForEmailAddress(toAddress); // create session Properties props = new Properties(); props.put("mail.smtp.host", smtpServer); Session session = Session.getDefaultInstance(props); // create message Message msg = new MimeMessage(session); msg.setFrom(new InternetAddress(fromAddress)); msg.setRecipient(Message.RecipientType.TO, new InternetAddress(toAddress)); msg.setSubject(subject); msg.setText(body); // send message Transport.send(msg); } 

别。

发送电子邮件比看起来要复杂得多。 电子邮件服务器擅长(或应该擅长)可靠的交付。

如果需要,设置一个单独的电子邮件服务器 – 这与在Java中实现一个基本相同(我怀疑你会找到用于此任务的库 – 它们本质上是完整的邮件服务器),但更简单。