- 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", "xyz@gmail.com",
"*****");//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 <abc@gmail.com> Reply-to: abc@trioteksolutions.com To: XYZ <xyz@gmail.com> 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 ....
檢查傳送郵件的收件箱。在本例中,收到的郵件如下所示
廣告