package cn.superdesk.uniorder.config.mail;

import cn.hutool.extra.mail.MailAccount;
import cn.superdesk.uniorder.dao.entity.sys.SysConfig;
import cn.superdesk.uniorder.dubbo.consumer.sys.SysConfigDubboConsumerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @Description: TODO 优化 发邮件 重构
 * @Author: linjinyu
 * @CreateDate: 9/25/20 3:57 PM
 * @UpdateUser: linjinyu
 * @UpdateDate: 9/25/20 3:57 PM
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
@Component
public class MailAccountConfigFactory {

	@Autowired
	private SysConfigDubboConsumerService sysConfigDubboConsumerService;

	private static MailAccount account = null;

	public MailAccount newInstance() {

		if (null == account) {

			// 生成附件
			SysConfig emailConfig = sysConfigDubboConsumerService.findByCode("EMAIL");

			account = new MailAccount();

			// # 邮件服务器的SMTP地址
			// host = smtp.xxxxxxx.xxxx
			account.setHost(emailConfig.getValueStr1());
			// # 邮件服务器的SMTP端口
			// port = 465
			account.setPort(emailConfig.getValueInt());
			// # 发件人(必须正确,否则发送失败)
			// from = xxxx@xxx.xxx
			account.setFrom(emailConfig.getValueStr2());
			// # 用户名(注意:如果使用foxmail邮箱,此处user为qq号)
			// user = xxx
			account.setUser(emailConfig.getValueStr2());
			// # 密码(注意,某些邮箱需要为SMTP服务单独设置密码,详情查看相关帮助)
			// pass = q1w2e3
			account.setPass(emailConfig.getValueStr3());
			// #使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。
			// starttlsEnable = true
			account.setStarttlsEnable(true);


			// # 使用SSL安全连接
			// sslEnable = true
			account.setSslEnable(true);
			// # 指定实现javax.net.SocketFactory接口的类的名称,这个类将被用于创建SMTP的套接字
			// socketFactoryClass = javax.net.ssl.SSLSocketFactory
			account.setSocketFactoryClass("javax.net.ssl.SSLSocketFactory");
			// # 如果设置为true,未能创建一个套接字使用指定的套接字工厂类将导致使用java.net.Socket创建的套接字类, 默认值为true
			// socketFactoryFallback = true
			account.setSocketFactoryFallback(false);
			// # 指定的端口连接到在使用指定的套接字工厂。如果没有设置,将使用默认端口456
			// socketFactoryPort = 465
			account.setSocketFactoryPort(emailConfig.getValueInt());


			// # SMTP超时时长,单位毫秒,缺省值不超时
			// timeout = 0
			account.setTimeout(0);
			// # Socket连接超时值,单位毫秒,缺省值不超时
			// connectionTimeout = 0
			account.setConnectionTimeout(0);


		}

		return account;
	}


}
