【Java mail 入门教程】第六讲 邮件回复

第六讲我将会讲解邮件的回复,邮件的回复的代码很简单,在迭代邮件的信息的时候调用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、代码虽然很简单,但是程序难免会出现各种异常。如果大家在调试程序的时候出现错误,请给我留言。

给一个成功例子大家参考:

1 import java.io.*;
2  import java.util.*;
3 
4  import javax.mail.*;
5  import javax.mail.internet.*;
6 
7  public class ReplyMail {
8 
9 private static final String HOST_NAME = "pop.qq.com";
10 private static final String SEND_HOST_NAME = "smtp.qq.com";
11 private static final String PASSWORD = "*******";
12 private static final String EMAIL_FROM = "flyingsam@qq.com";
13 private static final String USER_NAME = "flyingsam@qq.com";
14 private static final String PROTOCOL = "pop3";
15 private static final String SEND_PROTOCOL = "smtp";
16 
17 public static void listMail() throws Exception {
18 Properties props = new Properties();
19 props.put("mail.smtp.host", SEND_HOST_NAME);
20 props.put("mail.pop.host", HOST_NAME);
21 props.put("mail.transport.protocol","smtp");
22 props.put("mail.smtp.auth", "true");
23 
24 
25 Session session = Session.getDefaultInstance(props, new SimpleAuthenticator(USER_NAME, PASSWORD)); 
26 Store store = session.getStore(ReplyMail.PROTOCOL); 
27 store.connect(HOST_NAME, USER_NAME, PASSWORD);
28 Folder folder = store.getFolder("INBOX");
29 folder.open(Folder.READ_ONLY); 
30 Message[] messages = folder.getMessages(); 
31 InternetAddress address; 
32 for (int i = messages.length-1; i >= 0; i--) { 
33 address = (InternetAddress)messages[i].getFrom()[0]; 
34 if(address != null) { 
35 System.out.println(address.getPersonal()); 
36 } 
37 if (null != address && "秋天的童话".equals(address.getPersonal())) { 
38 System.out.println("" + i + "个:" + messages[i].getSubject()); 
39 MimeMessage replyMessage = (MimeMessage) messages[i].reply(false); 
40  // replyMessage.setFrom(new InternetAddress(EMAIL_FROM));
41  
42 replyMessage.setRecipients(MimeMessage.RecipientType.TO, address.getAddress());
43 replyMessage.setText("这是回复邮件,不知道能否成功!"); 
44 replyMessage.saveChanges();
45 Transport transport = session.getTransport("smtp");
46 transport.connect(SEND_HOST_NAME, USER_NAME, PASSWORD);
47 transport.send(replyMessage);
48 System.out.println("回复成功"); 
49 } 
50 } 
51 folder.close(true); 
52 store.close();
53 }
54 
55 public static void main(String[] args) {
56 try {
57 ReplyMail.listMail();
58 } catch (Exception e) {
59 e.printStackTrace();
60 }
61 }
62 
63 }
64
类SimpleAuthenticator的代码:
public class SimpleAuthenticator extends Authenticator {
2 
3 private String username;
4 
5 private String password;
6 
7 public SimpleAuthenticator(String username, String password) {
8 this.username = username;
9 this.password = password;
10 }
11 
12 public PasswordAuthentication getPasswordAuthentication() { 
13 return new PasswordAuthentication(this.username, this.password);
14 
15 }
16 
17 }

总结:邮件回复就那么几行代码,不过在写程序的时候出现的问题接二连三,一个问题解决了,又出现另外一个问题。一直在寻找答案,在国内各大技术论坛、社区都找过了,可是没有我想要的答案,最后决定去外国google搜一下,看看有没有外国朋友遇到过这个问题,可是在google搜到的英文网站的资料都读了,问题依然没有解决,最后去查找java mail的源代码,读了这个类库的一些源代码理解了背后原理,最后将问题解决了。其实遇到问题不难解决,难就难有没有好的解决问题的思路,如果遇到问题就扔掉或者坐在一边等人家给答案,那是永远学不会东西的。经过这次的我收获很大!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【完整课程列表】 https://download.csdn.net/download/qq_27595745/55555830 完整版精品java课件 Java基础入门教程 Java程序设计 第1章 Java语言概述(共38页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第2章 java语言基础(共31页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第3章 控制结构(共23页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第4章 类和对象(共57页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第5章 继承和接口(共47页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第6章 数组和集合(共44页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第7章 字符串处理(共38页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第8章 异常处理(共27页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第9章 输入输出流(共49页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第10章 JDBC数据库编程(共21页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第11章 图形用户界面1(共27页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第11章 图形用户界面2(共31页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第12章 applet(共16页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第13章 多线程(共24页).ppt 完整版精品java课件 Java基础入门教程 Java程序设计 第14章 socket网络编程(共24页).ppt

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值