package com.reyun.check.mail;


import org.apache.log4j.Logger;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Date;
import java.util.Properties;

public class SimpleMailSender {
    private static final Logger logger = Logger.getLogger(SimpleMailSender.class);

    Properties properties;
    String[] mailUsers;

    public SimpleMailSender(Properties properties) {
        this.properties = properties;
        mailUsers = properties.getProperty("MailToUsers", "monitor@reyun.com")
                .split(",");
    }

    public void sendMail(String title, String content) {
        // 这个类主要是设置邮件
        MailSenderInfo mailInfo = new MailSenderInfo(this.properties);
        mailInfo.setMailServerHost(properties.getProperty("MailServerHost",
                "smtp.126.com"));
        mailInfo.setMailServerPort(properties.getProperty("mailServerPort",
                "25"));
        mailInfo.setValidate(true);
        mailInfo.setUserName(properties.getProperty("MailUserName"));
        mailInfo.setPassword(properties.getProperty("MailPassword"));// 您的邮箱密码
        mailInfo.setFromAddress(properties.getProperty("MailFromAddress"));
        mailInfo.setSubject(title);
        mailInfo.setContent(content);
        // 这个类主要来发送邮件

        // sms.sendTextMail(mailInfo);//发送文体格式
        for (String mailUser : mailUsers) {
            logger.info(mailUser);
            mailInfo.setToAddress(mailUser);
            this.sendHtmlMail(mailInfo);// 发送html格式
        }
    }

    /**
     * 以HTML格式发送邮件
     *
     * @param mailInfo
     *            待发送的邮件信息
     */
    public boolean sendHtmlMail(MailSenderInfo mailInfo) {
        // 判断是否需要身份认证
        MyAuthenticator authenticator = null;
        Properties pro = mailInfo.getProperties();
        pro.put("mail.smtp.starttls.enable", "true");
        // 如果需要身份认证，则创建一个密码验证器
        if (mailInfo.isValidate()) {
            authenticator = new MyAuthenticator(mailInfo.getUserName(),
                    mailInfo.getPassword());
        }
        // 根据邮件会话属性和密码验证器构造一个发送邮件的session
        Session sendMailSession = Session
                .getDefaultInstance(pro, authenticator);
        try {
            // 根据session创建一个邮件消息
            Message mailMessage = new MimeMessage(sendMailSession);
            // 创建邮件发送者地址
            Address from = new InternetAddress(mailInfo.getFromAddress());
            // 设置邮件消息的发送者
            mailMessage.setFrom(from);
            // 创建邮件的接收者地址，并设置到邮件消息中
            Address to = new InternetAddress(mailInfo.getToAddress());
            // Message.RecipientType.TO属性表示接收者的类型为TO
            mailMessage.setRecipient(Message.RecipientType.TO, to);
            // 设置邮件消息的主题
            mailMessage.setSubject(mailInfo.getSubject());
            // 设置邮件消息发送的时间
            mailMessage.setSentDate(new Date());
            // MiniMultipart类是一个容器类，包含MimeBodyPart类型的对象
            Multipart mainPart = new MimeMultipart();
            // 创建一个包含HTML内容的MimeBodyPart
            BodyPart html = new MimeBodyPart();
            // 设置HTML内容
            html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
            mainPart.addBodyPart(html);
            // 将MiniMultipart对象设置为邮件内容
            mailMessage.setContent(mainPart);
            // 发送邮件
            Transport.send(mailMessage);
            return true;
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
        return false;
    }
}
