首页   资讯   精华   论坛   问答   博客   专栏   群组   更多 ▼

招聘搜索

您还未登录 !     登录     注册

XZY的学习笔记

  • 博客

  • 微博

  • 相册

  • 收藏

  • 留言

  • 关于我

xiangzhengyan

javamail接收邮件(较全)

博客分类: Java EE

CC++C#OS

java 代码

  1. import java.io.*;

  2. import java.text.*;

  3. import java.util.*;

  4. import javax.mail.*;

  5. import javax.mail.internet.*;

  6. /**

  7. * 有一封邮件就需要建立一个ReciveMail对象

  8. */

  9. public class ReciveOneMail {

  10. private MimeMessage mimeMessage = null;

  11. private String saveAttachPath = ""; //附件下载后的存放目录

  12. private StringBuffer bodytext = new StringBuffer();//存放邮件内容

  13. private String dateformat = "yy-MM-dd HH:mm"; //默认的日前显示格式

  14. public ReciveOneMail(MimeMessage mimeMessage) {

  15. this.mimeMessage = mimeMessage;

  16. }

  17. public void setMimeMessage(MimeMessage mimeMessage) {

  18. this.mimeMessage = mimeMessage;

  19. }

  20. /**

  21. * 获得发件人的地址和姓名

  22. */

  23. public String getFrom() throws Exception {

  24. InternetAddress address[] = (InternetAddress[]) mimeMessage.getFrom();

  25. String from = address[0].getAddress();

  26. if (from == null)

  27. from = "";

  28. String personal = address[0].getPersonal();

  29. if (personal == null)

  30. personal = "";

  31. String fromaddr = personal + "<"< span=""> + from + ">";

  32. return fromaddr;

  33. }

  34. /**

  35. * 获得邮件的收件人,抄送,和密送的地址和姓名,根据所传递的参数的不同 "to"----收件人 "cc"---抄送人地址 "bcc"---密送人地址

  36. */

  37. public String getMailAddress(String type) throws Exception {

  38. String mailaddr = "";

  39. String addtype = type.toUpperCase();

  40. InternetAddress[] address = null;

  41. if (addtype.equals("TO") || addtype.equals("CC")|| addtype.equals("BCC")) {

  42. if (addtype.equals("TO")) {

  43. address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.TO);

  44. } else if (addtype.equals("CC")) {

  45. address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.CC);

  46. } else {

  47. address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.BCC);

  48. }

  49. if (address != null) {

  50. for (int i = 0; i < address.length; i++) {

  51. String email = address[i].getAddress();

  52. if (email == null)

  53. email = "";

  54. else {

  55. email = MimeUtility.decodeText(email);

  56. }

  57. String personal = address[i].getPersonal();

  58. if (personal == null)

  59. personal = "";

  60. else {

  61. personal = MimeUtility.decodeText(personal);

  62. }

  63. String compositeto = personal + "<"< span=""> + email + ">";

  64. mailaddr += "," + compositeto;

  65. }

  66. mailaddr = mailaddr.substring(1);

  67. }

  68. } else {

  69. throw new Exception("Error emailaddr type!");

  70. }

  71. return mailaddr;

  72. }

  73. /**

  74. * 获得邮件主题

  75. */

  76. public String getSubject() throws MessagingException {

  77. String subject = "";

  78. try {

  79. subject = MimeUtility.decodeText(mimeMessage.getSubject());

  80. if (subject == null)

  81. subject = "";

  82. } catch (Exception exce) {}

  83. return subject;

  84. }

  85. /**

  86. * 获得邮件发送日期

  87. */

  88. public String getSentDate() throws Exception {

  89. Date sentdate = mimeMessage.getSentDate();

  90. SimpleDateFormat format = new SimpleDateFormat(dateformat);

  91. return format.format(sentdate);

  92. }

  93. /**

  94. * 获得邮件正文内容

  95. */

  96. public String getBodyText() {

  97. return bodytext.toString();

  98. }

  99. /**

  100. * 解析邮件,把得到的邮件内容保存到一个StringBuffer对象中,解析邮件 主要是根据MimeType类型的不同执行不同的操作,一步一步的解析

  101. */

  102. public void getMailContent(Part part) throws Exception {

  103. String contenttype = part.getContentType();

  104. int nameindex = contenttype.indexOf("name");

  105. boolean conname = false;

  106. if (nameindex != -1)

  107. conname = true;

  108. System.out.println("CONTENTTYPE: " + contenttype);

  109. if (part.isMimeType("text/plain") && !conname) {

  110. bodytext.append((String) part.getContent());

  111. } else if (part.isMimeType("text/html") && !conname) {

  112. bodytext.append((String) part.getContent());

  113. } else if (part.isMimeType("multipart/*")) {

  114. Multipart multipart = (Multipart) part.getContent();

  115. int counts = multipart.getCount();

  116. for (int i = 0; i < counts; i++) {

  117. getMailContent(multipart.getBodyPart(i));

  118. }

  119. } else if (part.isMimeType("message/rfc822")) {

  120. getMailContent((Part) part.getContent());

  121. } else {}

  122. }

  123. /**

  124. * 判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false"

  125. */

  126. public boolean getReplySign() throws MessagingException {

  127. boolean replysign = false;

  128. String needreply[] = mimeMessage

  129. .getHeader("Disposition-Notification-To");

  130. if (needreply != null) {

  131. replysign = true;

  132. }

  133. return replysign;

  134. }

  135. /**

  136. * 获得此邮件的Message-ID

  137. */

  138. public String getMessageId() throws MessagingException {

  139. return mimeMessage.getMessageID();

  140. }

  141. /**

  142. * 【判断此邮件是否已读,如果未读返回返回false,反之返回true】

  143. */

  144. public boolean isNew() throws MessagingException {

  145. boolean isnew = false;

  146. Flags flags = ((Message) mimeMessage).getFlags();

  147. Flags.Flag[] flag = flags.getSystemFlags();

  148. System.out.println("flags's length: " + flag.length);

  149. for (int i = 0; i < flag.length; i++) {

  150. if (flag[i] == Flags.Flag.SEEN) {

  151. isnew = true;

  152. System.out.println("seen Message.......");

  153. break;

  154. }

  155. }

  156. return isnew;

  157. }

  158. /**

  159. * 判断此邮件是否包含附件

  160. */

  161. public boolean isContainAttach(Part part) throws Exception {

  162. boolean attachflag = false;

  163. String contentType = part.getContentType();

  164. if (part.isMimeType("multipart/*")) {

  165. Multipart mp = (Multipart) part.getContent();

  166. for (int i = 0; i < mp.getCount(); i++) {

  167. BodyPart mpart = mp.getBodyPart(i);

  168. String disposition = mpart.getDisposition();

  169. if ((disposition != null)

  170. && ((disposition.equals(Part.ATTACHMENT)) || (disposition

  171. .equals(Part.INLINE))))

  172. attachflag = true;

  173. else if (mpart.isMimeType("multipart/*")) {

  174. attachflag = isContainAttach((Part) mpart);

  175. } else {

  176. String contype = mpart.getContentType();

  177. if (contype.toLowerCase().indexOf("application") != -1)

  178. attachflag = true;

  179. if (contype.toLowerCase().indexOf("name") != -1)

  180. attachflag = true;

  181. }

  182. }

  183. } else if (part.isMimeType("message/rfc822")) {

  184. attachflag = isContainAttach((Part) part.getContent());

  185. }

  186. return attachflag;

  187. }

  188. /**

  189. * 【保存附件】

  190. */

  191. public void saveAttachMent(Part part) throws Exception {

  192. String fileName = "";

  193. if (part.isMimeType("multipart/*")) {

  194. Multipart mp = (Multipart) part.getContent();

  195. for (int i = 0; i < mp.getCount(); i++) {

  196. BodyPart mpart = mp.getBodyPart(i);

  197. String disposition = mpart.getDisposition();

  198. if ((disposition != null)

  199. && ((disposition.equals(Part.ATTACHMENT)) || (disposition

  200. .equals(Part.INLINE)))) {

  201. fileName = mpart.getFileName();

  202. if (fileName.toLowerCase().indexOf("gb2312") != -1) {

  203. fileName = MimeUtility.decodeText(fileName);

  204. }

  205. saveFile(fileName, mpart.getInputStream());

  206. } else if (mpart.isMimeType("multipart/*")) {

  207. saveAttachMent(mpart);

  208. } else {

  209. fileName = mpart.getFileName();

  210. if ((fileName != null)

  211. && (fileName.toLowerCase().indexOf("GB2312") != -1)) {

  212. fileName = MimeUtility.decodeText(fileName);

  213. saveFile(fileName, mpart.getInputStream());

  214. }

  215. }

  216. }

  217. } else if (part.isMimeType("message/rfc822")) {

  218. saveAttachMent((Part) part.getContent());

  219. }

  220. }

  221. /**

  222. * 【设置附件存放路径】

  223. */

  224. public void setAttachPath(String attachpath) {

  225. this.saveAttachPath = attachpath;

  226. }

  227. /**

  228. * 【设置日期显示格式】

  229. */

  230. public void setDateFormat(String format) throws Exception {

  231. this.dateformat = format;

  232. }

  233. /**

  234. * 【获得附件存放路径】

  235. */

  236. public String getAttachPath() {

  237. return saveAttachPath;

  238. }

  239. /**

  240. * 【真正的保存附件到指定目录里】

  241. */

  242. private void saveFile(String fileName, InputStream in) throws Exception {

  243. String osName = System.getProperty("os.name");

  244. String storedir = getAttachPath();

  245. String separator = "";

  246. if (osName == null)

  247. osName = "";

  248. if (osName.toLowerCase().indexOf("win") != -1) {

  249. separator = "\\\\";

  250. if (storedir == null || storedir.equals(""))

  251. storedir = "c:\\\\tmp";

  252. } else {

  253. separator = "/";

  254. storedir = "/tmp";

  255. }

  256. File storefile = new File(storedir + separator + fileName);

  257. System.out.println("storefile's path: " + storefile.toString());

  258. // for(int i=0;storefile.exists();i++){

  259. // storefile = new File(storedir+separator+fileName+i);

  260. // }

  261. BufferedOutputStream bos = null;

  262. BufferedInputStream bis = null;

  263. try {

  264. bos = new BufferedOutputStream(new FileOutputStream(storefile));

  265. bis = new BufferedInputStream(in);

  266. int c;

  267. while ((c = bis.read()) != -1) {

  268. bos.write(c);

  269. bos.flush();

  270. }

  271. } catch (Exception exception) {

  272. exception.printStackTrace();

  273. throw new Exception("文件保存失败!");

  274. } finally {

  275. bos.close();

  276. bis.close();

  277. }

  278. }

  279. /**

  280. * PraseMimeMessage类测试

  281. */

  282. public static void main(String args[]) throws Exception {

  283. Properties props = System.getProperties();

  284. props.put("mail.smtp.host", "smtp.163.com");

  285. props.put("mail.smtp.auth", "true");

  286. Session session = Session.getDefaultInstance(props, null);

  287. URLName urln = new URLName("pop3", "pop3.163.com", 110, null,

  288. "xiangzhengyan", "pass");

  289. Store store = session.getStore(urln);

  290. store.connect();

  291. Folder folder = store.getFolder("INBOX");

  292. folder.open(Folder.READ_ONLY);

  293. Message message[] = folder.getMessages();

  294. System.out.println("Messages's length: " + message.length);

  295. ReciveOneMail pmm = null;

  296. for (int i = 0; i < message.length; i++) {

  297. System.out.println("======================");

  298. pmm = new ReciveOneMail((MimeMessage) message[i]);

  299. System.out.println("Message " + i + " subject: " + pmm.getSubject());

  300. System.out.println("Message " + i + " sentdate: "+ pmm.getSentDate());

  301. System.out.println("Message " + i + " replysign: "+ pmm.getReplySign());

  302. System.out.println("Message " + i + " hasRead: " + pmm.isNew());

  303. System.out.println("Message " + i + "  containAttachment: "+ pmm.isContainAttach((Part) message[i]));

  304. System.out.println("Message " + i + " form: " + pmm.getFrom());

  305. System.out.println("Message " + i + " to: "+ pmm.getMailAddress("to"));

  306. System.out.println("Message " + i + " cc: "+ pmm.getMailAddress("cc"));

  307. System.out.println("Message " + i + " bcc: "+ pmm.getMailAddress("bcc"));

  308. pmm.setDateFormat("yy年MM月dd日 HH:mm");

  309. System.out.println("Message " + i + " sentdate: "+ pmm.getSentDate());

  310. System.out.println("Message " + i + " Message-ID: "+ pmm.getMessageId());

  311. // 获得邮件内容===============

  312. pmm.getMailContent((Part) message[i]);

  313. System.out.println("Message " + i + " bodycontent: \\r\\n"

  314. + pmm.getBodyText());

  315. pmm.setAttachPath("c:\\\\");

  316. pmm.saveAttachMent((Part) message[i]);

  317. }

  318. }

  319. }

