郵件的回復(fù)的代碼很簡(jiǎn)單,在迭代郵件的信息的時(shí)候調(diào)用MimeMessage reply = (MimeMessage) messages[i].reply(Boolean ) TRUE 是郵件回復(fù)給發(fā)送者,F(xiàn)ALSE恢復(fù)給所有人。如果要回復(fù)到新的收件人請(qǐng)使用SetReply-to。
同時(shí)可以使用 reply.setSubject(“***”)設(shè)置回復(fù)的標(biāo)題,不設(shè)置的話默認(rèn)是Re: 加上接收到郵件的標(biāo)題。同理,也可以自己設(shè)置正文內(nèi)容。
這里一定要設(shè)置發(fā)送郵件的地址,而且必須要和郵件認(rèn)證的用戶名一致,不然會(huì)報(bào)錯(cuò)。
最后調(diào)用Transport.send(reply)將郵件發(fā)出去
注意:1、reply.setFrom() 必須要設(shè)置而且要和郵件認(rèn)證的用戶名一致,不然會(huì)報(bào)以下錯(cuò)誤:
com.sun.mail.smtp.SMTPSendFailedException: 501 mail from address must be same as authorization user
2、建議使用郵件認(rèn)證登陸郵件服務(wù)器,不然會(huì)出現(xiàn)以下錯(cuò)誤:
javax.mail.AuthenticationFailedException: failed to connect, no password specified?
3、代碼雖然很簡(jiǎn)單,但是程序難免會(huì)出現(xiàn)各種異常。如果大家在調(diào)試程序的時(shí)候出現(xiàn)錯(cuò)誤,請(qǐng)給我留言。
給一個(gè)成功例子大家參考:.
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 + "個(gè):" + 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("這是回復(fù)郵件,不知道能否成功!");
replyMessage.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(SEND_HOST_NAME, USER_NAME, PASSWORD);
transport.send(replyMessage);
System.out.println("回復(fù)成功");
}
}
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);
}
}
同時(shí)可以使用 reply.setSubject(“***”)設(shè)置回復(fù)的標(biāo)題,不設(shè)置的話默認(rèn)是Re: 加上接收到郵件的標(biāo)題。同理,也可以自己設(shè)置正文內(nèi)容。
這里一定要設(shè)置發(fā)送郵件的地址,而且必須要和郵件認(rèn)證的用戶名一致,不然會(huì)報(bào)錯(cuò)。
最后調(diào)用Transport.send(reply)將郵件發(fā)出去
注意:1、reply.setFrom() 必須要設(shè)置而且要和郵件認(rèn)證的用戶名一致,不然會(huì)報(bào)以下錯(cuò)誤:
com.sun.mail.smtp.SMTPSendFailedException: 501 mail from address must be same as authorization user
2、建議使用郵件認(rèn)證登陸郵件服務(wù)器,不然會(huì)出現(xiàn)以下錯(cuò)誤:
javax.mail.AuthenticationFailedException: failed to connect, no password specified?
3、代碼雖然很簡(jiǎn)單,但是程序難免會(huì)出現(xiàn)各種異常。如果大家在調(diào)試程序的時(shí)候出現(xiàn)錯(cuò)誤,請(qǐng)給我留言。
給一個(gè)成功例子大家參考:.
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 + "個(gè):" + 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("這是回復(fù)郵件,不知道能否成功!");
replyMessage.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(SEND_HOST_NAME, USER_NAME, PASSWORD);
transport.send(replyMessage);
System.out.println("回復(fù)成功");
}
}
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);
}
}