本节概要:实现发送邮件功能
01 导入包依赖
由于发送邮件需要使用mail包,因此maven在这里终于发挥作用了 ,在pom.xml中添加如下内容为mial的依赖:
<dependencies>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
</dependencies>
导入依赖成功
由于是使用第三方工具发送邮件,因此使用邮箱的登录密码可能发送邮件并不会成功,因此就需要获取使用第三方服务器的授权码。
02 获取授权码
第一步:登录网易邮箱(这里以网易邮箱作例)
设置——>POP3/SMTP/IMAP
第二步:开启授权码设置
第三步:发送短信
第四步:设置授权码
第五步:设置成功
03 发送邮件
在MainFrameController.java中添加如下方法:
/**
* 操作结果:创建一个邮件发送对象
*
* @param session
* @param sendMail 发信人
* @param receiveMail 收信人
* @param subject 邮件主题
* @param content 邮件内容
* @return
* @throws UnsupportedEncodingException
*/
public MimeMessage createSimpleMimeMessage(Session session,
String sendMail,
String receiveMail,
String subject,
String content)
throws UnsupportedEncodingException, javax.mail.MessagingException {
// 1.创建一封邮件
MimeMessage mimeMessage = new MimeMessage(session);
// 2.From:发件人
mimeMessage.setFrom(new InternetAddress(sendMail, sendMail, "UTF-8"));
// 3.To:收件人(可以增加多个收件人、抄送、密送)
mimeMessage.setRecipients(MimeMessage.RecipientType.TO, new InternetAddress[]{new InternetAddress(receiveMail
, receiveMail, "UTF-8")});
// 4.邮件主题
mimeMessage.setSubject(subject, "UTF-8");
// 5.Content:邮件正文(可以用HTML标签)
mimeMessage.setContent(content, "text/html;charset=UTF-8");
// 6.设置发件时间
mimeMessage.setSentDate(new Date());
// 7.保存设置
mimeMessage.saveChanges();
return mimeMessage;
}
然后将MainFrameController.java中的do_sendButton_event()方法添加为:
@FXML
void do_sendButton_event(ActionEvent event) throws UnsupportedEncodingException, MessagingException {
Map dataMap = simpleTools.readReturnMap("src/main/resources/properties/data.properties");
String addresser = (String) dataMap.get("addresser");
String addressee = addresseeTextField.getText();
String subject = subjectTextField.getText();
String content = contentHTMLEditor.getHtmlText();
String password = (String) dataMap.get("password");
// 1.创建参数配置, 用于连接邮件服务器的参数配置
Properties properties = new Properties();
properties.setProperty("mail.transport.protocol", "smtp");
properties.setProperty("mail.smtp.host", (String) dataMap.get("server"));
properties.setProperty("mail.smtp.auth", "true");
// 2.根据配置创建会话对象,用于和邮件服务器交互
Session session = Session.getInstance(properties);
session.setDebug(true);
// 3.创建一封邮件
MimeMessage message = createSimpleMimeMessage(session, addresser, addressee, subject, content);
// 4.根据Session获取邮件传输对象
Transport transport = session.getTransport();
// 5.使用邮箱账号和密码连接邮件服务器,这里认证的邮箱必须与message中的发件人邮箱一致,否则报错
transport.connect(addresser, password);
// 6.发送邮件,发到所有的收件地址,message.getAllRecipients()获取到的是在创建邮件对象时添加的所有的收件人、抄送人、密送人
transport.sendMessage(message, message.getAllRecipients());
// 7.关闭连接
transport.close();
}
代码处理完成后,开始测试发送邮件功能。
运行程序,输入一些文字进行测试:
点击“发送”按钮发送邮件。
发送成功会有类似如下的控制台输出:
打开我的QQ邮箱(发件人是用的QQ邮箱),接收邮件成功。
到此,发送邮件功能完成。
注意:自行设置发件人的邮箱和密码。