Java 发送邮件功能详细阐述

一、WPS发送邮件功能

WPS 内置了邮件发送功能,使用方便,但是需要配置邮箱信息才能使用。

1、首先在 WPS 中选中想要发送邮件的文档,点击“文件”->“发送”->“发送为附件”。

2、在弹出的“发送邮件”窗口中,填写收件人、抄送、格式等信息,点击“发送”按钮即可。

3、如果弹出“发件人用户身份验证”窗口,则需要输入邮箱账号和密码进行验证。


    private static final String EMAIL_USERNAME = "你的邮箱账号";
    private static final String EMAIL_PASSWORD = "你的邮箱密码";
    private static final String EMAIL_HOST = "smtp.邮箱后缀";
    public static void main(String[] args) throws Exception {
        //创建一个邮件对象
        MimeMessage message = new MimeMessage(Session.getDefaultInstance(System.getProperties()));
        //设置发件人
        message.setFrom(new InternetAddress(EMAIL_USERNAME));
        //设置收件人
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("收件人邮箱"));
        //设置邮件主题
        message.setSubject("邮件主题");
        //设置邮件内容
        message.setContent("邮件内容", "text/html;charset=UTF-8"); 
        //创建Transport对象
        Transport transport = Session.getInstance(System.getProperties()).getTransport();
        //连接邮件服务器
        transport.connect(EMAIL_HOST,EMAIL_USERNAME,EMAIL_PASSWORD);
        //发送邮件
        transport.sendMessage(message, message.getAllRecipients());
        //关闭连接
        transport.close();
    }

二、一键发送邮件功能

一键发送邮件功能是通过使用邮件 API 将邮件功能集成到程序中,并提供简单的 UI 界面,方便用户选择收件人、邮件主题和邮件内容。

1、创建 UI 界面,用于用户选择收件人、邮件主题和邮件内容。

2、使用 JavaMail API 创建邮件对象,设置收件人、邮件主题和邮件内容等信息。

3、使用 JavaMail API 发送邮件。


    public static void main(String[] args) throws Exception {
        //创建 JFrame 窗口
        JFrame frame = new JFrame();
        //添加组件到窗口,包括收件人、主题和内容选项等
        frame.getContentPane().add(new EmailForm());
        //设置窗口大小、可见性和关闭方式
        frame.setSize(550, 350);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public class EmailForm extends JPanel {
        private JTextField toField;
        private JTextField subjectField;
        private JTextArea contentArea;
        public EmailForm() {
            //创建组件
            toField = new JTextField();
            subjectField = new JTextField();
            contentArea = new JTextArea();
            JButton sendButton = new JButton("发送邮件");
            //添加事件监听器
            sendButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    try {
                        //创建邮件对象
                        MimeMessage message = new MimeMessage(Session.getDefaultInstance(System.getProperties()));
                        //设置发件人
                        message.setFrom(new InternetAddress("发件人邮箱"));
                        //设置收件人
                        message.setRecipient(Message.RecipientType.TO, new InternetAddress(toField.getText()));
                        //设置邮件主题
                        message.setSubject(subjectField.getText());
                        //设置邮件内容
                        message.setContent(contentArea.getText(), "text/html;charset=UTF-8");
                        //创建Transport对象
                        Transport transport = Session.getInstance(System.getProperties()).getTransport();
                        //连接邮件服务器
                        transport.connect("smtp.邮箱后缀", "发件人邮箱", "发件人密码");
                        //发送邮件
                        transport.sendMessage(message, message.getAllRecipients());
                        //关闭连接
                        transport.close();
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
            });
            //将组件添加到 UI 界面
            this.setLayout(new BorderLayout());
            this.add(new JLabel(" 收件人:"), BorderLayout.WEST);
            this.add(toField, BorderLayout.CENTER);
            this.add(new JLabel(" 邮件主题:"), BorderLayout.NORTH);
            this.add(subjectField, BorderLayout.NORTH);
            this.add(new JScrollPane(contentArea), BorderLayout.CENTER);
            this.add(sendButton, BorderLayout.SOUTH);
        }
    }

三、微信发送邮件功能

微信发送邮件功能是通过设置微信中的小程序,将程序与邮箱功能集成到一起,方便用户在微信中直接发送邮件。

1、在微信中下载并安装指定小程序。

2、在微信中进入小程序,填写收件人、邮件主题和邮件内容等信息,点击“发送”即可。

