Java实现邮件发送的过程及代码详解

Java实现邮件发送的过程及代码详解

一、背景介绍

现在,在很多程序开发或运维工作中,邮件是经常使用的一种通讯方式。Java提供了SMTP协议和JavaMail API来实现邮件的发送和接收操作。SMTP协议主要用于传输邮件,而JavaMail API是用来操作邮件的。

二、JavaMail API的基本结构

JavaMail API的基本结构如下:

  • Session:提供了配置JavaMail API所需参数的类,比如邮件服务器、用户名、密码等。
  • Message:邮件的消息类。
  • Transport:提供了发送邮件所需的类和方法。
  • Store:提供了接收邮件所需的类和方法。
  • Address类:邮件地址用来表示邮件发送者和邮件接收者。

三、邮件发送实现的过程

邮件发送的基本过程如下:

  1. 第一步,获取Session对象,设置邮件服务器地址、端口、账户密码等信息。
  2. 第二步,创建Message对象。这里我们可以创建一个MimeMessage对象,该对象为Message的子类,支持添加附件、Html邮件等功能。
  3. 第三步,设置Message的发送者、接收者、邮件主题、内容等属性。
  4. 第四步,使用Transport类的sendMessage()方法发送邮件。

四、邮件发送实战

示例1:发送简单文本邮件

以下是Java实现邮件发送的示例代码:

// 导入相关类
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;
public class EmailUtil {
    public static void sendEmail(String toEmail,String emailTitle,String emailContent){
        final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
        // 邮件发送者的邮箱地址和密码
        final String username = "sendEmail@qq.com";
        final String password = "password";
        // 邮件发送者服务器地址
        final String host = "smtp.qq.com";

        // 系统属性
        Properties props = new Properties();
        props.setProperty("mail.smtp.host", host);
        props.setProperty("mail.smtp.auth", "true");
        props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
        props.setProperty("mail.smtp.port", "465");
        props.setProperty("mail.smtp.socketFactory.port", "465");

        // 根据属性新建一个邮件会话
        Session session = Session.getDefaultInstance(props,new Authenticator(){
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }});

        try {
            // 创建一个默认的 MimeMessage 对象。
            Message message = new MimeMessage(session);

            // Set From: 头部头字段
            message.setFrom(new InternetAddress(username));

            // Set To: 头部头字段
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail));

            // Set Subject: 头部头字段
            message.setSubject(emailTitle);

            // 设置消息体
            message.setText(emailContent);

            // 发送消息
            Transport.send(message);
            System.out.println("邮件已经发送成功!");
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }
}

示例2:发送带有附件的邮件

以下是Java实现带有附件的邮件发送的示例代码:

// 导入相关类
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;

public class EmailUtil {
    public static void sendEmailWithAttachment(String toEmail, String emailTitle, String emailContent, String filePath){
        final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
        // 邮件发送者的邮箱地址和密码
        final String username = "sendEmail@qq.com";
        final String password = "password";

        // 邮件发送者服务器地址
        final String host = "smtp.qq.com";

        // 系统属性
        Properties props = new Properties();
        props.setProperty("mail.smtp.host", host);
        props.setProperty("mail.smtp.auth", "true");
        props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
        props.setProperty("mail.smtp.port", "465");
        props.setProperty("mail.smtp.socketFactory.port", "465");

        // 根据属性新建一个邮件会话
        Session session = Session.getDefaultInstance(props,new Authenticator(){
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }});

        try {
            // 创建一个默认的 MimeMessage 对象。
            Message message = new MimeMessage(session);

            // Set From: 头部头字段
            message.setFrom(new InternetAddress(username));

            // 设置收件人
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail));

            // 设置邮件主题
            message.setSubject(emailTitle);

            // 创建一个 MimeBodyPart 对象
            BodyPart messageBodyPart = new MimeBodyPart();

            // 设置邮件正文内容
            messageBodyPart.setText(emailContent);

            // 创建一个 Multipart容器对象
            Multipart multipart = new MimeMultipart();

            // 添加正文内容到Multipart容器对象中
            multipart.addBodyPart(messageBodyPart);

            // 添加附件
            messageBodyPart = new MimeBodyPart();
            DataSource source = new FileDataSource(filePath);
            messageBodyPart.setDataHandler(new DataHandler(source));

            // 设置附件名字
            messageBodyPart.setFileName(source.getName());

            // 把附件内容加入到容器中
            multipart.addBodyPart(messageBodyPart);

            // 把容器内容加入到消息体中
            message.setContent(multipart);

            // 发送消息
            Transport.send(message);
            System.out.println("带有附件的邮件已经发送成功!");
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }
}

