2

这段代码有什么问题?我正在尝试使用 hMailServer 在我的本地主机上发送电子邮件,但它不起作用。虽然此代码适用于 Gmail SMTP 服务器.. 我可能认为错误在我的 hMailServer 中,但我找不到它..

    try{
    String host = "127.0.0.1";
    String from = "account@127.0.0.1";
    String pass = "1q2w#E$R";
    Properties props = System.getProperties();
    props.put("mail.smtp.starttls.enable", "true"); // added this line
    props.put("mail.smtp.host", host);
    props.put("mail.smtp.user", from);
    props.put("mail.smtp.password", pass);
    props.put("mail.smtp.port", "25");
    props.put("mail.smtp.auth", "true");

    String[] to = {"test@test.com"}; // added this line

    Session session = Session.getDefaultInstance(props, null);
    MimeMessage message = new MimeMessage(session);
    message.setFrom(new InternetAddress(from));

    InternetAddress[] toAddress = new InternetAddress[to.length];

    // To get the array of addresses
    for( int i=0; i < to.length; i++ ) { // changed from a while loop
        toAddress[i] = new InternetAddress(to[i]);
    }
    for( int i=0; i < toAddress.length; i++) { // changed from a while loop
        message.addRecipient(Message.RecipientType.TO, toAddress[i]);
    }
    message.setSubject("sending in a group");
    message.setText("Welcome to JavaMail");
    Transport transport = session.getTransport("smtp");
    transport.connect(host, from, pass);
    transport.sendMessage(message, message.getAllRecipients());
    transport.close();
    }
    catch (Exception e) {
        e.printStackTrace();
    }

这是我得到的错误:

    javax.mail.MessagingException: Could not connect to SMTP host: 127.0.0.1, port: 25;
nested exception is:
    java.net.SocketException: Permission denied: connect
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1213)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:311)
    at javax.mail.Service.connect(Service.java:233)
    at javax.mail.Service.connect(Service.java:134)
    at nl.company.cms.login.emailservice.TestMail.main(TestMail.java:71)

我正在使用 hMailServer..

4

5 回答 5

3

如果您使用的是 Java 7,那么我会尝试在您启动应用程序时将其添加为 JVM 参数:

-Djava.net.preferIPv4Stack=true

这可能是必要的,因为 Java 现在正在尝试使用 IPv6,所以我们需要告诉它更喜欢 IPv4 堆栈。

于 2012-05-02T12:13:46.540 回答
1

我确认只有在 Tomcat 的 catalina.bat 中编写的这个参数“-Djava.net.preferIPv4Stack=true”帮助我从我的 Spring Web 应用程序发送一封电子邮件到我的本地 hMailServer 实例。环境:Windows 8,Java 7u60。

于 2014-12-16T23:14:45.827 回答
1

如果您使用 Xampp,请确保 Mercury 在您的机器上运行,因为如果未启动 Mercury,则端口 25 将无法与 javaMail 一起使用。

于 2012-10-12T23:42:57.313 回答
0

我可以确认,通过仅执行@Quantas 提供的在 ECLIPSE 的“运行配置”中添加参数“-Djava.net.preferIPv4Stack=true”的建议,我得到异常邮件的问题现在已经解决。

从过去 2 天开始,我在使用“假 SMTP 邮件服务器”捕获从我在 Eclipse 中运行的应用程序发出的邮件时遇到了以下异常。

javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;

现在问题已经完全解决了,只需将这一小段代码放入ECLIPSE LUNA的“运行配置”中的“VM ARGUMENTS”中

-Djava.net.preferIPv4Stack=true

如下图所示

在此处输入图像描述

这表明java更喜欢使用IPV4堆栈而不是IPV6(它以前更喜欢)

于 2015-08-04T11:26:06.430 回答
0

我可以确认只为 Tomcat 添加 VM 参数:

-Djava.net.preferIPv4Stack=true

可以通过 JavaMail API 从我的 web 应用程序在我的本地主机上发送带有“假 SMTP 服务器”的假邮件

于 2019-04-03T12:24:24.227 回答