java---发送qq邮件

一、准备工作

smtp:用户发送邮件到服务器
pop3:用户从邮箱接收邮件

流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7VyVbmzN-1646025722531)(JavaWeb.assets/image-20220228124105328.png)]

1.搭建环境,导入jar包或者maven依赖

<!--mail-->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
    <version>1.6.2</version>
</dependency>

<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>

2.从qq邮箱获取对应权限

在这里插入图片描述

开启POP3/SMTP服务 获取授权码

在这里插入图片描述

二、简易邮件的发送(没有有附件和图片)

以QQ邮箱为例

1、设置属性

   Properties prop = new Properties();
   prop.setProperty("mail.host","smtp.qq.com");//设置qq邮件服务器
   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","false");
   prop.put("mail.smtp.ssl.socketFactory",sf);

2、创建定义整个应用程序所需的环境信息的Session对象

//QQ才需要
Session session = Session.getDefaultInstance(prop, new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        //发件人邮件用户名,授权码
        return new PasswordAuthentication("...@qq.com", "授权码");
    }
});

//开启Session的Debug模式,可以看到程序发送邮件的运行状态(可开可不开)
session.setDebug(true);

3、通过session得到transport对象

Transport ts = session.getTransport();

4、使用邮箱的用户名和授权码连上邮箱服务器

ts.connect("smtp.qq.com","...@qq.com","授权码");

5、创建邮箱

MimeMessage message = new MimeMessage(session);
//指明邮件的发起人
message.setFrom(new InternetAddress("...@qq.com"));
//指明邮件的收件人
message.setRecipient(Message.RecipientType.TO,new InternetAddress("...@qq.com"));
//邮件的标题
message.setSubject("只包含文本的简单邮件");
//邮件的文本内容(也可写为HTML语句)
message.setContent("你好啊!","text/html;charset=UTF-8");
//message.setContent("html语句");

6、发送邮件

ts.sendMessage(message,message.getAllRecipients());

7、关闭连接

ts.cloase();

三、复杂邮件的发送(有附件和图片)

相对于二,只有第5点创建邮件发生变化

如下(带图片):

MimeMessage message = new MimeMessage(session);
//指明邮件的发起人
message.setFrom(new InternetAddress("...@qq.com"));
//指明邮件的收件人
message.setRecipient(Message.RecipientType.TO,new InternetAddress("...@qq.com"));
//邮件的标题
message.setSubject("带图片的邮件");

 //准备图片数据
        MimeBodyPart image = new MimeBodyPart();
        //图片需要经过   数据处理DataHandler
        DataHandler dh = new DataHandler(new FileDataSource(""));
        image.setDataHandler(dh);//放入处理过的图片数据
        image.setContentID("bz.jpg");//给图片设置一个id,之后可以使用

        //准备正文数据
        MimeBodyPart text = new MimeBodyPart();
        text.setContent("这是一封邮件正文带图片<img src:'cid:bz.jpg'>的邮箱","text/html;charset=UTF-8");

        //描述数据关系
        MimeMultipart mm = new MimeMultipart();
        mm.addBodyPart(image);
        mm.addBodyPart(text);
        mm.setSubType("related");

        //设置到消息中,保存修改
        message.setContent(mm);//把最后编辑好的邮件放到消息中
        message.saveChanges();

带附件:

        //附件
        MimeBodyPart fj = new MimeBodyPart();
        fj.setDataHandler(new DataHandler(new FileDataSource("附件存在路径")));
        fj.setFileName("设置附件名字");
        //然后进行拼接
        MimeMultipart body = new MimeMultipart();
        body.addBodyPart(text);
        body.addBodyPart(fj);
        body.setSubType("related");
        //设置到消息中,保存修改
        message.setContent(body);
        message.saveChanges();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值