Java подключение к локальному SMTP-серверу

Что не так с этим кодом? Я пытаюсь отправить электронное письмо на мой локальный хост с hMailServer, но это не работает. Пока этот код работает для SMTP-сервера Gmail... я могу подумать, что ошибка в моем 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 ответа

Если вы используете Java 7, то при запуске приложения я бы попытался добавить это в качестве параметра JVM:

-Djava.net.preferIPv4Stack=true

Это может быть необходимо, потому что Java теперь пытается использовать IPv6, поэтому мы должны сказать ему, чтобы он предпочитал стек IPv4.

Если вы используете Xampp, убедитесь, что Mercury работает на вашем компьютере на вашем компьютере, потому что порт 25 не будет работать с javaMail, если mercury не запущен.

Я подтверждаю, что только этот параметр "-Djava.net.preferIPv4Stack=true", записанный в catalina.bat Tomcat, помог мне отправить электронное письмо из моего веб-приложения Spring в мой локальный экземпляр hMailServer. Окружающая среда: Windows 8, Java 7u60.

Я могу подтвердить, что только добавив аргумент VM для Tomcat:

-Djava.net.preferIPv4Stack = верно

Я мог отправить поддельное письмо с "Поддельным SMTP-сервером" на моем локальном хосте из моего веб-приложения через JavaMail API

Я могу подтвердить, что, только реализовав предложение @Quantas о добавлении параметра "-Djava.net.preferIPv4Stack=true" в "конфигурации запуска" в ECLIPSE, моя проблема получения почты об исключениях. Исключение сообщений теперь решено.

В последние 2 дня я получал следующее исключение, когда использовал " Fake SMTP mail server" для перехвата писем, отправляемых из моего приложения, запущенного в eclipse.

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

Теперь проблема была полностью решена, просто поместив этот маленький кусочек кода в "VM ARGUMENTS" в "конфигурации запуска" ECLIPSE LUNA.

-Djava.net.preferIPv4Stack=true

Как показано на снимке ниже

Это говорит о том, что Java предпочитает использовать стек IPV4 вместо IPV6 (который он предпочитает ранее)

Другие вопросы по тегам