分享到:            

第一个Hibernate with Annotation程式(转 ...      |       javamail发送邮件(简)

  • 2007-06-02 21:59

  • 浏览 35904

  • 评论(14)

  • 相关推荐

评论

14 楼     hsjshijiazhuang    2014-03-03

另外再指出,此程序针对于windows vista 以上系统,c盘是拒绝访问的,所以还得在其它盘符下创建附件文件,或者获得访问权限

13 楼     hsjshijiazhuang    2014-03-03

这里面有错误,我修改了,具体修改是:第216行中,if语句中增加((fileName != null)),第219行的saveFile方法挪到if语句里面。就不会报错了

12 楼     llxiyuel    2014-03-01

大哥,怎么解析邮件正文输出纯文本

11 楼     yiwanxinyuefml    2014-01-26

请教一个问题,不知道其他人有没碰到过:就是用javamail接收的邮件,正文、附件都可以正常接收,但是邮件正文有一些换行符之类的东西,接收到之后写入到一个文件却是一整串没有换行符的字符串???

10 楼     amwyyyy    2013-11-29

不错不错   

9 楼     spy41s    2013-07-23

中文会乱码。。。

8 楼     tigerwood008    2012-01-07

如果有附件的哈,好像会有内存溢出的问题,这个该怎么解决!

7 楼     fuanyu    2011-10-14

确实比较全  但是我试了  邮件内容部分还是有问题耶 能否再详细解说下哦

6 楼     嘻哈方式     2011-05-26

确实比较全  但是我试了  邮件内容部分还是有问题耶 能否再详细解说下哦

5 楼     zyh_1986    2010-09-21

写得真不错!从里面学到不少网上很难找的东西,多谢……

4 楼     bsspirit    2010-08-12

这个不错,很有帮助!!

3 楼     DepthJava    2010-04-12

封装的很不错,乱码问题怎么解决的?

2 楼     containsoft    2009-11-23

大哥,问你个问题,邮件收取进来,并保存为文件之后,要在web页面里一条一条的显示出邮件的日期,标题,发件人,点击进去,查看邮件具体内容,这该怎么做呢。能指点指点么。我邮箱containsoft@163.com

1 楼     maweiqiang    2008-06-04

你好啊,你的这个接受邮件我看了,确实写的很不错啊,我们老师也让我们做一个收发邮件,但是收邮件这里我不太明白,麻烦你能把你收邮件的代码包括页面给我看下吗。非常感谢啊,大哥我的邮箱是maweiqiang1025@163.com

发表评论

 您还没有登录,请您登录后再发表评论

xiangzhengyan

  • 浏览: 63611 次

  • 性别:

  • 来自: 北京

最近访客 更多访客>>

dylinshi126

shuitao.cao

smile_clj

Hundun_Wu

文章分类
  • 全部博客 (32)

  • Java EE (3)

  • Java SE (2)

  • Hibernate (3)

  • Spring (5)

  • database (1)

  • tools (2)

  • jBPM (2)

  • linux (0)

  • report (1)

  • js (4)

  • 读书笔记-非技术 (3)

  • eclipse (1)

社区版块
  • 我的资讯 (0)

  • 我的论坛 (1)

  • 我的问答 (0)

存档分类
  • 2013-11 (1)

  • 2012-07 (1)

  • 2011-09 (1)

  • 更多存档...

最新评论
  • hsjshijiazhuang:                   另外再指出,此程序针对于windows vista 以上系统, ...
    javamail接收邮件(较全)

  • hsjshijiazhuang:                   这里面有错误,我修改了,具体修改是:第216行中,if语句中增 ...
    javamail接收邮件(较全)

  • llxiyuel:                   大哥,怎么解析邮件正文输出纯文本
    javamail接收邮件(较全)

  • yiwanxinyuefml:                   请教一个问题,不知道其他人有没碰到过:就是用javamail接 ...
    javamail接收邮件(较全)

  • amwyyyy:                   不错不错   
    javamail接收邮件(较全)


声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。若作者同意转载,必须以超链接形式标明文章原始出处和作者。
2003-2014 ITeye.com.   All rights reserved.  [ 京ICP证110151号  京公网安备110105010620 ]

转载于:https://blog.51cto.com/3957925/1547614

Receive 163 mails相关推荐

  1. 命令行发送SMTP协议邮件(163邮箱)

    这里我们用163邮箱为例子,借助命令行发送smtp邮件 1.连接服务器 在终端上输入:telnet smtp.163.com 25 回车,然后就连接了服务器的25端口,成功会输出 220 163.co ...

  2. Python 自动读取163邮箱收取的验证码

    最近项目开发中有个需求,就是自动化实现某系统的登录功能,但是在解决了滑块验证的问题后,又出现了一个新的问题,就是出现了邮箱验证码的问题,于是不得不在追加个功能模块,就是自动化读取对应的邮箱的验证码,然 ...

  3. 【北邮国院大三下】Cybersecurity Law 网络安全法 Week3

    北邮国院大三电商在读,随课程进行整理知识点.仅整理PPT中相对重要的知识点,内容驳杂并不做期末突击复习用.个人认为相对不重要的细小的知识点不列在其中.如有错误请指出.转载请注明出处,祝您学习愉快. 编 ...

  4. Ranorex通过Python如何将报告发送到邮箱。

    Ranorex测试报告如何发送到邮箱在网上看了下,其实可以通过在Ranorex上或者VS调用编写发送邮箱代码就可以执行发送了,RX主要涉及到的开发语言是C++或者.NET.但是我想用Python调用并 ...

  5. 【SMTP测试】windows环境利用cmd命令发送smtp协议邮件

    一.windows开启telnet服务 windows默认没有打开telnet服务,需要手动打开,步骤如下 操作步骤: 1)进入控制面板 2)点击程序,打开"程序和功能"下的&qu ...

  6. 【转】 ubuntu12.04更新源 官网和163等

    原文网址:http://blog.csdn.net/zhangliang_571/article/details/8813999 分类: LINUX 摘要: 本文列出ubuntu 12.04 LTS更 ...

  7. php模拟邮箱登录2017,php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍_PHP教程...

    最近一直在忙,赶在这个假期结束的时候,发表一下此文,为了是让这些源码开源出来 当然这些方法可能不可取,但大致应该是这种方向了吧,由于目前做的一个UCHOME港台的站点 咱们策划说要改一下好友邀请里面的 ...

  8. python-爬虫:获取163邮箱的收件箱信息列表

    在练习python爬虫的时候看到了原博主的关于爬取163邮箱收件箱信息列表的文章,就拿来练手了.这里附上原博客链接https://blog.csdn.net/u011379247/article/de ...

  9. (详细总结)python爬取 163收件箱邮件内容,收件箱列表的几种方法(urllib, requests, selenium)

    需求:最近有一个需求,需要将163邮箱收件箱里面的所有邮件的内容全部copy下来,整理到一个word里面,不多也就28页的邮件(不要问我为什么有这需求,不告诉你),自己手动去ctrl+ cv 的话,估 ...

  10. Python+Selenium实现自动登录163邮箱导出邮件可按时间和内容进行筛选

    文章目录 描述 一.打码平台 二.实现方法 1. 过点选验证 2. 全部代码 总结 备注 描述 此脚本可以实现网易163邮箱的自动登录,自动过点选验证,按时间和关键字筛选内容,最后导出邮件 一.打码平 ...

