Задать вопрос
@ivaleyev

Почему timeout при отправке писем office365 по smtp на java?

Есть аккаунт Office 365. Пробовал отправить почту программами на java, которые смог найти в интернете (через smtp.office365.com). Всегда получается timeout exception.

У вас есть примеры исходников, которые точно работают?

Пример
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class SendEmailOffice365 {

    private static final Logger LOGGER = Logger.getAnonymousLogger();

    private static final String SERVER_HOST = "smtp.office365.com";
    private static final int SERVER_PORT = 587;
    private static final String LOGIN = "========";
    private static final String PASSWORD = "========";

    private static final String from = "========";
    private static final String to = "========";

    private static final String subject = "Test";
    private static final String messageContent = "Test message";

    private static void sendEmail() {
        final Session session = Session.getInstance(getEmailProperties(), new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(LOGIN, PASSWORD);
            }

        });

        try {
            final Message message = new MimeMessage(session);
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setFrom(new InternetAddress(from));
            message.setSubject(subject);
            message.setText(messageContent);
            message.setSentDate(new Date());
            Transport.send(message);
        } catch (final MessagingException ex) {
            LOGGER.log(Level.WARNING, "Error sending message: " + ex.getMessage(), ex);
        }
    }

    private static Properties getEmailProperties() {
        final Properties config = new Properties();
        config.put("mail.smtp.auth", "true");
        config.put("mail.smtp.starttls.enable", "true");
        config.put("mail.transport.protocol", "smtp");
        config.put("mail.smtp.host", SERVER_HOST);
        config.put("mail.smtp.port", SERVER_PORT);
        config.put("mail.smtp.user", LOGIN);
        config.put("mail.smtp.password", PASSWORD);

        config.put("mail.smtp.connectiontimeout", "2000");
        config.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
        return config;
    }

    public static void main(final String[] args) {
        sendEmail();
    }

}
  • Вопрос задан
  • 160 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
zolt85
@zolt85
Программист
А Вас не смущает заданный Вами таймаут в 2 секунды? Я имею ввиду строку:
config.put("mail.smtp.connectiontimeout", "2000");

Думаю если Вы ее просто закоментируете, перестанет отваливаться по таймауту.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы