本文章将介绍如何使用Java的Swing编写一个利用JavaMail实现的邮件客户端,这里需要你输入发送人信息和接收人信息以及简单的邮件文本信息。
mail.jar
下载地址:https://www.oracle.com/technetwork/java/javamail/index-138643.html
效果图:
源代码:
package com.bug315.gui; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Properties; import javax.mail.Address; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class MailTest1 extends JFrame{ private static final long serialVersionUID = 1L; private JTextField from; private JTextField to; private JPasswordField password; private JTextField subject; private JButton send,cancel; private JTextArea content; private JScrollPane scrollPane; private JPanel panel; /** * 构造一个无参数的MailTest1对象 */ public MailTest1(){ init(); } /** * 主方法 * @param args */ public static void main(String[] args) { new MailTest1(); } /** *初始化界面 */ private void init(){ HandleMail handle = new HandleMail(this);//创建监听器对象 panel = new JPanel(new GridLayout(5,1)); from = new JTextField(20); to = new JTextField(20); subject = new JTextField(20); password = new JPasswordField(20); send = new JButton("Send"); send.setActionCommand("send"); send.addActionListener(handle); cancel = new JButton("Cancel"); cancel.setActionCommand("cancel"); cancel.addActionListener(handle); content = new JTextArea(100,200); scrollPane = new JScrollPane(content); scrollPane.setBorder(BorderFactory.createTitledBorder("Content")); scrollPane.setBorder(BorderFactory.createLoweredBevelBorder()); JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT)); p.add(new JLabel(" From :")); p.add(from); p.add(new JLabel("<html><body><font color='red'>(example: xxx@163.com)</font></body></html>")); panel.add(p); p = new JPanel(new FlowLayout(FlowLayout.LEFT)); p.add(new JLabel("Password :")); p.add(password); panel.add(p); p = new JPanel(new FlowLayout(FlowLayout.LEFT)); p.add(new JLabel(" To :")); p.add(to); p.add(new JLabel("<html><body><font color='red'>(example: xxx@163.com)</font></body></html>")); panel.add(p); p = new JPanel(new FlowLayout(FlowLayout.LEFT)); p.add(new JLabel(" Subject :")); p.add(subject); panel.add(p); p = new JPanel(new FlowLayout(FlowLayout.LEFT)); p.add(new JLabel("Content :")); panel.add(p); this.add(panel,BorderLayout.NORTH); p = new JPanel(new FlowLayout(FlowLayout.RIGHT)); p.add(send); p.add(new JLabel(" ")); p.add(cancel); this.add(p,BorderLayout.SOUTH); this.add(scrollPane,BorderLayout.CENTER); this.setTitle("E-Mail"); this.setSize(700,600); this.setLocation((Toolkit.getDefaultToolkit().getScreenSize().width - this.getWidth())/2, (Toolkit.getDefaultToolkit().getScreenSize().height - this.getHeight())/2); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public JTextField getFrom() { return from; } public JTextField getTo() { return to; } public JTextField getSubject() { return subject; } public JTextArea getContent() { return content; } public JPasswordField getPassword() { return password; } } /** * 按钮事件处理 * @param e */ class HandleMail implements ActionListener{ private Message message; private Transport transport; private Session session; private Properties props; private MailTest1 mailTest; private JTextField from,to,subject; private JTextArea content; private JPasswordField password; public HandleMail(MailTest1 mailTest){ this.mailTest = mailTest; } /** * 初始化 */ private void init(){ from = mailTest.getFrom(); to = mailTest.getTo(); subject = mailTest.getSubject(); content = mailTest.getContent(); password = mailTest.getPassword(); } @Override public void actionPerformed(ActionEvent e) { init(); String command = e.getActionCommand(); if("send".equals(command)){ String from = this.from.getText(); String to = this.to.getText(); String subject = this.subject.getText(); String password = new String(this.password.getPassword()); String content = this.content.getText(); props = new Properties(); props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.debug", "true"); props.setProperty("mail.smtp.auth", "true"); session = Session.getInstance(props); message = new MimeMessage(session); try { message.setText(content); message.setFrom(new InternetAddress(from)); message.setSubject(subject); transport = session.getTransport(); transport.connect("smtp.163.com", 25, from.substring(0,from.indexOf('@')), password); transport.sendMessage(message, new Address[]{new InternetAddress(to)}); } catch (Exception e1) { e1.printStackTrace(); } }else if("cancel".equals(command)){ int statu = JOptionPane.showConfirmDialog(null, "Are you sure exit?","prompt",JOptionPane.INFORMATION_MESSAGE,JOptionPane.OK_CANCEL_OPTION); if(statu == JOptionPane.OK_OPTION){ System.exit(0); } } } }