Java如何在Swing中创建一个简单的邮件客户端程序?
下面的代码片段向您展示了如何创建一个简单的JavaSwing应用程序,该应用程序可用于发送电子邮件。该程序允许用户提供从电子邮件地址到电子邮件地址,电子邮件的主题和消息。用户需要选择可用的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>