基于POP3与SMTP协议的邮件收发程序的开发毕业论文.doc

上传人:文库蛋蛋多 文档编号:2397334 上传时间:2023-02-17 格式:DOC 页数:27 大小:538KB
返回 下载 相关 举报
基于POP3与SMTP协议的邮件收发程序的开发毕业论文.doc_第1页
第1页 / 共27页
基于POP3与SMTP协议的邮件收发程序的开发毕业论文.doc_第2页
第2页 / 共27页
基于POP3与SMTP协议的邮件收发程序的开发毕业论文.doc_第3页
第3页 / 共27页
基于POP3与SMTP协议的邮件收发程序的开发毕业论文.doc_第4页
第4页 / 共27页
基于POP3与SMTP协议的邮件收发程序的开发毕业论文.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《基于POP3与SMTP协议的邮件收发程序的开发毕业论文.doc》由会员分享,可在线阅读,更多相关《基于POP3与SMTP协议的邮件收发程序的开发毕业论文.doc(27页珍藏版)》请在三一办公上搜索。

1、一、 设计思想POP3(Post Office Protocol 3)即邮局协议的第3个版本,它是规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件的协议。它是因特网电子邮件的第一个离线协议标准,POP3协议允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时根据客户端的操作删除或保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。POP3协议是TCP/IP协议族中的一员,,由RFC 1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。POP3是TCP/IP协议族中的一员,由RFC1939 定义。本协议主要

2、用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。POP 协议支持“离线”邮件处理。其具体过程是:邮件发送到服务器上,电子邮件客户端调用邮件客户机程序以连接服务器,并下载所有未阅读的电子邮件。这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人终端机器上,一般是PC机或 MAC。一旦邮件发送到 PC 机或MAC上,邮件服务器上的邮件将会被删除。但目前的POP3邮件服务器大都可以“只下载邮件,服务器端并不删除”,也就是改进的POP3协议。脱机模型即不能在线操作,POP不支持对服务器邮件进行扩展操作,此过程需要更高级的IMAP4协议来完成。

3、支持POP协议使用ASCII码来传输数据消息,这些数据消息可以是指令,也可以是应答。SMTP目前已是事实上的在Internet传输E-Mail的标准,是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确定是存在的),然后消息文本就传输了。可以很简单地通过Telnet程序来测试一个SMTP服务器,SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX(Mail eXchange)DNS。在20世纪80年代早期SMTP开始被广泛地使用。当时它只是作为UUCP的补充,UUCP更适合于处理在间歇连接的机器间传送邮件。相反SMTP在发送

4、和接收的机器始终都联网的情况下工作得最好。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持。SMTP重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。通常,一个网络可以由公用因特网上TCP可相互间访问的主机、防火墙分隔的TCP/IP网络上TCP可相互访问的主机,以及其他LAN/WAN中的主机利用非TCP传输层协议组成。使用SMTP,可实现相同网络上处理机之间的邮件传输,也可通过中继器或网关是实现某处理机与其他网络之间的邮件传输。在smtp这种方式下,邮件的发送可能经过从发送端到接收端路径上的大量中间中继器或网关主机。域名服务系统(DNS)的邮件交换服务器可以用来识别出

5、传输邮件的下一跳IP地址。Sendmail是最早实现SMTP的邮件传输代理之一。到2001年至少有50个程序将SMTP 实现为一个客户端(消息的发送者)或一个服务器(消息的接受者)。一些其他的流行的SMTP服务器包括Philip Hazel 的exim,IBM的Postfix,D.J.Bernstein的Qmail,以及Microsoft Exchange Server.由于这个协议开始是基于纯ASC文本的,在二进制文件上处理得并不好。后来开发了用来编码二进制文件的标准,如MIME,以使其通过SMTP来传输。今天,大多数SMTP服务器都支持8位MIME扩展,它使二进制文件的传输变得几乎和纯文本

6、一样简单。二、算法流程图本程序的核心算法流程图如下图所示:图1 程序算法流程图三、源代码 package frame;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import javax.swing.JButton;import javax.swing.JComboB

7、ox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPasswordField;import javax.swing.JTextField;import utils.CheckNewMail;import utils.EditorUtils;import action.LoginAction;/* * 登录页面 */public class LoginFrame extends JFrame implements ActionListe

8、ner, ItemListener private static final long serialVersionUID = 1L;private JComboBox pop3CB;/ 收邮件服务器下拉列表private JComboBox smtpCB;/ 发邮件服务器下拉列表private JTextField nameTF;private JPasswordField passwordTF;private JButton loginButton = null, resetButton = null;private String username = null, password = nu