五、总结

以上就是Java实现邮件发送的过程及代码详解。JavaMail API的使用不仅可以实现邮件发送,也可以实现邮件接收等操作。开发者可以通过JavaMail API来快速、便捷地实现邮件相关操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现邮件发送的过程及代码详解 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • 老生常谈java中cookie的使用

    针对“老生常谈java中cookie的使用”的问题,我将分为以下几个部分进行讲解: 1. 什么是Cookie Cookie 是浏览器在客户端保存数据的一种机制,通过向客户端发送 Cookie,并且在客户端保存了 Cookie 之后,在下次客户端请求时会自动携带这个 Cookie,以此来实现持续的服务端对客户端的标识与状态保持。 2. Java 中 Cooki…

    Java 2023年6月16日
    00
  • 关于java中的多态和对实例化对象的一些理解

    java面向对象三大特征即为:继承封装多态。而多态需要三大必要条件。分别是:继承、方法重写、父类引用指向子类对象。我们先一个一个来理解。 1、首先是继承和重写。这个很简单。因为多态就是建立在不同的重写之上的。也就是说多态就是在使用着一个方法的不同重写。而重写又是依赖着继承关系。 2、这个父类引用指向子类对象。 首先先上代码示例。 public class A…

    Java 2023年5月3日
    00
  • JSP实现带查询条件的通用分页组件

    JSP 实现带查询条件的通用分页组件的完整攻略,主要分以下三个步骤: 在前端页面搭建分页组件的基本框架 在后台编写分页查询的 SQL 语句,实现数据的分页查询 前后端的数据交互和页面渲染 下面我们来详细讲解这三个步骤。 步骤一:前端页面搭建分页组件的基本框架 在前端页面,我们需要搭建一个分页组件的基本框架,包括必要的 HTML 结构和样式,以及 JavaSc…

    Java 2023年6月15日
    00
  • Java之Algorithm_analysis案例详解

    Java之Algorithm_analysis案例详解 本篇文章旨在介绍Java中算法分析的相关知识点和应用案例,并详细解释如何应用该知识点解决实际问题。文章包括以下内容: 算法分析的基本概念 时间复杂度和空间复杂度的定义及其度量 案例:冒泡排序 案例:二分查找 算法分析的基本概念 算法是指完成特定任务的一系列有序步骤,分为有限步骤和无限步骤两种。算法分析则…

    Java 2023年5月26日
    00
  • 组织树查询-Jvava实现(递归)

    1.首先查询出组织机构 就是一个简单的查询 List<Dept> deptList = mapper.getDeptList(); Map<Long, OrgNode> nodeMap = new HashMap<>(); List<Long> rootIds = new ArrayList<>()…

    Java 2023年4月19日
    00
  • Java基础之打印万年历的简单实现(案例)

    下面是“Java基础之打印万年历的简单实现(案例)”的完整攻略: 简介 本案例演示了如何使用Java打印万年历,通过计算出每个月的天数和星期几,并将其输出到控制台中。 实现步骤 第一步:输入年份 Scanner scanner = new Scanner(System.in); System.out.print("请输入年份:"); in…

    Java 2023年5月20日
    00
  • 这是我的战争前期前五天玩法介绍

    我的战争前期前五天玩法介绍 在《我的战争》游戏中,前期的五天非常关键,这里提供一些玩家可以使用的策略来存活和发展。 1. 初期资源的获取 在游戏的开始,资源非常有限,但是这并不意味着你不能快速发展。第一天,最重要的任务是保持活下来,建立一个可以保护你的基地。最好的方法是寻找资源点并获得最初的几个资源,例如金属和木材,而不是在第一天建造建筑。 2. 建立初期的…

    Java 2023年6月16日
    00
  • 详解Spring Data Jpa 模糊查询的正确用法

    详解Spring Data JPA 模糊查询的正确用法 Spring Data JPA是基于JPA规范的一个简化操作数据库的框架,在使用Spring Data JPA进行数据库操作时,经常会使用模糊查询,下面是模糊查询的正确用法及示例。 特定字段模糊查询 特定字段模糊查询是针对某一个特定的字段进行模糊查询,示例代码如下: @Repository public…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部