Azkaban Connecting to SMTP server failed

1.启用azkaban的邮件配置在 azkaban.properties中定义发送邮箱

[email protected]

mail.host=smtp.exmail.qq.com

[email protected]

mail.port=465

mail.password=xxxxxx

#[email protected]

#[email protected]

mail.tls=true

2.错误如下

ERROR [EmailMessage] [Azkaban] Connecting to SMTP server failed, attempt: 0

    javax.mail.MessagingException: Exception reading response;

    nested exception is:

    java.net.SocketTimeoutException: Read timed out

    at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2210)

    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1950)

    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642)

    at javax.mail.Service.connect(Service.java:295)

    at azkaban.utils.EmailMessage.connectToSMTPServer(EmailMessage.java:226)

    at azkaban.utils.EmailMessage.retryConnectToSMTPServer(EmailMessage.java:236)

    at azkaban.utils.EmailMessage.sendEmail(EmailMessage.java:219)

    at azkaban.utils.Emailer.sendSuccessEmail(Emailer.java:231)

3.解决方式:修改源码并重新编译azkaban/azkaban-common/src/main/java/azkaban/utils/EmailMessage.java即可

//---------------NEW ADD START----------------------------------------

import com.sun.mail.util.MailSSLSocketFactory;

import java.security.GeneralSecurityException;

//---------------NEW ADD END----------------------------------------


public void sendEmail() throws MessagingException {

          checkSettings();

          final Properties props = new Properties();

          if (this._usesAuth) {

              props.put("mail." + protocol + ".auth", "true");

              props.put("mail.user", this._mailUser);

              props.put("mail.password", this._mailPassword);

          } else {

              props.put("mail." + protocol + ".auth", "false");

          }

          props.put("mail." + protocol + ".host", this._mailHost);

          props.put("mail." + protocol + ".port", this._mailPort);

          props.put("mail." + protocol + ".timeout", _mailTimeout);

          props.put("mail." + protocol + ".connectiontimeout", _connectionTimeout);

          props.put("mail.smtp.starttls.enable", this._tls);

          props.put("mail.smtp.ssl.trust", this._mailHost);

//---------------NEW ADD START----------------------------------------

          MailSSLSocketFactory sf;

          try {

              sf = new MailSSLSocketFactory();

              sf.setTrustAllHosts(true);

              props.put("mail.smtp.ssl.enable", "true");

              props.put("mail.smtp.ssl.socketFactory", sf);

          } catch (GeneralSecurityException e) {

              e.printStackTrace();

          }

//------------NEW ADD END--------------------------------------------

          final Session session = Session.getInstance(props, null);

          final Message message = new MimeMessage(session);

          final InternetAddress from = new InternetAddress(this._fromAddress, false);

          message.setFrom(from);

          for (final String toAddr : this._toAddress) {

              message.addRecipient(Message.RecipientType.TO, new InternetAddress(toAddr, false));

          }

          message.setSubject(this._subject);

          message.setSentDate(new Date());

          if (this._attachments.size() > 0) {

              final MimeMultipart multipart = this._enableAttachementEmbedment ? new MimeMultipart("related")

                        : new MimeMultipart();

              final BodyPart messageBodyPart = new MimeBodyPart();

              messageBodyPart.setContent(this._body.toString(), this._mimeType);

              multipart.addBodyPart(messageBodyPart);

              // Add attachments

              for (final BodyPart part : this._attachments) {

                    multipart.addBodyPart(part);

              }

              message.setContent(multipart);

          } else {

              message.setContent(this._body.toString(), this._mimeType);

          }

          final SMTPTransport t = (SMTPTransport) session.getTransport(protocol);

          retryConnectToSMTPServer(t);

          retrySendMessage(t, message);

          t.close();

    }

4.编译命令:

./gradlew build installDist -x test #此命令可以跳过测试

参考: https://www.pomelolee.com/1819.html

你可能感兴趣的:(Azkaban Connecting to SMTP server failed)