下面的代码片段向您展示了如何创建一个简单的Java Swing应用程序,该应用程序可用于发送电子邮件。该程序允许用户提供从电子邮件地址到电子邮件地址,电子邮件的主题和消息。用户需要选择可用的SMTP服务器进行连接,并提供用于验证邮件服务器的用户名和密码。
这是此简单电子邮件客户端的用户界面:
发送电子邮件的主要例程在SendEmailActionListener类中,该类是ActionListener接口的实现,该接口将在按下“发送电子邮件”按钮时处理电子邮件发送过程。
package org.nhooo.example.mail;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Properties;
public class SendEmailClient extends JFrame {
private JTextField fromField = new JTextField();
private JTextField toField = new JTextField();
private JTextField subjectField = new JTextField();
private JComboBox<String> mailSmtpHostComboBox = new JComboBox<>();
private JTextField usernameField = new JTextField();
private JPasswordField passwordField = new JPasswordField();
private JTextArea contentTextArea = new JTextArea();
private SendEmailClient() {
InitializeUI();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
SendEmailClient client = new SendEmailClient();
client.setVisible(true);
}
});
}
private void InitializeUI() {
setTitle("Send E-mail Client");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(new Dimension(400, 280));
getContentPane().setLayout(new BorderLayout());
// 标题面板
JPanel headerPanel = new JPanel();
headerPanel.setLayout(new GridLayout(6, 2));
headerPanel.add(new JLabel("From:"));
headerPanel.add(fromField);
headerPanel.add(new JLabel("To:"));
headerPanel.add(toField);
headerPanel.add(new JLabel("Subject:"));
headerPanel.add(subjectField);
headerPanel.add(new JLabel("STMP Server:"));
headerPanel.add(mailSmtpHostComboBox);
mailSmtpHostComboBox.addItem("smtp.gmail.com");
headerPanel.add(new JLabel("Username:"));
headerPanel.add(usernameField);
headerPanel.add(new JLabel("Password:"));
headerPanel.add(passwordField);
// 车身面板
JPanel bodyPanel = new JPanel();
bodyPanel.setLayout(new BorderLayout());
bodyPanel.add(new JLabel("Message:"), BorderLayout.NORTH);
bodyPanel.add(contentTextArea, BorderLayout.CENTER);
JPanel footerPanel = new JPanel();
footerPanel.setLayout(new BorderLayout());
JButton sendMailButton = new JButton("Send E-mail");
sendMailButton.addActionListener(new SendEmailActionListener());
footerPanel.add(sendMailButton, BorderLayout.SOUTH);
getContentPane().add(headerPanel, BorderLayout.NORTH);
getContentPane().add(bodyPanel, BorderLayout.CENTER);
getContentPane().add(footerPanel, BorderLayout.SOUTH);
}
private class SendEmailActionListener implements ActionListener {
SendEmailActionListener() {
}
@Override
public void actionPerformed(ActionEvent e) {
Properties props = new Properties();
props.put("mail.smtp.host", mailSmtpHostComboBox.getSelectedItem());
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
Session session = Session.getDefaultInstance(props);
try {
InternetAddress fromAddress = new InternetAddress(fromField.getText());
InternetAddress toAddress = new InternetAddress(toField.getText());
Message message = new MimeMessage(session);
message.setFrom(fromAddress);
message.setRecipient(Message.RecipientType.TO, toAddress);
message.setSubject(subjectField.getText());
message.setText(contentTextArea.getText());
Transport.send(message, usernameField.getText(),
new String(passwordField.getPassword()));
} catch (MessagingException ex) {
ex.printStackTrace();
}
}
}
}Maven依赖
<!-- http://repo1.maven.org/maven2/javax/mail/javax.mail-api/1.5.6/javax.mail-api-1.5.6.jar --> <dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artifactId> <version>1.5.6</version> </dependency> <!-- http://repo1.maven.org/maven2/javax/mail/mail/1.4.7/mail-1.4.7.jar --> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency>