@insomnia77

Java. Отправка письма через gmail host c аутентификацией proxy по логину и паролю?

Добрый день. Не смог найти на stackoverflow рабочий пример отправки писем с помощью java.
Я написал такой код, но он зависает. Может быть кто-нибудь подскажет где ошибка в этом методе?

public void SendEmail(String SendGmailTo, String subject, String text, String SendGmailFrom, String SendGmailFromPassword, String proxyHost, String proxyPort, String proxyUsername, String proxyPassword) {

Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
props.put("mail.smtp.socks.host", proxyHost);
props.put("mail.smtp.socks.port", proxyPort);

Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(SendGmailFrom, SendGmailFromPassword);
}
});
System.setProperty("java.net.socks.username", proxyUsername);
System.setProperty("java.net.socks.password", proxyPassword);
try {

Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(SendGmailFrom));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(SendGmailTo));
message.setSubject(subject);
message.setText(text);

Transport.send(message);

System.out.println("Done");

} catch (MessagingException e) {
throw new RuntimeException(e);
}

}
  • Вопрос задан
  • 1020 просмотров
Пригласить эксперта
Ответы на вопрос 2
stas_agarkov
@stas_agarkov
Я программист
public static void sendMail0(String smtpServer, String smtpPort, final String smtpLogin, final String smtpPassword, String emailRecipients, String emailSubject, MessageSetter messageSetter) {
try {
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", smtpServer);
properties.setProperty("mail.smtp.port", smtpPort);
properties.setProperty("mail.smtp.socketFactory.port", smtpPort);
properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.smtp.socketFactory.fallback", "false");
properties.setProperty("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(properties, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(smtpLogin, smtpPassword);
}
});
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(smtpLogin));
for (String recipient : StringUtils.split(emailRecipients, ",")) {
message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
}
message.setSubject(emailSubject, "UTF-8");
messageSetter.set(message);
Transport.send(message);
log.debug("Письмо успешно отправлено по адресам: " + emailRecipients);
} catch (MessagingException e) {
log.debug("MessagingException", e);
}
}

new MessageSetter() {
@Override
public void set(MimeMessage mimeMessage) throws MessagingException {
mimeMessage.setContent(emailHtmlText, "text/html; charset=UTF-8");
}
}

У меня работает этот код.
Ответ написан
Комментировать
@bobzer
Java EE Developer
Я бы посоветовал для начала добиться работоспособности кода в окружении, в котором нет прокси сервера, т.к. не ясно с кем "бороться" - с почтовым сервером или с прокси. Недавно "бился" с Gmail, вот мои работающие настройки:
mail.smtp.host              smtp.gmail.com
mail.smtp.socketFactory.port	 465
mail.smtp.socketFactory.class	 javax.net.ssl.SSLSocketFactory
mail.smtp.auth                         true
mail.smtp.port                         465
mail.sender.email                    mymail@gmail.com
mail.sender.email.password    mypassword
mail.smtp.ssl.enable                true
mail.smtp.ssl.trust                   *
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы