JAVA邮件客户端(附源码)

JAVA邮件客户端

课设要求做一个基于JAVA Mail 的邮件收发客户端,在网上搜了一遍,没有看到比较完整的代码或者教程,因此自己做完之后把代码公开出来,供大家参考

运行结果展示:

输入账号密码进行登陆(账号密码的获取请接着往下看):

在这里插入图片描述

账号密码可用后进入主页面(进入可能需要十多秒的加载时间,加载时间是在读取收信箱中的数据)

在这里插入图片描述

点击按钮“接收窗口”跳转到收信箱界面,这个界面的布局有点问题两边有很大的空白,还没找到解决方式

在这里插入图片描述

刷新按钮会删除勾选的信件,以及刷新接收窗口中的信件,刷新也需要10秒左右的加载时间。

查看按钮会在浏览器内打开对应的邮件

下载按钮点击后下载附件

账号密码获取

这里以qq邮箱为例,账号即为 qq号@qq.com

密码通过如下方式获取

1.进入qq邮箱官网,点击设置

在这里插入图片描述

2.进入账号设置

在这里插入图片描述

3.下滑页面,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务栏,点击管理服务

在这里插入图片描述

4.在跳出的页面中选择生成授权码

在这里插入图片描述

5.跟着网页之后的逻辑走,最后得到的授权码即为所需要的密码

代码

程序由四个文件组成,都在同一目录下,运行Window.java即可打开程序

在这里插入图片描述

window.java

package exm;

import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.util.Enumeration;
import java.util.Vector;
import java.awt.Desktop;
import java.util.regex.Pattern;

public class Window {
   

    private JFrame frame;
    private JPanel loginPanel, mainPanel, sendMailPanel, receiveMailPanel;
    private JScrollPane receiveContents;
    private JTextField usernameField;
    private JPasswordField passwordField;
    private CardLayout cardLayout;
    private JPanel mainContentPanel;
    private JTextField attachmentField;
    private EmailManager emailManager;

    public Window() {
   
        frame = new JFrame("Mail Manager");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(1000, 600);

        initLoginPanel();
        initMainPanel();

        frame.getContentPane().add(loginPanel);
        frame.setVisible(true);
    }

    private void initLoginPanel() {
   
        loginPanel = new JPanel();
        loginPanel.setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(5, 5, 5, 5);

        JLabel usernameLabel = new JLabel("用户名:");
        usernameField = new JTextField(20);
        JLabel passwordLabel = new JLabel("密钥:");
        passwordField = new JPasswordField(20);
        JButton loginButton = new JButton("登录");

        loginButton.addActionListener(new ActionListener() {
   
            @Override
            public void actionPerformed(ActionEvent e) {
   
                // Validate login (this is just a placeholder, real validation should be done)
                if (!usernameField.getText().isEmpty() && passwordField.getPassword().length > 0) {
   
                    try {
   
                        emailManager = new EmailManager(usernameField.getText(),String.valueOf(passwordField.getPassword()));
                        frame.getContentPane().remove(loginPanel);
                        frame.getContentPane().add(mainPanel);
                        frame.revalidate();
                        frame.repaint();
                    } catch (Exception exception) {
   
                        exception.printStackTrace();
                        JOptionPane.showMessageDialog(frame, "账号或密码错误");
                    }
                } else {
   
                    JOptionPane.showMessageDialog(frame, "请输入用户名及密钥");
                }
            }
        });

        gbc.gridx = 0;
        gbc.gridy = 0;
        loginPanel.add(usernameLabel, gbc);
        gbc.gridx = 1;
        gbc.gridy = 0;
        loginPanel.add(usernameField, gbc);
        gbc.gridx = 0;
        gbc.gridy = 1;
        loginPanel.add(passwordLabel, gbc);
        gbc.gridx = 1;
        gbc.gridy = 1;
        loginPanel.add(passwordField, gbc);
        gbc.gridx = 1;
        gbc.gridy = 2;
        loginPanel.add(loginButton, gbc);
    }

    private void initMainPanel() {
   
        mainPanel = new JPanel(new BorderLayout());

        JPanel buttonPanel = new JPanel();
        JButton sendMailButton = new JButton("发送窗口");
        JButton receiveMailButton = new JButton("接收窗口");
        JButton refreshButton = new JButton("刷新");
        buttonPanel.add(sendMailButton);
        buttonPanel.add(receiveMailButton);
        buttonPanel.add(refreshButton);

        cardLayout = new CardLayout();
        mainContentPanel = new JPanel(cardLayout);

        initSendMailPanel();
        initReceiveMailPanel();

        mainContentPanel.add(sendMailPanel, "sendMail");
        mainContentPanel.add(receiveContents, "receiveMail");

        sendMailButton.addActionListener(new ActionListener() {
   
            @Override
            public void actionPerformed(ActionEvent e) {
   
                cardLayout.show(mainContentPanel, "sendMail");
            }
        });

        receiveMailButton.addActionListener(new ActionListener() {
   
            @Override
            public void actionPerformed(ActionEvent e) {
   
                renderReceiveMailPanel(emailManager.reader.subjects,emailManager.reader.sender,emailManager.reader.subfiles);
                cardLayout.show(mainContentPanel, "receiveMail");
            }
        });

        refreshButton.addActionListener(new ActionListener() {
   
            @Override
            public void actionPerformed(ActionEvent e) {
   
                try {
   
                    emailManager.reader.refreshMessages();
                    renderReceiveMailPanel(emailManager.reader.subjects,emailManager.reader.sender,emailManager.reader.subfiles);
                } catch (Exception exception) {
   
                    exception.printStackTrace();
                }
            }
        });

        mainPanel.add(buttonPanel, BorderLayout.NORTH);
        mainPanel.add(mainContentPanel, BorderLayout.CENTER);
    }

    private void initSendMailPanel() {
   
        sendMailPanel = new JPanel();
        sendMailPanel.setLayout(new BoxLayout(sendMailPanel, BoxLayout.Y_AXIS));
        Border emptyBorder = BorderFactory.createEmptyBorder(10, 10, 10, 10);
        sendMailPanel.setBorder(emptyBorder);

        JTextField subjectField = new JTextField();
        JTextArea recipientField = new JTextArea(2, 50);
        JTextArea mailContentArea = new JTextArea(10, 50);
        attachmentField = new JTextField();
        attachmentField.setEditable(false);
        JButton attachButton = new JButton("选择附件");
        JButton sendButton = new JButton("发送");

        attachButton.addActionListener(new ActionListener() {
   
            @Override
            public void actionPerformed(ActionEvent e) {
   
                JFileChooser fileChooser = new JFileChooser();
                fileChooser.setMultiSelectionEnabled(true); // 启用多选
                int returnValue = fileChooser.showOpenDialog(frame);
                if (returnValue == JFileChooser.APPROVE_OPTION) {
   
                    File[] selectedFiles = fileChooser.getSelectedFiles();
                    StringBuilder paths = new StringBuilder();

                    for (File file : selectedFiles) {
   
                        paths.append(file.getAbsolutePath()).append("\n");
                    }
                    attachmentField.setText(paths.toString());
                }
            }
        });

        sendButton.addActionListener(new ActionListener() {
   
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值