本文章将介绍如何使用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);
}
}
}
}