2009-11-23 3 views
6
Email email = new SimpleEmail(); 
String authuser = "[email protected]"; 
String authpwd = "*******"; 
// Very Important, Don't use email.setAuthentication() 
email.setSmtpPort(465); 
email.setAuthenticator(new DefaultAuthenticator(authuser, authpwd)); 
email.setDebug(true); // true if you want to debug 
email.setHostName("smtp.gmail.com"); 

email.getMailSession().getProperties().put("mail.smtp.auth", "true"); 
email.getMailSession().getProperties().put("mail.debug", "true"); 
email.getMailSession().getProperties().put("mail.smtp.port", "465"); 
email.getMailSession().getProperties().put("mail.smtp.socketFactory.port", "465"); 
email.getMailSession().getProperties().put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
email.getMailSession().getProperties().put("mail.smtp.socketFactory.fallback", "false"); 
email.getMailSession().getProperties().put("mail.smtp.starttls.enable", "true"); 
email.setFrom("[email protected]", "SenderName"); 
email.setSubject("TestMail"); 
email.setMsg("This is a test mail?"); 
email.addTo("[email protected]", "ToName"); 
email.send(); 

и это дает следующее исключениеОтправка электронной почты с помощью Commons-Email для Gmail

SEVERE: org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.gmail.com:465 
+0

Можете ли вы опубликовать всю трассировку стека исключений? Причина исключения, вероятно, указана где-то в нем. Исключение является общим. Это может быть простая ошибка аутентификации, или это может быть что-то другое. cheers – aldrin

ответ

14

Это работает для меня

Email email = new SimpleEmail(); 
String authuser = "[email protected]"; 
String authpwd = "xxxx"; 
email.setSmtpPort(587); 
email.setAuthenticator(new DefaultAuthenticator(authuser, authpwd)); 
email.setDebug(true); 
email.setHostName("smtp.gmail.com"); 
email.getMailSession().getProperties().put("mail.smtps.auth", "true"); 
email.getMailSession().getProperties().put("mail.debug", "true"); 
email.getMailSession().getProperties().put("mail.smtps.port", "587"); 
email.getMailSession().getProperties().put("mail.smtps.socketFactory.port", "587"); 
email.getMailSession().getProperties().put("mail.smtps.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
email.getMailSession().getProperties().put("mail.smtps.socketFactory.fallback", "false"); 
email.getMailSession().getProperties().put("mail.smtp.starttls.enable", "true"); 
email.setFrom("[email protected]", "SenderName"); 
email.setSubject("TestMail"); 
email.setMsg("This is a test mail?"); 
email.addTo("[email protected]", "ToName"); 
email.setTLS(true); 
email.send(); 
+0

Пробовал это с помощью smtps, не работает – user217029

+0

не работает с 587 также .. не работает – user217029

+0

Проверить расширенный ответ снова – jitter

10

Разве вы не должны tell Commons Email that you're sending a TLS email:

email.setTLS(true); 

до вашего звонка по электронной почте.send()?

Я не уверен, что это исправит то, что вас беспокоит, так как я не уверен, что у вас возникла проблема с подключением к smtp.gmail.com:465 или его успешной отправкой (сообщение об ошибке/исключение является неоднозначным, как вы его представили), но это определенно то, что мне не хватает, насколько я могу судить.

13

В руководстве пользователя Commons Email есть пример использования Gmail с использованием SSL.

https://commons.apache.org/proper/commons-email/userguide.html

SSL/TLS (порт 465) -> email.setSSLOnConnect (истина);

Email email = new SimpleEmail(); 
email.setHostName("smtp.gmail.com"); 
email.setSmtpPort(465); 
email.setAuthenticator(new DefaultAuthenticator("username", "password")); 
email.setSSLOnConnect(true); 
email.setFrom("[email protected]"); 
email.setSubject("TestMail"); 
email.setMsg("This is a test mail ... :-)"); 
email.addTo("[email protected]"); 
email.send(); 

STARTTLS (порт 587) -> email.setStartTLSEnabled (истина);

Email email = new SimpleEmail(); 
email.setHostName("smtp.gmail.com"); 
email.setSmtpPort(587); 
email.setAuthenticator(new DefaultAuthenticator("username", "password")); 
email.setStartTLSEnabled(true); 
email.setFrom("[email protected]"); 
email.setSubject("TestMail"); 
email.setMsg("This is a test mail ... :-)"); 
email.addTo("[email protected]"); 
email.send(); 
+0

Этот код работает для меня! Благодаря! – Ascension

+0

Я получаю класс javax.mail.MessagingException: 530 5.7.0 Сначала должен выпустить команду STARTTLS. g66sm11757390ywh.8 - gsmtp исключение. Но я обновил код так же, как ваш код. – Curious

Смежные вопросы