1.启用azkaban的邮件配置在 azkaban.properties中定义发送邮箱
mail.host=smtp.exmail.qq.com
mail.port=465
mail.password=xxxxxx
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