- JavaMail API 教程
- JavaMail - 首页
- JavaMail API - 概述
- JavaMail - 环境设置
- JavaMail - 核心类
- JavaMail - 发送邮件
- JavaMail - 检查邮件
- JavaMail - 获取邮件
- JavaMail - 身份验证
- JavaMail - 回复邮件
- JavaMail - 转发邮件
- JavaMail - 删除邮件
- JavaMail - Gmail SMTP 服务器
- JavaMail - 文件夹管理
- JavaMail - 配额管理
- JavaMail - 退信
- JavaMail API 协议
- JavaMail - SMTP 服务器
- JavaMail - IMAP 服务器
- JavaMail - POP3 服务器
- JavaMail API 有用资源
- JavaMail - 快速指南
- JavaMail - 有用资源
- JavaMail - 讨论
JavaMail API - 回复邮件
本章将介绍如何使用 JavaMail API 回复邮件。下面程序中遵循的基本步骤是
获取包含 POP 和 SMTP 服务器详细信息的 Session 对象。我们需要 POP 详细信息来检索邮件,需要 SMTP 详细信息来发送邮件。
创建 POP3 store 对象并连接到 store。
创建 Folder 对象并在您的邮箱中打开相应的文件夹。
检索邮件。
遍历邮件,如果您想回复,请输入“Y”或“y”。
获取邮件的所有信息(收件人、发件人、主题、内容)。
使用 Message.reply() 方法构建回复邮件。此方法使用正确的收件人和主题配置新的 Message。该方法采用布尔参数,指示是仅回复发件人 (false) 还是回复所有人 (true)。
设置邮件的发件人、文本和回复地址,并通过 Transport 对象实例发送。
分别关闭 Transport、folder 和 store 对象。
在这里,我们使用了 JangoSMTP 服务器来将邮件发送到我们的目标邮箱地址。设置方法在环境设置章节中进行了说明。
创建 Java 类
创建一个名为 ReplyToEmail 的 java 类文件,其内容如下所示
package com.tutorialspoint; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Date; import java.util.Properties; import javax.mail.Folder; import javax.mail.Message; import javax.mail.Session; import javax.mail.Store; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class ReplyToEmail { public static void main(String args[]) { Date date = null; Properties properties = new Properties(); properties.put("mail.store.protocol", "pop3"); properties.put("mail.pop3s.host", "pop.gmail.com"); properties.put("mail.pop3s.port", "995"); properties.put("mail.pop3.starttls.enable", "true"); properties.put("mail.smtp.auth", "true"); properties.put("mail.smtp.starttls.enable", "true"); properties.put("mail.smtp.host", "relay.jangosmtp.net"); properties.put("mail.smtp.port", "25"); Session session = Session.getDefaultInstance(properties); // session.setDebug(true); try { // Get a Store object and connect to the current host Store store = session.getStore("pop3s"); store.connect("pop.gmail.com", "[email protected]", "*****");//change the user and password accordingly Folder folder = store.getFolder("inbox"); if (!folder.exists()) { System.out.println("inbox not found"); System.exit(0); } folder.open(Folder.READ_ONLY); BufferedReader reader = new BufferedReader(new InputStreamReader( System.in)); Message[] messages = folder.getMessages(); if (messages.length != 0) { for (int i = 0, n = messages.length; i < n; i++) { Message message = messages[i]; date = message.getSentDate(); // Get all the information from the message String from = InternetAddress.toString(message.getFrom()); if (from != null) { System.out.println("From: " + from); } String replyTo = InternetAddress.toString(message .getReplyTo()); if (replyTo != null) { System.out.println("Reply-to: " + replyTo); } String to = InternetAddress.toString(message .getRecipients(Message.RecipientType.TO)); if (to != null) { System.out.println("To: " + to); } String subject = message.getSubject(); if (subject != null) { System.out.println("Subject: " + subject); } Date sent = message.getSentDate(); if (sent != null) { System.out.println("Sent: " + sent); } System.out.print("Do you want to reply [y/n] : "); String ans = reader.readLine(); if ("Y".equals(ans) || "y".equals(ans)) { Message replyMessage = new MimeMessage(session); replyMessage = (MimeMessage) message.reply(false); replyMessage.setFrom(new InternetAddress(to)); replyMessage.setText("Thanks"); replyMessage.setReplyTo(message.getReplyTo()); // Send the message by authenticating the SMTP server // Create a Transport instance and call the sendMessage Transport t = session.getTransport("smtp"); try { //connect to the smpt server using transport instance //change the user and password accordingly t.connect("abc", "****"); t.sendMessage(replyMessage, replyMessage.getAllRecipients()); } finally { t.close(); } System.out.println("message replied successfully ...."); // close the store and folder objects folder.close(false); store.close(); } else if ("n".equals(ans)) { break; } }//end of for loop } else { System.out.println("There is no msg...."); } } catch (Exception e) { e.printStackTrace(); } } }
您可以通过取消注释语句 session.setDebug(true); 来打开调试。
编译和运行
现在我们的类已准备就绪,让我们编译上面的类。我已经将 ReplyToEmail.java 类保存到目录:/home/manisha/JavaMailAPIExercise。我们需要将 javax.mail.jar 和 activation.jar jar 包添加到类路径中。从命令提示符执行以下命令来编译类(两个 jar 包都放在 /home/manisha/ 目录中)
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: ReplyToEmail.java
现在类已编译,执行以下命令运行
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: ReplyToEmail
验证输出
您应该在命令控制台中看到以下消息
From: ABC <[email protected]> Reply-to: [email protected] To: XYZ <[email protected]> Subject: Hi today is a nice day Sent: Thu Oct 17 15:58:37 IST 2013 Do you want to reply [y/n] : y message replied successfully ....
检查发送邮件的收件箱。在本例中,收到的邮件如下所示
广告