使用javaMail实现简单邮件发送

一、首先你要用来发送邮件的qq邮箱需要开通pop3/smtp服务,这个可以百度一下就知道了

二、导入所需要的jar包,我使用的是maven添加依赖

<dependency>
      <groupId>javax.activation</groupId>
      <artifactId>activation</artifactId>
      <version>1.1.1</version>
</dependency>
<dependency>
      <groupId>javax.mail</groupId>
      <artifactId>mail</artifactId>
      <version>1.4.7</version>
</dependency>
<dependency>
      <groupId>com.sun.mail</groupId>
      <artifactId>smtp</artifactId>
      <version>1.6.0</version>
</dependency>

三、进行工具类编写并测试,代码如下

package com.cccuu.project.myUtils;

import com.sun.mail.util.MailSSLSocketFactory;

import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;
import java.util.UUID;

/******************************************* 
 *  使用smtp协议发送邮件
 * @Package com.cccuu.project.myUtils
 * @Author drt
 * @Date 2018/3/28 11:40
 * @Version V1.0
 *******************************************/
public class JavaMailUtil {

    private final static String PROTOCOL = "smtp";  // 邮件发送协议
    private final static String HOST = "smtp.qq.com"; //邮件服务器主机
    private final static String PORT = "465";    // SMTP邮件服务器默认端口
    private final static String IS_AUTH = "true";  // 是否要求身份认证
    private final static String IS_ENABLED_DEBUG_MOD = "true";  //// 是否启用调试模式(启用调试模式可打印客户端与服务器交互过程时一问一答的响应消息)

    // 初始化连接邮件服务器的会话信息
    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);
    }

    /**
     * 发送邮件工具类:通过qq邮件发送,因为具有ssl加密,采用的是smtp协议
     * @param loginAccount 登录邮箱的账号:如 "1576357208@qq.com"
     * @param loginAuthCode 登录qq邮箱时候需要的授权码:可以进入qq邮箱,账号设置那里"生成授权码"
     * @param sender 发件人邮箱
     * @param recipients 收件人邮箱:支持群发
     * @param emailSubject 邮件的主题
     * @param emailContent 邮件的内容
     * @param emailContentType 邮件内容的类型,支持纯文本:"text/plain;charset=utf-8";,带有Html格式的内容:"text/html;charset=utf-8"
     * @return 是否成功
     */
    public static boolean sendEmail(final String loginAccount,final String loginAuthCode,String sender,String[] recipients,
                                String emailSubject,String emailContent,String emailContentType){
        boolean flag;
        try {
            //开启SSL加密,否则会失败
            MailSSLSocketFactory sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            props.put("mail.smtp.ssl.enable", "true");
            props.put("mail.smtp.ssl.socketFactory", sf);
            // 创建session
            Session session = Session.getDefaultInstance(props, new Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    //用户名可以用QQ账号也可以用邮箱的别名:第一个参数为邮箱账号,第二个为授权码
                    PasswordAuthentication pa = new PasswordAuthentication(loginAccount,loginAuthCode);
                    return pa;
                }
            });
            //设置打开调试状态
            //session.setDebug(true);
            //声明一个Message对象(代表一封邮件),从session中创建,可以发送几封邮件:可以在这里 for循环多次
            MimeMessage msg = new MimeMessage(session);
            //邮件信息封装
            //1发件人
            msg.setFrom(new InternetAddress(sender));
            //2收件人:可以多个
            //msg.setRecipient(RecipientType.TO, new InternetAddress("linsenzhong@126.com"));
            InternetAddress[] receptientsEmail=new InternetAddress[recipients.length];
            for(int i=0;i<recipients.length;i++){
                receptientsEmail[i]=new InternetAddress(recipients[i]);
            }
            //多个收件人
            msg.setRecipients(RecipientType.TO,receptientsEmail);
            //设置发送时间
            msg.setSentDate(new Date());
            //设置邮件优先级
            msg.setHeader("X-Priority","1");
            //3邮件内容:主题、内容
            msg.setSubject(emailSubject);
            //设置html内容为邮件正文
            msg.setContent(emailContent,emailContentType);
            //设置自定义发件人昵称
            String nick="";
            try {
                nick=javax.mail.internet.MimeUtility.encodeText("河南灵秀网络科技有限公司");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            msg.setFrom(new InternetAddress(nick+" <"+sender+">"));
            // 保存并生成最终的邮件内容
            msg.saveChanges();
            //发送动作
            Transport.send(msg);
            System.out.println("邮件发送成功");
            flag=true;

        } catch (Exception e) {
            System.out.println("邮件发送失败: "+e.getMessage());
            flag=false;
        }
        return flag;
    }

    public static void main(String[] args) throws Exception {
        String code=UUID.randomUUID().toString();
        boolean result=sendEmail("1576357208@qq.com", "lisaygkznttogjhj", "1576357208@qq.com",
                new String[]{"17737138812@163.com","303157545@qq.com"},
                "修改密码验证码",
                "<h3 style='margin-left: 10px; color: #00a0e9'>你的验证码是"+code+",10分钟内有效,过期请重新获取</h3>",
                "text/html;charset=utf-8");
        System.out.println("
发送结果:"+result);
    }
}
原文地址:https://www.cnblogs.com/duanrantao/p/8682672.html