郵件的回復的代碼很簡單,在迭代郵件的信息的時候調用MimeMessage reply = (MimeMessage) messages[i].reply(Boolean ) TRUE 是郵件回復給發送者,FALSE恢復給所有人。如果要回復到新的收件人請使用SetReply-to。
同時可以使用 reply.setSubject(“***”)設置回復的標題,不設置的話默認是Re: 加上接收到郵件的標題。同理,也可以自己設置正文內容。
這里一定要設置發送郵件的地址,而且必須要和郵件認證的用戶名一致,不然會報錯。
最后調用Transport.send(reply)將郵件發出去
注意:1、reply.setFrom() 必須要設置而且要和郵件認證的用戶名一致,不然會報以下錯誤:
com.sun.mail.smtp.SMTPSendFailedException: 501 mail from address must be same as authorization user
2、建議使用郵件認證登陸郵件服務器,不然會出現以下錯誤:
javax.mail.AuthenticationFailedException: failed to connect, no password specified?
3、代碼雖然很簡單,但是程序難免會出現各種異常。如果大家在調試程序的時候出現錯誤,請給我留言。
給一個成功例子大家參考:.
import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class ReplyMail {
private static final String HOST_NAME = "pop.qq.com";
private static final String SEND_HOST_NAME = "smtp.qq.com";
private static final String PASSWORD = "*******";
private static final String EMAIL_FROM = "flyingsam@qq.com";
private static final String USER_NAME = "flyingsam@qq.com";
private static final String PROTOCOL = "pop3";
private static final String SEND_PROTOCOL = "smtp";
public static void listMail() throws Exception {
Properties props = new Properties();
props.put("mail.smtp.host", SEND_HOST_NAME);
props.put("mail.pop.host", HOST_NAME);
props.put("mail.transport.protocol","smtp");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props, new SimpleAuthenticator(USER_NAME, PASSWORD));
Store store = session.getStore(ReplyMail.PROTOCOL);
store.connect(HOST_NAME, USER_NAME, PASSWORD);
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message[] messages = folder.getMessages();
InternetAddress address;
for (int i = messages.length-1; i >= 0; i--) {
address = (InternetAddress)messages[i].getFrom()[0];
if(address != null) {
System.out.println(address.getPersonal());
}
if (null != address && "秋天的童話".equals(address.getPersonal())) {
System.out.println("第" + i + "個:" + messages[i].getSubject());
MimeMessage replyMessage = (MimeMessage) messages[i].reply(false);
// replyMessage.setFrom(new InternetAddress(EMAIL_FROM));
replyMessage.setRecipients(MimeMessage.RecipientType.TO, address.getAddress());
replyMessage.setText("這是回復郵件,不知道能否成功!");
replyMessage.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(SEND_HOST_NAME, USER_NAME, PASSWORD);
transport.send(replyMessage);
System.out.println("回復成功");
}
}
folder.close(true);
store.close();
}
public static void main(String[] args) {
try {
ReplyMail.listMail();
} catch (Exception e) {
e.printStackTrace();
}
}
}
類SimpleAuthenticator的代碼:
public class SimpleAuthenticator extends Authenticator {
private String username;
private String password;
public SimpleAuthenticator(String username, String password) {
this.username = username;
this.password = password;
}
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(this.username, this.password);
}
}
同時可以使用 reply.setSubject(“***”)設置回復的標題,不設置的話默認是Re: 加上接收到郵件的標題。同理,也可以自己設置正文內容。
這里一定要設置發送郵件的地址,而且必須要和郵件認證的用戶名一致,不然會報錯。
最后調用Transport.send(reply)將郵件發出去
注意:1、reply.setFrom() 必須要設置而且要和郵件認證的用戶名一致,不然會報以下錯誤:
com.sun.mail.smtp.SMTPSendFailedException: 501 mail from address must be same as authorization user
2、建議使用郵件認證登陸郵件服務器,不然會出現以下錯誤:
javax.mail.AuthenticationFailedException: failed to connect, no password specified?
3、代碼雖然很簡單,但是程序難免會出現各種異常。如果大家在調試程序的時候出現錯誤,請給我留言。
給一個成功例子大家參考:.
import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class ReplyMail {
private static final String HOST_NAME = "pop.qq.com";
private static final String SEND_HOST_NAME = "smtp.qq.com";
private static final String PASSWORD = "*******";
private static final String EMAIL_FROM = "flyingsam@qq.com";
private static final String USER_NAME = "flyingsam@qq.com";
private static final String PROTOCOL = "pop3";
private static final String SEND_PROTOCOL = "smtp";
public static void listMail() throws Exception {
Properties props = new Properties();
props.put("mail.smtp.host", SEND_HOST_NAME);
props.put("mail.pop.host", HOST_NAME);
props.put("mail.transport.protocol","smtp");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props, new SimpleAuthenticator(USER_NAME, PASSWORD));
Store store = session.getStore(ReplyMail.PROTOCOL);
store.connect(HOST_NAME, USER_NAME, PASSWORD);
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message[] messages = folder.getMessages();
InternetAddress address;
for (int i = messages.length-1; i >= 0; i--) {
address = (InternetAddress)messages[i].getFrom()[0];
if(address != null) {
System.out.println(address.getPersonal());
}
if (null != address && "秋天的童話".equals(address.getPersonal())) {
System.out.println("第" + i + "個:" + messages[i].getSubject());
MimeMessage replyMessage = (MimeMessage) messages[i].reply(false);
// replyMessage.setFrom(new InternetAddress(EMAIL_FROM));
replyMessage.setRecipients(MimeMessage.RecipientType.TO, address.getAddress());
replyMessage.setText("這是回復郵件,不知道能否成功!");
replyMessage.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(SEND_HOST_NAME, USER_NAME, PASSWORD);
transport.send(replyMessage);
System.out.println("回復成功");
}
}
folder.close(true);
store.close();
}
public static void main(String[] args) {
try {
ReplyMail.listMail();
} catch (Exception e) {
e.printStackTrace();
}
}
}
類SimpleAuthenticator的代碼:
public class SimpleAuthenticator extends Authenticator {
private String username;
private String password;
public SimpleAuthenticator(String username, String password) {
this.username = username;
this.password = password;
}
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(this.username, this.password);
}
}