3、小程序通过 API 调用 JavaMail API 发送邮件。


    public static void main(String[] args) throws Exception {
        //创建微信小程序对象
        MiniProgram miniProgram = new MiniProgram();
        //添加事件监听器,用于发送邮件
        miniProgram.setOnSendButtonClickListener(new OnSendButtonClickListener() {
            public void onSendButtonClicked(String to, String subject, String content) {
                try {
                    //创建邮件对象
                    MimeMessage message = new MimeMessage(Session.getDefaultInstance(System.getProperties()));
                    //设置发件人
                    message.setFrom(new InternetAddress("发件人邮箱"));
                    //设置收件人
                    message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
                    //设置邮件主题
                    message.setSubject(subject);
                    //设置邮件内容
                    message.setContent(content, "text/html;charset=UTF-8");
                    //创建Transport对象
                    Transport transport = Session.getInstance(System.getProperties()).getTransport();
                    //连接邮件服务器
                    transport.connect("smtp.邮箱后缀", "发件人邮箱", "发件人密码");
                    //发送邮件
                    transport.sendMessage(message, message.getAllRecipients());
                    //关闭连接
                    transport.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        });
        //打开小程序的 UI 界面
        miniProgram.showUI();
    }

四、自动发送邮件的功能

自动发送邮件是指在程序中定时发送指定邮件,例如每天定时发送一封日报邮件。

1、使用 JavaMail API 创建邮件对象,设置收件人、邮件主题和邮件内容等信息。

2、使用 Timer 定时器设置邮件发送时间。


    public static void main(String[] args) throws Exception {
        //创建 Timer 定时器
        Timer timer = new Timer();
        //用于记录上一次邮件发送时间
        Date lastSendTime = null;
        //将邮件发送任务添加到定时器中
        timer.schedule(new TimerTask() {
            public void run() {
                try {
                    Date now = new Date();
                    //如果当前时间满足发送条件,则发送邮件
                    if (isSendTime(now)) {
                        //创建邮件对象
                        MimeMessage message = new MimeMessage(Session.getDefaultInstance(System.getProperties()));
                        //设置发件人
                        message.setFrom(new InternetAddress("发件人邮箱"));
                        //设置收件人
                        message.setRecipient(Message.RecipientType.TO, new InternetAddress("收件人邮箱"));
                        //设置邮件主题
                        message.setSubject("邮件主题");
                        //设置邮件内容
                        message.setContent("邮件内容", "text/html;charset=UTF-8");
                        //创建Transport对象
                        Transport transport = Session.getInstance(System.getProperties()).getTransport();
                        //连接邮件服务器
                        transport.connect("smtp.邮箱后缀", "发件人邮箱", "发件人密码");
                        //发送邮件
                        transport.sendMessage(message, message.getAllRecipients());
                        //关闭连接
                        transport.close();
                        //更新上一次邮件发送时间
                        lastSendTime = now;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            //判断是否满足发送条件
            private boolean isSendTime(Date now) {
                if (lastSendTime == null) {
                    return true;
                }
                Calendar nowCalendar = new GregorianCalendar();
                nowCalendar.setTime(now);
                Calendar lastSendTimeCalendar = new GregorianCalendar();
                lastSendTimeCalendar.setTime(lastSendTime);
                return nowCalendar.get(Calendar.DAY_OF_YEAR) != lastSendTimeCalendar.get(Calendar.DAY_OF_YEAR);
            }
        }, 0, 60 * 60 * 1000); //定时发送时间间隔为1小时
    }

五、扫描之后没有发送邮件的功能

扫描之后没有发送邮件的功能是指在扫描完毕之后,通过分析扫描结果自动发送邮件通知。

1、扫描完毕之后,将扫描结果存储到数据库中。

2、使用 JDBC 访问数据库,分析扫描结果,生成邮件内容。

3、使用 JavaMail API 发送邮件。


    public static void main(String[] args) throws Exception {
        //扫描完毕之后保存结果到数据库中
        saveScanResult();
        //根据扫描结果生成邮件内容
        String content = generateEmailContent();
        //创建邮件对象
        MimeMessage message = new MimeMessage(Session.getDefaultInstance(System.getProperties()));
        //设置发件人
        message.setFrom(new InternetAddress("发件人邮箱"));
        //设置收件人
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("收件人邮箱"));
        //设置邮件主题
        message.setSubject("邮件主题");
        //设置邮件内容
        message.setContent(content, "text/html;charset=UTF-8");
        //创建Transport对象
        Transport transport = Session.getInstance(System.getProperties()).getTransport();
        //连接邮件服务器
        transport.connect("smtp.邮箱后缀", "发件人邮箱", "发件人密码");
        //发送邮件
        transport.sendMessage(message, message.getAllRecipients());
        //关闭连接
        transport.close();
    }
    //保存扫描结果到数据库中
    private static void saveScanResult() {
        try {
            //连接数据库
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
            //执行保存操作
            PreparedStatement statement = connection.prepareStatement("insert into scan_result (scan_time, result) values (?, ?)");
            statement.setDate(1, new Date(System.currentTimeMillis()));
            statement.setString(2, "扫描结果");
            statement.executeUpdate();
            //关闭连接
            statement.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //根据扫描结果生成邮件内容
    private static String generateEmailContent() {
        StringBuilder builder = new StringBuilder();
        try {
            //连接数据库
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
            //查询扫描结果
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery("select * from scan_result");
            //生成邮件内容
            builder.append("

扫描结果如下:

"); while (resultSet.next()) { builder.append("

" + resultSet.getDate("scan_time") + " : " + resultSet.getString("result") + "

"); } //关闭连接 resultSet.close(); statement.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } return builder.toString(); }

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/243520.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:56
下一篇 2024-12-12 12:56

相关推荐

  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29
  • Java 8 Group By 会影响排序吗?

    是的,Java 8中的Group By会对排序产生影响。本文将从多个方面探讨Group By对排序的影响。 一、Group By的概述 Group By是SQL中的一种常见操作,它…

    编程 2025-04-29

发表回复

登录后才能评论