您的位置:

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(); }