代码之家  ›  专栏  ›  技术社区  ›  Eduard Wirch

有人知道Java的邮件(SMTP)传递库吗?

  •  10
  • Eduard Wirch  · 技术社区  · 17 年前

    所以 JavaMail API

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

    我在找像这样的东西 Aspirin

    可嵌入版本的 James 我会完成这项任务。但我还没有找到关于这是否可能的文档。

    3 回复  |  直到 17 年前
        1
  •  15
  •   Eduard Wirch    17 年前

    JavaMail API

    您可以使用 dnsjava 项目:

    Maven2依赖项:

    <dependency>
        <groupId>dnsjava</groupId>
        <artifactId>dnsjava</artifactId>
        <version>2.0.1</version>
    </dependency>
    

    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);
    }
    
        2
  •  3
  •   Will Hartung    17 年前

    任何连接到internet的人都可以使用某种“合法”SMTP服务器来接收电子邮件的提交—您的ISP、您的办公室等等。

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

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

    4) 你不是在重新发明轮子。利用现有的基础架构。您正在编写应用程序还是邮件服务器?设置邮件服务器是一项日常任务,通常很简单。互联网上所有那些随意的“哑巴”用户都成功地设置了电子邮件。

        3
  •  2
  •   alex    17 年前

    不要。

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

    推荐文章