Java实现邮件发送

亮子 2023-02-10 03:38:58 17090 0 0 0

1、邮件简介

电子邮件是—种用电子手段提供信息交换的通信方式,是互联网应用最广的服务。通过网络的电子邮件系统,用户可以以非常低廉的价格(不管发送到哪里,都只需负担网费)、非常快速的方式(几秒钟之内可以发送到世界上任何指定的目的地),与世界上任何一个角落的网络用户联系。
电子邮件可以是文字、图像、声音等多种形式。同时,用户可以得到大量免费的新闻、专题邮件,并轻松实现轻松的信息搜索。电子邮件的存在极大地方便了人与人之间的沟通与交流,促进了社会的发展。

图片alt

图片alt

2、发送邮件的依赖

    <!-- https://mvnrepository.com/artifact/javax.mail/mail -->
    <dependency>
      <groupId>javax.mail</groupId>
      <artifactId>mail</artifactId>
      <version>1.4.7</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.activation/activation -->
    <dependency>
      <groupId>javax.activation</groupId>
      <artifactId>activation</artifactId>
      <version>1.1.1</version>
    </dependency>

3、邮箱设置

3.1、点击设置

图片alt

3.2、点击账户

图片alt

3.3、开启服务

图片alt

3.4、生成授权码

图片alt

4、发送简单邮件

static void sendSampleMail() throws GeneralSecurityException, MessagingException {
        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", true);
        prop.put("mail.smtp.ssl.socketFactory", sf);

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

        // 创建定义整个应用程序所需要的的环境信息的Session对象
        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("3350996729@qq.com", "123456");
            }
        });

        // 开启Session的debug模式,这样就可以看到程序发送Email的运行状态
        session.setDebug(true);

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

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

        // 4、创建邮件
        MimeMessage message = new MimeMessage(session);

        // 设置发件人
        message.setFrom(new InternetAddress("3350996729@qq.com"));

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

        // 设置邮件的标题
        message.setSubject("这是一个测试邮件");

        // 设置邮件的正文
        message.setContent("这是一个测试邮件", "text/html;charset=UTF-8");

        // 5、发送邮件
        transport.sendMessage(message, message.getAllRecipients());

        transport.close();
    }

5、发送复杂邮件

static void sendComplexMail() throws GeneralSecurityException, MessagingException {
        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", true);
        prop.put("mail.smtp.ssl.socketFactory", sf);

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

        // 创建定义整个应用程序所需要的的环境信息的Session对象
        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("3350996729@qq.com", "123456");
            }
        });

        // 开启Session的debug模式,这样就可以看到程序发送Email的运行状态
        session.setDebug(true);

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

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

        // 4、创建邮件
        MimeMessage message = new MimeMessage(session);

        // 设置发件人
        message.setFrom(new InternetAddress("3350996729@qq.com"));

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

        // 设置邮件的标题
        message.setSubject("这是一个测试邮件");

        // 设置邮件的正文
        //message.setContent("这是一个测试邮件", "text/html;charset=UTF-8");

        // 准备图片数据
        MimeBodyPart image = new MimeBodyPart();
        DataHandler dataHandler = new DataHandler(new FileDataSource("D:\\david\\video\\lisa.jpg"));
        image.setDataHandler(dataHandler);
        image.setContentID("lisa.jpg");     // 设置图片的ID

        // 准备附件
        MimeBodyPart zipfile = new MimeBodyPart();
        zipfile.setDataHandler(new DataHandler(new FileDataSource("D:\\david\\video\\lisa.rar")));
        zipfile.setFileName("lisa.rar");     // 设置附件的名字

        // 准备正文
        MimeBodyPart body = new MimeBodyPart();
        body.setContent("带图片<img src='cid:lisa.jpg'>的邮件", "text/html;charset=UTF-8");

        // 描述数据关系
        MimeMultipart mimeMultipart = new MimeMultipart();
        mimeMultipart.addBodyPart(body);
        mimeMultipart.addBodyPart(image);
        mimeMultipart.setSubType(("related"));      // 内嵌资源

        MimeBodyPart bodyContent = new MimeBodyPart();
        bodyContent.setContent(mimeMultipart);

        // 拼接附件
        MimeMultipart allfile = new MimeMultipart();
        allfile.addBodyPart(zipfile);
        allfile.addBodyPart(bodyContent);
        allfile.setSubType(("mixed"));              // 附件资源

        // 设置到消息中
        message.setContent(allfile);
        message.saveChanges();

        // 5、发送邮件
        transport.sendMessage(message, message.getAllRecipients());

        transport.close();
    }