package com.ctrip.framework.apollo.portal.spi.ctrip; import com.ctrip.framework.apollo.portal.component.config.PortalConfig; import com.ctrip.framework.apollo.portal.entity.bo.Email; import com.ctrip.framework.apollo.tracer.Tracer; import org.apache.commons.lang.time.DateUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import java.lang.reflect.Method; import java.util.Calendar; import java.util.Date; import java.util.List; import javax.annotation.PostConstruct; public class CtripEmailRequestBuilder { private static final Logger logger = LoggerFactory.getLogger(CtripEmailRequestBuilder.class); private static Class sendEmailRequestClazz; private static Method setBodyContent; private static Method setRecipient; private static Method setSendCode; private static Method setBodyTemplateID; private static Method setSender; private static Method setSubject; private static Method setIsBodyHtml; private static Method setCharset; private static Method setExpiredTime; private static Method setAppID; @Autowired private PortalConfig portalConfig; @PostConstruct public void init() { try { sendEmailRequestClazz = Class.forName("com.ctrip.framework.apolloctripservice.emailservice.SendEmailRequest"); setSendCode = sendEmailRequestClazz.getMethod("setSendCode", String.class); setBodyTemplateID = sendEmailRequestClazz.getMethod("setBodyTemplateID", Integer.class); setSender = sendEmailRequestClazz.getMethod("setSender", String.class); setBodyContent = sendEmailRequestClazz.getMethod("setBodyContent", String.class); setRecipient = sendEmailRequestClazz.getMethod("setRecipient", List.class); setSubject = sendEmailRequestClazz.getMethod("setSubject", String.class); setIsBodyHtml = sendEmailRequestClazz.getMethod("setIsBodyHtml", Boolean.class); setCharset = sendEmailRequestClazz.getMethod("setCharset", String.class); setExpiredTime = sendEmailRequestClazz.getMethod("setExpiredTime", Calendar.class); setAppID = sendEmailRequestClazz.getMethod("setAppID", Integer.class); } catch (Throwable e) { logger.error("init email request build failed", e); Tracer.logError("init email request build failed", e); } } public Object buildEmailRequest(Email email) throws Exception { Object emailRequest = createBasicEmailRequest(); setSender.invoke(emailRequest, email.getSenderEmailAddress()); setSubject.invoke(emailRequest, email.getSubject()); String emailBodyBuilder = "<entry><content><![CDATA[<!DOCTYPE html>" + email.getBody() + "]]></content></entry>"; setBodyContent.invoke(emailRequest, emailBodyBuilder); setRecipient.invoke(emailRequest, email.getRecipients()); return emailRequest; } private Object createBasicEmailRequest() throws Exception { Object request = sendEmailRequestClazz.newInstance(); setSendCode.invoke(request, portalConfig.sendCode()); setBodyTemplateID.invoke(request, portalConfig.templateId()); setIsBodyHtml.invoke(request, true); setCharset.invoke(request, "UTF-8"); setExpiredTime.invoke(request, calExpiredTime()); setAppID.invoke(request, portalConfig.appId()); return request; } private Calendar calExpiredTime() { Calendar calendar = Calendar.getInstance(); calendar.setTime(DateUtils.addHours(new Date(), portalConfig.survivalDuration())); return calendar; } }