Java Mail

发送邮件使用到的协议:SMTP协议(应用层)

发送邮件前的准备工作:

  •         导入javax-mail.jar包
  •         在所使用的的邮箱软件中开启POP3/SMTP服务
  •         新增授权密码(用于应用程序与服务器连接时的授权认证)

发送邮件的三大步骤:

1、创建Session会话对象

  由于Session对象的创建内容稍有繁琐且为了提高代码的复用性,进行单独的封装JavaMailUtills类

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import java.util.Properties;

//工具类
public class JavaMailUtils {
    //私有构造方法,不允许创建该类对象
    private JavaMailUtils(){}

    public static Session createSession(String userName,String passWord){
        
        //Properties存储SMTP服务连接信息
        Properties prop=new Properties();
        prop.put("mail.smtp.host","smtp.163.com");//SMTP主机名
        prop.put("mail.smtp.port",465);//SMTP主机端口号
        prop.put("mail.smtp.auth","true");//是否需要用户认证
        prop.put("mail.smtp.starttls.enable","true");//启用TLS加密

        /**创建Session会话对象
         * 参数1:smtp服务连接参数信息
         * 参数2:账号和密码的授权认证对象
         */
        Session session=Session.getInstance(prop, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(userName,passWord);
            }
        });
        //启用开发者模式
        session.setDebug(true);

        return session;
    }
}

2、创建MimeMessage邮件对象

MimeMessage message=new MimeMessage(session);

3、通过Transport发送邮件

Transport.send(message);

一、发送邮件

public class Demo01 {
    public static void main(String[] args) {
        String userName="Rice_y2002@163.com";//用户名
        String passWord="WXYLPQGUWSUEFTNV";//口令

        try {
            //1、创建Session会话
            Session session=JavaMailUtils.createSession(userName,passWord);
            
            //2、创建邮件对象
            MimeMessage message=new MimeMessage(session);
            message.setSubject("本封邮件的标题");
            message.setText("邮件的正文内容");
            message.setFrom(new InternetAddress("Rice_y2002@163.com"));//发件人
            
            message.setRecipient(Message.RecipientType.TO,new InternetAddress("3213141830@qq.com"));

            //3、发送邮件
            Transport.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }

    }

}

二、发送抄送多人的邮件

public class Demo02 {
    public static void main(String[] args) {
        String userName="Rice_y2002@163.com";//用户名
        String passWord="WXYLPQGUWSUEFTNV";//授权密码

        try {
            //1、创建Session对象
            Session session=JavaMailUtils.createSession(userName,passWord);
            //2、创建邮件对象MimeMessage
            MimeMessage message=new MimeMessage(session);
            message.setFrom(new InternetAddress("Rice_y2002@163.com"));
            /**指定收件人
             *  参数1:Message.RecipientType.TO:单个发送
             *  参数2:收件人地址
             */
            message.setRecipient(Message.RecipientType.TO,new InternetAddress("2443431327@qq.com"));
            /**指定抄送收件的多人:
             *   参数1:Message.RecipientType.CC:抄送
             *   参数2:InternetAddress类型数组,用于存储要抄送的地址
             */
            message.setRecipients(Message.RecipientType.CC,new InternetAddress[]{new InternetAddress("2443431327@qq.com"),
            new InternetAddress("1917683250@qq.com"),new InternetAddress("13992731394@163.com")}
                    );
            message.setSubject("邮箱标题");
            //邮箱中发送带有HTML标签的内容时,添加编码和文本类型参数
            message.setText("邮箱<b>正文内容</b>","utf-8","html");
            //3、发送邮件
            Transport.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }

    }
}

三、发送带有附件的邮件

public class Demo03 {
    public static void main(String[] args) {
        String userName="Rice_y2002@163.com";
        String passWord="WXYLPQGUWSUEFTNV";

        try {
            //1、创建Session会话
            Session session=JavaMailUtils.createSession(userName,passWord);
            //2、创建MineMessage邮件对象
            MimeMessage message=new MimeMessage(session);
            message.setFrom(new InternetAddress("Rice_y2002@163.com"));//发件人
            message.setRecipient(Message.RecipientType.TO,new InternetAddress("2443431327@qq.com"));//收件人
            message.setRecipients(Message.RecipientType.CC,new InternetAddress[]{
                    new InternetAddress("m15319800930@163.com"),
                    new InternetAddress("13992731394@163.com")
            });//抄送多人
            message.setSubject("给你发了一张图片");//邮件标题
            //正文部分
            BodyPart textPart=new MimeBodyPart();
            textPart.setText("你瞅瞅啊");
            //附件部分
            BodyPart filePart=new MimeBodyPart();
            filePart.setFileName("photo.jpg");//设置邮件中显示的附件名称
            filePart.setDataHandler(
                    new DataHandler(
                            new ByteArrayDataSource(Files.readAllBytes(
                                    Paths.get("D:\\桌面\\head.jpg")
                            ),"application/octet-stream")
                    )
            );
            //将正文+附加组装为一个Multipart对象
            Multipart multipart=new MimeMultipart();
            multipart.addBodyPart(textPart);
            multipart.addBodyPart(filePart);
            //将Multipart对象装入邮件
            message.setContent(multipart);
            //3、发送邮件
            Transport.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

四、发送内嵌图片的HTML邮件

public class Demo04 {
    public static void main(String[] args) {
        String userName="Rice_y2002@163.com";
        String passWord="WXYLPQGUWSUEFTNV";
        
        try {
            //1、创建Session会话对象
            Session session=JavaMailUtils.createSession(userName,passWord);
            //2、创建邮件对象
            MimeMessage message=new MimeMessage(session);
            message.setFrom(new InternetAddress("Rice_y2002@163.com"));//发送方
            message.setRecipient(Message.RecipientType.TO,new InternetAddress("2443431327@qq.com"));//接收方

            message.setSubject("打开看图片");//邮件标题

            //创建正文部分
            BodyPart textPart=new MimeBodyPart();

            //StringBuilder进行内容拼接
            StringBuilder content=new StringBuilder();
            content.append("<b>This is a photo!</b>");
            //<img>的src为(cid:+附件的content-ID)
            content.append("<img src=\"cid:headPhoto\"/>");

            //将StringBuilder的内容设置到正文部分
            textPart.setContent(content.toString(),"text/html;charset=utf-8");

            //创建附件部分
            BodyPart filePart=new MimeBodyPart();
            //设置附件部分的数据处理器
            filePart.setDataHandler(
                    new DataHandler(
                            new ByteArrayDataSource(
                                    Files.readAllBytes(Paths.get("D:\\桌面\\head.jpg")
                                    ),"application/octet-stream"
                            )
                    )
            );

            //设置附件的Content-ID(用于嵌入图片的img标签使用)
            filePart.setHeader("Content-ID","headPhoto");
            //创建Multipart对象(将正文和附件组合)
            Multipart multipart=new MimeMultipart();
            multipart.addBodyPart(textPart);
            multipart.addBodyPart(filePart);
            message.setContent(multipart);
            //3、发送邮件
            Transport.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值