最新文章

  1. 51单片机c语言数字输入输出,第五章 51单片机C语言程序--输入输出接口.pdf
  2. hibernate学习(3)——get和load的区别
  3. 客户机系统已禁用cpu_Metricbeat System process metricset系统进程监控参数详情
  4. centos php 开启socket,centos下phpsocket连接,该如何解决
  5. 阿里云ECS,搭建MySQL5.7数据库环境
  6. 异质性查询需要为连线设定_振奋人心!华东理工大学开发新型的荧光染料,为细胞成像奠定基础...
  7. BSTR、char* 和 CString 之间的转换 (转)
  8. Wasserstein GAN
  9. NYOJ469(动态规划)
  10. 中日文字编码转换_全网最全面、全详细的编码、解码知识!!!
  11. HTML如何引入外部JS文件
  12. cut 排序 linux,linux文本查看及处理工具wc, cut, sort, uniq和9道练习题
  13. 计算机音乐的制作流程,Premiere制作音乐电子相册的方法和流程 计算机类数媒...
  14. c语言求最小公约数和最小公倍数,c语言求最大公约数和最小公倍数
  15. BGP手动路由聚合(学习笔记+实验验证)
  16. 【算法随记二】线卷积积分及其在图像增强和特效方面的应用(一)
  17. 物联时代,二维码技术在各行业有哪些应用?
  18. pytorch 实现简单二元分类器以及可视化
  19. 世界最早投入运行的计算机网络是,世界上最早投入运行的计算机网络是。
  20. weblogic反序列化漏洞修复

热门文章

  1. iOS视频直播初窥:高仿喵播APP
  2. 2020最新淘宝等级表图及商品发布限制数量类目表
  3. 计算机组成原理第一章练习题(答案详解)
  4. 【软件测评】屏幕标注软件
  5. ccccccccccccccccccccccccccccccccc
  6. 《软件工程导论》期末复习知识点总结(全)
  7. win10系统steam登陆计算机授权,steam登陆授权
  8. 如何将网易云ncm格式转换为mp3格式
  9. 全国重点城市建筑物矢量数据合集二(Shp格式+带高度)
  10. MiniTable 可单选/取消单选.