javaWeb学习--------邮件发送

邮件发送

1.邮件收发原理

请添加图片描述

2.邮箱传输协议

SMTP——发送协议

POP——接收协议

3.Java发送邮件

使用java发送e-mail十分简单,首先应该准备JavaMail API和Java Activation Framework

得到两个jar包:

  • mail.jar
  • activation.jar

4.核心类

请添加图片描述

5.实现

导入jar包
请添加图片描述

5.1简单邮件:没有附件和图片,纯文本邮件

qq邮箱中获取相应的权限
请添加图片描述请添加图片描述
代码:

public class Main {
    //简单邮件:纯文本内容
    //复杂邮件:文本+图片+附件

    //要发送邮件需要获取协议,开启POP3和SMTP服务
    public static void main(String[] args) throws Exception {

        Properties prop = new Properties();//创建一封邮件
        //以下三项的Key的值都是固定的
        prop.setProperty("mail.host","smtp.qq.c om");//设置邮件服务器
        prop.setProperty("mail.transport.protocol","smtp");//设置邮件发送协议
        prop.setProperty("mail.smtp.auth","true");//需要验证用户名和密码

        //如果是QQ邮箱,还要设置SSL加密,加上以下代码即可
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        prop.put("mail.smtp.ssl.enable","true");
        prop.put("mail.smtp.ssl.socketFactory",sf);

        //==========使用JavaMail发送邮件的6个步骤======

        //1、创建定义整个应用程序所需要的环境信息的Session对象
        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication(){
                //发件人邮箱的用户名和授权码(只有qq是授权码,其它的是密码)
                return new PasswordAuthentication("1612893803@qq.com","授权码");
            }
        });
        //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
        session.setDebug(true);

        //2、通过Session得到transport对象
        Transport ts = session.getTransport();

        //3、使用邮箱的用户名和授权码连上邮件服务器
        ts.connect("SMTP.qq.com","1612893803@qq.com","授权码");

        //4、创建邮件
        //创建邮件对象
        MimeMessage message = new MimeMessage(session);
        //指明邮件的发件人
        message.setFrom(new InternetAddress("1612893803@qq.com"));
        //指明邮件的收件人
        message.setRecipient(Message.RecipientType.TO,new InternetAddress("212694926@qq.com"));
        //邮件的标题
        message.setSubject("只是一个普通的纯文本邮件");
        //邮件的文本内容
        message.setContent("你好哇,我来了!","text/html;charset=UTF-8");
        //5、发送邮件
        ts.sendMessage(message,message.getAllRecipients());
        //6、关闭连接
        ts.close();
    }
5.2复杂邮件:有附件和图片

请添加图片描述

附件格式包含关系
img

public class sendMail02 {
    //简单邮件:纯文本内容
    //复杂邮件:文本+图片+附件

    /*
    *MimeMessage类表示整封邮件。
    *MimeBodyPart类表示邮件的一个MIME消息。
    *MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。
    */

    //要发送邮件需要获取协议,开启POP3和SMTP服务
    public static void main(String[] args) throws Exception {

        Properties prop = new Properties();//创建一封邮件
        //以下三项的Key的值都是固定的
        prop.setProperty("mail.host","smtp.qq.com");//设置邮件服务器
        prop.setProperty("mail.transport.protocol","smtp");//设置邮件发送协议
        prop.setProperty("mail.smtp.auth","true");//需要验证用户名和密码

        //如果是QQ邮箱,还要设置SSL加密,加上以下代码即可
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        prop.put("mail.smtp.ssl.enable","true");
        prop.put("mail.smtp.ssl.socketFactory",sf);

        //==========使用JavaMail发送邮件的6个步骤======
        
        //变量名字定义的有点乱,不想改了。将就下吧

        //1、创建定义整个应用程序所需要的环境信息的Session对象
        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication(){
                //发件人邮箱的用户名和授权码
                return new PasswordAuthentication("1612893803@qq.com","授权码");
            }
        });
        //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
        session.setDebug(true);

        //2、通过Session得到transport对象
        Transport ts = session.getTransport();

        //3、使用邮箱的用户名和授权码连上邮件服务器
        ts.connect("SMTP.qq.com","1612893803@qq.com","授权码");
        //4、创建邮件

        //创建邮件对象
        MimeMessage message = new MimeMessage(session);
        //指明邮件的发件人
        message.setFrom(new InternetAddress("1612893803@qq.com"));
        //指明邮件的收件人
        message.setRecipient(Message.RecipientType.TO,new InternetAddress("212694926@qq.com"));
        //邮件的标题
        message.setSubject("这是一个有文本、图片、附件的邮件");
        //邮件的内容
       //=================================================
       //准备图片数据 DataHandler:处理除文本外的数据
        MimeBodyPart image = new MimeBodyPart();
        DataHandler dh = new DataHandler(new FileDataSource("C:\\Users\\Think\\Documents\\image-20200220200136289.png"));
        image.setDataHandler(dh);
        image.setContentID("xx.png");//设置图片ID
        //ContentID用于为“multipart/related”组合消息中的内嵌资源指定一个唯一标识号,在HTML格式的正文中可以使用这个唯一标识号来引用该内嵌资源。
        //注意,在引用Content-ID头字段标识的内嵌资源时,要在资源的唯一标识号前面加上“cid:”,以说明要采用唯一标识号对资源进行引用。

        //准备正文数据
        MimeBodyPart text = new MimeBodyPart();
        text.setContent("这是一个带图片、文本、附件<img src='cid:xx.png'>的邮件","text/html;charset=UTF-8");

        //准备附件数据
        MimeBodyPart accessory = new MimeBodyPart();
        DataHandler dh2 = new DataHandler(new FileDataSource("C:\\Users\\Think\\Pictures\\Saved Pictures\\illust_70110900_20191209_012234.jpg"));
        accessory.setDataHandler(dh2);
        accessory.setFileName(MimeUtility.encodeText("yan"));//给附件一个名字,发过去显示的就是这个设定的名字||MimeUtility.encodeText("")解决附件发送过去乱码;

        //*****************************!!!!!!!**********************
            /*
                 MimeBodyPart:表示复杂邮件的一个组成部分,它可以表示文本,附件,图片
                 DataHandler:表示可以读取图片或附件
                 MimeMultipart:表示二个邮件组成部分的关系,文本和图片的关系是"related"关系
                 Content-ID:表示图片的编号
                 related:图片|| mixed:附件
             */
        //*****************************!!!!!!!**********************

        //拼接图片和文本
        MimeMultipart mm = new MimeMultipart();
        mm.addBodyPart(text);
        mm.addBodyPart(image);
        mm.setSubType("related");

        //将文本+图片封装成邮件的组成部分,即将关系看作成一个部分
        MimeBodyPart context = new MimeBodyPart();
        context.setContent(mm);

        //把附件也加上
        MimeMultipart file = new MimeMultipart();
        file.addBodyPart(context);
        file.addBodyPart(accessory);
        file.setSubType("mixed");

        //放到消息中
        message.setContent(file);//把编辑好的内容放入消息中
        message.saveChanges();//保存修改!


        //=================================================
        //5、发送邮件
        ts.sendMessage(message,message.getAllRecipients());//message:发送的消息||message.getAllRecipients():获取保存在里面的地址
        //6、关闭连接
        ts.close();
    }
     //对于,复杂类型的邮件,位置关系特别注意和加入的顺利要一致
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值