9、ll, popHost = null,smtpHost = null;/ SMTP服务器private JProgressBarFrame progressBar = null;/ 进度条实例public LoginFrame() super();this.setIconImage(EditorUtils.createIcon(email.png).getImage();getContentPane().setLayout(null);jFrameValidate();setTitle(登录邮箱);JLabel backgroundLabel = new JLabel();background

10、Label.setBounds(0, 0, 768, 540);backgroundLabel.setText();backgroundLabel.setLayout(null);final JLabel smtpLable = new JLabel();smtpLable.setText(SMTP 服务器:);smtpLable.setBounds(230, 203, 100, 18);backgroundLabel.add(smtpLable);final JLabel pop3Label = new JLabel();pop3Label.setText(POP3 服务器:);pop3La

11、bel.setBounds(230, 243, 100, 18);backgroundLabel.add(pop3Label);final JLabel nameLabel = new JLabel();nameLabel.setText(邮箱名称:);nameLabel.setBounds(230, 283, 100, 18);backgroundLabel.add(nameLabel);final JLabel passwordLable = new JLabel();passwordLable.setText(密码:);passwordLable.setBounds(230, 323,

12、100, 18);backgroundLabel.add(passwordLable);/ 发件箱服务器地址列表String smtpAdd = , , , , , , , , , , ;smtpCB = new JComboBox(smtpAdd);smtpCB.setSelectedIndex(0);smtpCB.setEditable(true);smtpCB.addItemListener(this);smtpCB.setBounds(370, 203, 150, 22);backgroundLabel.add(smtpCB);/ 收件箱服务器地址列表String pop3Add =

13、, , , , , , , , , , , ;pop3CB = new JComboBox(pop3Add);pop3CB.setSelectedIndex(0);pop3CB.addItemListener(this);pop3CB.setEditable(true);pop3CB.setBounds(370, 243, 150, 22);backgroundLabel.add(pop3CB);nameTF = new JTextField();nameTF.setBounds(370, 283, 150, 22);backgroundLabel.add(nameTF);passwordTF

14、 = new JPasswordField();passwordTF.setBounds(370, 323, 150, 22);backgroundLabel.add(passwordTF);loginButton = new JButton(登录);resetButton = new JButton(重置);backgroundLabel.add(loginButton);backgroundLabel.add(resetButton);loginButton.setBounds(280, 360, 80, 30);resetButton.setBounds(400, 360, 80, 30

15、);loginButton.addActionListener(this);resetButton.addActionListener(this);getContentPane().add(backgroundLabel);progressBar = new JProgressBarFrame(this, 登录, 登录中,请稍后.);reset();/ 默认初始值public void jFrameValidate() Toolkit tk = getToolkit();/ 获得屏幕的宽和高Dimension dim = tk.getScreenSize();this.setResizable

16、(false);this.setBounds(dim.width / 2 - 380, dim.height / 2 - 270, 776, 574);validate();this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/ 登录 和重置事件的处理Overridepublic void actionPerformed(ActionEvent e) if (e.getSource() = loginButton) / 登录progressBar.setVisible(true);/ 设置进度条可见new Thread() public vo

17、id run() getValues();/ 得到界面中的所有项的值checkUser();/ 登录验证.start(); else if (e.getSource() = resetButton) / 重置reset();/ 重新设置各项的值/ 得到界面中的所有项的值private void getValues() smtpHost = (String) smtpCB.getSelectedItem();popHost = (String) pop3CB.getSelectedItem();username = nameTF.getText().trim();password = passw

18、ordTF.getText().trim();/ 重新设置各项的值private void reset() smtpCB.setSelectedIndex(0);pop3CB.setSelectedIndex(0);nameTF.setText(55531990);passwordTF.setText(QQmima);/ 登录验证private void checkUser() LoginAction login = new LoginAction(smtpHost, popHost, username,password);if (login.isLogin() / 登录成功progressB

19、ar.dispose();new CheckNewMail().start();/ 开始检测新邮件this.dispose();/ 释放本窗口资源new MainFrame().setVisible(true); else / 登录失败progressBar.setVisible(false);JOptionPane.showMessageDialog(this, + 登录失败,请检查主机、用户名、密码是否正确! + , 警告,JOptionPane.WARNING_MESSAGE);/ 下拉列表改变时的事件处理public void itemStateChanged(ItemEvent e)

20、 if (e.getSource() = smtpCB) if (e.getStateChange() = ItemEvent.SELECTED& smtpCB.getSelectedIndex() != -1)pop3CB.setSelectedIndex(smtpCB.getSelectedIndex(); else if (e.getSource() = pop3CB) if (e.getStateChange() = ItemEvent.SELECTED& pop3CB.getSelectedIndex() != -1)smtpCB.setSelectedIndex(pop3CB.ge

21、tSelectedIndex();package frame;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ComponentAdapter;import java.awt.event.ComponentEvent;import java.awt.event.MouseEvent;import jav

22、a.awt.event.MouseListener;import java.beans.PropertyVetoException;import javax.swing.JButton;import javax.swing.JDesktopPane;import javax.swing.JFrame;import javax.swing.JInternalFrame;import javax.swing.JLabel;import javax.swing.JList;import javax.swing.JMenu;import javax.swing.JMenuBar;import java

23、x.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JPopupMenu;import javax.swing.JScrollPane;import javax.swing.JSplitPane;import javax.swing.JTree;import javax.swing.tree.DefaultMutableTreeNode;import utils.ClassNameTreeCellRenderer;import utils.EditorUtils;import utils.FrameFactory;imp

24、ort utils.ReadLinkmanXMl;import utils.ReceiveMailTable;public class MainFrame extends JFrame implements ActionListener, MouseListener private static final long serialVersionUID = 1L;private static JDesktopPane desktopPane = null;/ 用于创建多文档界面或虚拟桌面的容器public static MainFrame MAINFRAME;private JTree tree

25、;/ 树形图private JList jl;/ 联系人列表private JPanel panel, panelframe;/ panelframe左半部界面private JLabel labelbackground;private JScrollPane scrollPane;private JMenuItem exitMI = null, newMailMI = null, sendedMI = null,receiveMI = null, recycleMI = null, refreshMI = null;private JButton addLinkmanButton = nul

26、l;/ 添加联系人按钮private JMenu mailMenu = null;private ReadLinkmanXMl readLinkman = null;/ 初始化界面配置public void jFrameValidate() Toolkit tk = getToolkit();/ 获得屏幕的宽和高Dimension dim = tk.getScreenSize();this.setBounds(dim.width / 2 - 420, dim.height / 2 - 350, 850, 678);validate();this.setDefaultCloseOperation

27、(JFrame.EXIT_ON_CLOSE);public MainFrame() super(电子邮件);MAINFRAME = this;this.setIconImage(EditorUtils.createIcon(email.png).getImage();desktopPane = new JDesktopPane();jFrameValidate();/ 初始化界面JMenuBar menuBar = new JMenuBar();this.setJMenuBar(menuBar);final JMenu fileMenu = new JMenu(文件(F);mailMenu =

28、 new JMenu(邮件(M);menuBar.add(fileMenu);menuBar.add(mailMenu);exitMI = addMenuItem(fileMenu, 退出, exit.gif);/ 退出菜单项的初始化/ 新建邮件菜单项的初始化newMailMI = addMenuItem(mailMenu, 新建邮件, newMail.gif);/ 已发送邮件菜单项的初始化SendedMI = addMenuItem(mailMenu, 已发送, sended.png);/ 收件箱邮件菜单项的初始化receiveMI = addMenuItem(mailMenu, 收件箱,

29、receive.png);/ 已删除邮件菜单项的初始化recycleMI = addMenuItem(mailMenu, 已删除, deleted.png);/ 已删除邮件菜单项的初始化refreshMI = addMenuItem(mailMenu, 刷新收件箱, refresh.jpg);/ 构建树形节点DefaultMutableTreeNode root = new DefaultMutableTreeNode(电子邮件系统);DefaultMutableTreeNode addressee = new DefaultMutableTreeNode(收件夹);DefaultMutabl

30、eTreeNode send = new DefaultMutableTreeNode(发件夹);DefaultMutableTreeNode AlreadySend = new DefaultMutableTreeNode(已发送邮件)DefaultMutableTreeNode delete = new DefaultMutableTreeNode(已删除邮件);root.add(send);root.add(addressee);root.add(AlreadySend);root.add(delete);tree = new JTree(root);tree.addMouseListe

31、ner(this);/ 为树形节点注册鼠标事件tree.setPreferredSize(new Dimension(160, 150);/ 重新渲染树形节点ClassNameTreeCellRenderer render = new ClassNameTreeCellRenderer();tree.setCellRenderer(render);/ 联系人面板panel = new JPanel();panel.setLayout(new BorderLayout();panel.setPreferredSize(new Dimension(160, 300);/ 界面左半部面板panelf

32、rame = new JPanel();panelframe.setLayout(new BorderLayout();panelframe.add(panel, BorderLayout.CENTER);panelframe.add(tree, BorderLayout.NORTH);addLinkmanButton = new JButton();addLinkmanButton.setText(联系人(C);addLinkmanButton.setIcon(EditorUtils.createIcon(linkman.gif);panel.add(addLinkmanButton, Bo

33、rderLayout.NORTH);addLinkmanButton.addActionListener(this);/ 注册添加联系人事件readLinkman = new ReadLinkmanXMl();jl = readLinkman.makeList();/ 返回联系人列表jl.addMouseListener(this);/ 添加联系人列表双击事件scrollPane = new JScrollPane();panel.add(scrollPane, BorderLayout.CENTER);scrollPane.setViewportView(jl);/ 在滚动面板中添加联系人v

34、alidate();labelbackground = new JLabel();labelbackground.setIcon(null); / 窗体背景desktopPane.addComponentListener(new ComponentAdapter() public void componentResized(final ComponentEvent e) Dimension size = e.getComponent().getSize();labelbackground.setSize(e.getComponent().getSize();labelbackground.se

35、tText(););desktopPane.add(labelbackground, new Integer(Integer.MIN_VALUE);/ 添加一个分割窗口JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,panelframe, desktopPane);/ 在分隔条上提供一个 UI 小部件来快速展开/折叠分隔条splitPane.setOneTouchExpandable(true);splitPane.setDividerSize(10);/ 设置分隔条的大小getContentPane().ad

36、d(splitPane, BorderLayout.CENTER);/ 返回新建菜单项private JMenuItem addMenuItem(JMenu menu, String name, String icon) / 新建邮件菜单项的初始化JMenuItem menuItem = new JMenuItem(name, EditorUtils.createIcon(icon);menuItem.addActionListener(this);/ 监听退出菜单项事件menu.add(menuItem);return menuItem;/ 添加子窗体的方法public static voi

37、d addIFame(JInternalFrame iframe) JInternalFrame frames = desktopPane.getAllFrames();try for (JInternalFrame ifm : frames) if (ifm.getTitle().equals(iframe.getTitle() desktopPane.selectFrame(true);ifm.toFront();ifm.setSelected(true);return;desktopPane.add(iframe);iframe.setSelected(true);iframe.toFr

38、ont(); catch (PropertyVetoException e) e.printStackTrace();/ action事件的处理Overridepublic void actionPerformed(ActionEvent e) if (e.getSource() = exitMI) System.exit(0);/ 退出系统 else if (e.getSource() = addLinkmanButton) addIFame(FrameFactory.getFrameFactory().getAddLinkManFrame();/ 联系人列表 else if (e.getS

39、ource() = newMailMI) / 新建邮件addIFame(FrameFactory.getFrameFactory().getSendFrame();/ 发件夹 else if (e.getSource() = itemPopupOne | e.getSource() = refreshMI) / 右键刷新收件列表ReceiveMailTable.getMail2Table().startReceiveMail();/ 右键刷新收件列表 else if (e.getSource() = sendedMI) / 已发送addIFame(FrameFactory.getFrameFa

40、ctory().getSendedFrame();/ 已发送 else if (e.getSource() = receiveMI) / 收邮件addIFame(FrameFactory.getFrameFactory().getReceiveFrame();/ 收邮件 else if (e.getSource() = recycleMI) / 已删除addIFame(FrameFactory.getFrameFactory().getRecycleFrame();/ 收邮件private SendFrame sendFrame = null;/ 发送邮件对象public JMenuItem

41、itemPopupOne = null;/ 鼠标右键第一个选项Overridepublic void mouseClicked(MouseEvent e) / 树形节点中的单击事件DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();if (e.getSource() = tree & e.getButton() != 3 & e.getButton() != 2) if (selectedNode = null)return;else if (selectedNode.toString().equals(发件夹) sendFrame = FrameFactory.getFrameFactory().getSendFrame();addIFame(sendFrame);/ 发件夹 else if (selectedNode.toString().equals(收件夹) addIFame(FrameFactory.getFrameFactory().getReceiveFrame();/ 收件夹 else if (selectedNode.toString().equals(已发送邮件)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号