#java #email
Я пытаюсь отправить email с помощью следующего кода: try { String mailFrom = "sender@mail.ru"; String pass = "pass"; String mailTo = "recipient@gmail.com"; java.util.Properties props = new Properties(); props.put("mail.smtp.host", "smtp.mail.ru"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.port", "587"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.connectiontimeout", "60000"); // 60 seconds props.put("mail.smtp.timeout", "60000"); Session session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return (new PasswordAuthentication(mailFrom, pass)); } }); Message msg = new MimeMessage(session); InternetAddress addressFrom = new InternetAddress(mailFrom); msg.setFrom(addressFrom); InternetAddress addressTo = new InternetAddress(mailTo); msg.setRecipient(Message.RecipientType.TO, addressTo); msg.setSubject("testemail"); Transport.send(msg); } catch (Throwable e) { System.err.println("Exception : " + e.toString()); } но получаю ошибку: Exception : javax.mail.MessagingException: Could not convert socket to TLS; nested exception is: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target При этом я добавила ssl-сертификат mail.ru в хранилище сертификатов JVM, и он был успешно добавлен. Если же я добавляю в сессию следующее свойство: props.put("mail.smtp.ssl.trust", "*"); то по прошествии минуты (по истечении установленного таймаута) получаю другую ошибку: Exception : javax.mail.MessagingException: Exception reading response; nested exception is: java.net.SocketTimeoutException: Read timed out Как исправить это и всё-таки отправить email?
Ответы
Ответ 1
Проблема была в том, что я пыталась отправить пустое сообщение, без тела (почтовый клиент обычно разрешает посылать такие сообщения, но в моём случае это привело к ошибке). Это выяснилось после того, как я добавила в сессию свойство props.put("mail.debug", "true"); После этого в отладочной информации я увидела причину ошибки: 354 Enter message, ending with "." on a line by itself DEBUG SMTP: MessagingException while sending, THROW: javax.mail.MessagingException: No MimeMessage content После получения этого описания ошибки я добавила тело сообщения: msg.setText("Test message!"); и email был успешно отправлен.
Комментариев нет:
Отправить комментарий