Spring Boot - отправка электронной почты с помощью Gmail - PullRequest
0 голосов
/ 14 декабря 2018

Нужно отправить письмо из gmail, используя весеннюю загрузку

Но я получаю сообщение об ошибке типа

Это приложение не имеет явного сопоставления для / error, поэтому вы видите это какотступление.

Произошла непредвиденная ошибка (тип = Внутренняя ошибка сервера, статус = 500).Не удалось подключиться к почтовому серверу;вложенное исключение: com.sun.mail.util.MailConnectException: не удалось подключиться к хосту, порт: smtp.gmail.com, 587;тайм-аут 5000;Вложенное исключение: java.net.SocketTimeoutException: истекло время ожидания соединения.Неудачные сообщения: com.sun.mail.util.MailConnectException: Не удалось подключиться к хосту, порт: smtp.gmail.com, 587;тайм-аут 5000;Вложенное исключение: java.net.SocketTimeoutException: истекло время ожидания соединения

application.properties

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=XXXXXXXXXX@gmail.com
spring.mail.password=********
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=5000
spring.mail.properties.mail.smtp.writetimeout=5000

Контроллер

@Autowired
private JavaMailSender sender;

@RequestMapping(value="/sendMail/{mail}")
public String sendMail(@PathVariable String mail) {
    MimeMessage message = sender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(message);

    try {
        helper.setTo(mail);
        helper.setText("Greetings :)");
        helper.setSubject("Mail From Spring Boot");
    } catch (MessagingException e) {
        e.printStackTrace();
        return "Error while sending mail ..";
    }
    sender.send(message);
    return "Mail Sent Success!";
}

Также допускается использование менее защищенных приложений в настройках почты

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Следующие свойства требуются для отправки электронной почты с помощью Spring.

spring.mail.host=
spring.mail.port=465
spring.mail.protocol=smtps

#Mail server Username & Password
spring.mail.username=
spring.mail.password=

spring.mail.properties.mail.transport.protocol=smtps
spring.mail.properties.mail.smtps.auth=true
spring.mail.properties.mail.smtps.starttls.enable=true
spring.mail.properties.mail.smtps.timeout=8000

Вы можете обратиться к классу ниже, чтобы отправить электронное письмо с Spring.

import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;

@Component
public class SendEmailService  {

    @Autowired
    private JavaMailSender mailSender;

    public void sendEmail(final UserObject userObject) {            

        String toAddress = userObject.getEmail();
        String subjectText = userObject.getSubject();
        SimpleMailMessage emailMessage = composeEmail(toAddress, subjectText);

        mailSender.send(emailMessage);
    }

    private SimpleMailMessage composeEmail(final String toAddress, final String subjectText) {

        final SimpleMailMessage email = new SimpleMailMessage();    
        email.setTo(toAddress);
        email.setSubject(subjectText);
        email.setText("Some Text");
        email.setFrom("From Address");

        return email;
    }

}
0 голосов
/ 15 декабря 2018

Поскольку основная проблема заключается в тайм-ауте сокета, скорее всего, проблема заключается в брандмауэре, который не позволяет подключиться напрямую.В FAQ по JavaMail есть советы по отладке соединений и инструкции по подключению через прокси-сервер .

0 голосов
/ 14 декабря 2018

Используйте этот фрагмент кода вместо

public class ExceptionMailer{
    private String smtpHost;
    private String smtpPort;
    private String senderMail;
    private String password;
    static final Properties props = new Properties();

ExceptionMailer(){
    this.smtpHost = "smtp.gmail.com";
    this.smtpPort = "465";
    this.senderMail = "xyz@gmail.com";
    this.password = "xxxxxxxx";

    props.put("mail.smtp.host", this.smtpHost);
    props.put("mail.smtp.socketFactory.port", this.smtpPort);
    props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", this.smtpPort);
}

public void send(){
           //get authentication 
        Session session = Session.getDefaultInstance(props,new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication(){
                    return new PasswordAuthentication(senderMail, password);
                }
        });

Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(senderMail));
message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(email));
message.setSubject(MAIL_SUBJECT);
message.setContent("This is a message", "text/html; charset=utf-8");
Transport.send(message);

}

}
...