azkaban-web-server 邮件配置遭遇Connecting to SMTP server failed

星期三, 2018-06-27 | Author: Lee | Database, JAVA-and-J2EE, 大数据 | 809 views

azkaban-web-server 邮件配置遭遇Connecting to SMTP server failed

0.先说下使用的版本azkaban-web-server-3.45.0-10使用jdk1.8.151编译

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

mail.sender=xx@qq.com
mail.host=smtp.exmail.qq.com
mail.user=xx@qq.com
mail.port=465
mail.password=xxxxxx
#job.failure.email=xx@qq.com
#job.success.email=xx@qq.com
mail.tls=true

2.配置job文件里配置接收邮箱地址

#file.job
type=command
command=sh /usr/local/bg/files/test.sh
working.dir=/usr/local/bg/files/job/working
notify.emails=xx@qq.com
failure.emails=xx@qq.com
success.emails=xx@qq.com

3.遭遇错误如下

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)

4.解决方式需要修改源码并重新编译之 重新编译azkaban.utils.EmailMessage即可,

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();
	}

5.重新编译的文件如下
azkaban-common-3.45.0-10-ged093e4.jar

6.还有解决之法 是换别的邮件发送,比如163的或者其他使用25端口的无需ssl的等即可

Tags: ,

文章作者: Lee

本文地址: https://www.pomelolee.com/1819.html

除非注明,Pomelo Lee文章均为原创,转载请以链接形式标明本文地址

No comments yet.

Leave a comment

Search

文章分类

Meta