EMail 工具类 1.0

发布于 2019-01-17  463 次阅读


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;


/** 使用前 需要获取 IMAP/SMTP服务 的第三方的登录密码 才能使用
 *   Email 发送工具类 1.0
 *              功能 : 发送普通邮件
 *                      发送Html邮件
 maven 依赖:
 <!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
 <dependency>
 <groupId>javax.mail</groupId>
 <artifactId>javax.mail-api</artifactId>
 <version>1.6.2</version>
 </dependency>
 */
public class MailUtil {

    // 邮件发送协议
    private final static String PROTOCOL = "smtp";

    // SMTP邮件服务器
    // qq.com  pop.qq.com smtp.qq.com
    private final static String HOST = "smtp.qq.com";

    // SMTP邮件服务器默认端口
    private final static String PORT = "25";

    // 是否要求身份认证
    private final static String IS_AUTH = "true";

    // 是否启用调试模式(启用调试模式可打印客户端与服务器交互过程时一问一答的响应消息)
    private final static String IS_ENABLED_DEBUG_MOD = "true";

    // 发件人
    private String addressor = "xxxxxx4@qq.com" ;

    // 收件人
    private String addressee = "xxxxxxn@hotmail.com";

    // 初始化连接邮件服务器的会话信息
    private static Properties props = null;

    static {
        props = new Properties();
        props.setProperty("mail.transport.protocol", PROTOCOL);
        props.setProperty("mail.smtp.host", HOST);
        props.setProperty("mail.smtp.port", PORT);
        props.setProperty("mail.smtp.auth", IS_AUTH);
        props.setProperty("mail.debug",IS_ENABLED_DEBUG_MOD);
    }

    /**
     *  发送简单的文本邮件
     * @param user   发送的邮箱名  ==》 取 @前的名字
     * @param password   SMTP 生成的第三方密码
     * @param addressor  发件人
     * @param addressee  收件人
     * @param subject   邮件主题名
     * @param content   内容
     * @return  true|false
     * @throws Exception
     */
    public boolean sendEmail(String user,String password,String addressor,String addressee,String subject,String content)throws Exception{
        try {
            // 创建Session实例对象
            Session session1 = Session.getDefaultInstance(props);

            // 创建MimeMessage实例对象
            MimeMessage message = new MimeMessage(session1);

            // 设置发件人
            message.setFrom(new InternetAddress(addressor));

            // 设置邮件主题
            message.setSubject(subject);

            // 设置收件人
            message.setRecipient(RecipientType.TO, new InternetAddress(addressee));

            // 设置发送时间
            message.setSentDate(new Date());

            // 设置纯文本内容为邮件正文
            message.setText(content);

            // 保存并生成最终的邮件内容
            message.saveChanges();

            // 获得Transport实例对象
            Transport transport = session1.getTransport();

            // 打开连接  xxxxxx4  rdpbuhymozfjbiag
            transport.connect(user, password);

            // 将message对象传递给transport对象,将邮件发送出去
            transport.sendMessage(message, message.getAllRecipients());

            // 关闭连接
            transport.close();
            return true;
        }catch(Exception e){
            e.printStackTrace();
            return false;
        }
    }


    /**
     * @param userName  发送的邮箱名  ==》 取 @前的名字
     * @param password   SMTP 生成的第三方密码
     * @param addressor   发送人邮箱
     * @param addressorName   发送人姓名
     * @param addressee   接收人邮箱
     * @param subject   邮件主题
     * @param content  邮件内容
     * @return   true|false
     * @throws Exception UnsupportedEncodingException
     */
    public boolean sendHtmlEmail(String userName,String password,String addressor,String addressorName,String addressee,String subject,String content)throws Exception{
        // 创建Session实例对象  xxxxx4
        MyAuthenticator myAuthenticator = new MyAuthenticator();
        myAuthenticator.setUsername(userName);
        myAuthenticator.setPassword(password);
        Session session1 = Session.getInstance(props,myAuthenticator);

        // 创建MimeMessage实例对象
        MimeMessage message = new MimeMessage(session1);

        // 设置邮件主题
        message.setSubject(subject);

        // 设置发送人
        message.setFrom(new InternetAddress(addressor));

        // 设置发送时间
        message.setSentDate(new Date());

        // 设置收件人
        message.setRecipients(RecipientType.TO, InternetAddress.parse(addressee));

        // 设置html内容为邮件正文,指定MIME类型为text/html类型,并指定字符编码为gbk
        message.setContent("<div style='width: 600px;margin: 0 auto'><h3 style='color:#003E64; text-align:center; '> "+ addressee +"</h3><p style='text-indent: 2em'> "+content+" </p><p style='text-align: right; color:#003E64; font-size: 20px;'></p></div>","text/html;charset=utf-8");

        //设置自定义发件人昵称
        String nick="";
        try {
            nick = javax.mail.internet.MimeUtility.encodeText(addressorName);
        }catch(UnsupportedEncodingException e){
            e.printStackTrace();
        }
        message.setFrom(new InternetAddress(nick+" <"+addressor+">"));

        // 保存并生成最终的邮件内容
        message.saveChanges();

        // 发送邮件
        try {
            Transport.send(message);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }



    public static void main(String[] args){
//        try {
//            boolean b = new MailUtil().sendEmail("xxxxx4","rdpbuhymozfjbiag","xxxxxx4@qq.com", "xxxxxan@hotmail.com","测试","测试内容");
//
//            System.out.println("===> " + b);
//        }catch (Exception e){
//            e.printStackTrace();
//        }

//        try {
//            boolean b = new MailUtil().sendHtmlEmail("xxxxxx4","rdpbuhymozfjbiag","xxxxx4@qq.com","咸鱼张","xxxxxn@hotmail.com","测试主题","邮件测试内容");
//            System.out.println("===> " + b);
//        }catch (Exception e){
//            e.printStackTrace();
//        }


    }












    /**
     * 向邮件服务器提交认证信息
     */
    static class MyAuthenticator extends Authenticator {

        private String username;

        private String password;

        public MyAuthenticator() {
            super();
        }

        public MyAuthenticator(String username, String password) {
            super();
            this.username = username;
            this.password = password;
        }

        @Override
        protected PasswordAuthentication getPasswordAuthentication() {

            return new PasswordAuthentication(username, password);
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }
    }

}



公交车司机终于在众人的指责中将座位让给了老太太