运用JavaMail发送一封邮件吧!!!

文章介绍了如何使用Java通过POP3/SMTP服务发送邮件,包括开启服务、设置授权密码,以及构建邮件Session。同时,详细讲解了如何创建MimeMessage对象来设置邮件主题、正文和附件,包括HTML内容和内嵌图片的处理。最后,展示了发送带有附件和内嵌图片的邮件的代码示例。
摘要由CSDN通过智能技术生成

首先将POP3/SMTP服务调节为开启状态

 然后点击  授权密码管理 区的 "新增授权密码" ,创建出一个新设备之后保存好专属密码。

 导入一个javax.mail的jar包

构造出这样一个工具类,方便我们后期实例化对象

public static Session createSession() {
        String password = "FQGKWTBI********";//用户密码

        String username =  "***********@163.com";//用户账号

        Properties props =new Properties();//properties类,在Java中,其配置文件常为.properties文件,文件内容的格式是“键=值”或者“键 值”的格式。

        props.put("mail.smtp.host","smtp.163.com");//主机名

        props.put("mail.smtp.port","25");//主机端口号

        props.put("mail.smtp.auth","true");//是否需要用户认证

        props.put("mail.smtp.starttls.enable","true");//启用TLS加密

        //创建Session会话
        //参数1:smtp服务器连接参数
        //参数2:账号和密码的授权认证对象
        Session session =Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username,password);
            }
        });
        session.setDebug(true);
        return session;
    }

 实例化工具类的一个对象。

我们还要构造一个Message对象,然后调用Transport.send(Message)就可以发送文件了

try {
            //1.创建Session对象
            Session session = 工具类名.createSession();

            //2.创建邮件对象
            MimeMessage message =new MimeMessage(session);
            message.setSubject("别害怕,这是一份测试邮件!!!");//设置邮件标题
            message.setText("你好?");//设计邮件正文
            message.setFrom(new InternetAddress("***********@163.com"));//发件人
            message.setRecipient(Message.RecipientType.TO,                               
                                 new InternetAddress("**********@qq.com"));//收件人

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

在生活中,再发送邮件时可能会带一些附件。那如何将附件和邮件正文一同发送出去呢

try {
            //1.创建Session对象
            Session session = 工具类名.createSession();

            //2.创建MimeMessage邮件对象
            MimeMessage message =new MimeMessage(session);
            message.setFrom(new InternetAddress("***********@163.com"));//发件人

            message.setRecipient(Message.RecipientType.TO,new 
                                 InternetAddress("**********@qq.com"));//收件人

            message.setRecipients(Message.RecipientType.CC,new InternetAddress[]{new 
                               InternetAddress("**********@qq.com")});//多人发送,抄送邮件

            message.setSubject("鸡汤邮件");//邮件标题

            BodyPart textPart = new MimeBodyPart();//添加正文
            textPart.setContent("用<b>脑子</b>干事算是工作,不用<b>脑子</b>的只能算是动 
                                 作。","text/html;charset=utf-8");

            BodyPart filePart = new MimeBodyPart();//添加附件
            filePart.setFileName("李云龙阁下");//附件文件显示名称
            filePart.setDataHandler(
                    new DataHandler(new ByteArrayDataSource(
                            Files.readAllBytes(Paths.get("文件路径")),
                                       "application/octet-stream")));//上传附件文件
            //将正文+附件组装成Multipart对象
            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(textPart);
            multipart.addBodyPart(filePart);

            message.setContent(multipart);//将mutipart对象放入邮件
            //3.发送邮件
            Transport.send(message);

        }catch (MessagingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

如果我们想将图片放在正文中发送给对方可以按照下方操作进行

try {
            //1.创建Session会话
            Session session = 工具类名.createSession();

            //2.创建MimeMessage邮件对象
            MimeMessage message = new MimeMessage(session);

            message.setFrom(new InternetAddress("***********@163.com"));//发件人

            message.setRecipient(Message.RecipientType.TO,new 
                                  InternetAddress("**********@qq.com"));//收件人

            message.setRecipients(Message.RecipientType.CC,new InternetAddress[]{new 
                           InternetAddress("3205006327@qq.com")});//多人发送,抄送邮件

            message.setSubject("****");//邮件标题

            //邮件正文
            BodyPart textPart = new MimeBodyPart();
            StringBuilder contentText = new StringBuilder();
            contentText.append("<h3>**</h3>");
            contentText.append("<p>****</p>");
            contentText.append("<img src = \"cid:bz\"/>");
            textPart.setContent(contentText.toString(),
                                    "text/html;charset = utf-8");//邮件中包含html标签

            //添加image
            BodyPart imgPart = new MimeBodyPart();
            imgPart.setDataHandler(new DataHandler(
                    new ByteArrayDataSource(
                            Files.readAllBytes(Paths.get("文件路径")),
                                                   " application/octet-stream")));
            //设置当前图片为内嵌图片
            //这个ID和HTML中引用的ID对应起来,邮件客户端就可以正常显示内嵌图片
            imgPart.setHeader("Content-ID","bz");//图片的内容ID

            //整合邮件
            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(textPart);
            multipart.addBodyPart(imgPart);

            message.setContent(multipart);

            //3.发送邮件
            Transport.send(message);

        }catch (MessagingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值