如何用java实现使用电子邮件控制你的电脑
上两天看到一篇文章,用python实现电子邮件控制电脑的有趣的小程序
但是苦于自己没接触过python于是想到能不能用java实现,于是写了个java版本的
一开始想用socket连接邮件服务器的,但是比较麻烦,于是找了个易用的方法,使用javamail
一、学会使用javamail
首先我们得实现用java实现收发邮件的功能,通过查了资料,我们需要学习javamail,Javamail开发需要用到以下两个jar包

下载地址:点我呀
将上面两个jar包导入到javaproject中就能愉快的使用java收发电子邮件了,网上这种教程很多,视频也有不少,我就附两个吧:
Java 发送邮件
JavaMail API 核心类
二、实现思路:(我们使用的是IMAP协议)
1.连接邮件服务器,我们必须去遍历所有邮件,找到那一份我们要找的,就是查找来自指定邮箱的新邮件
2.找到指定邮件,获取出该邮件的subject赋给变量,然后将该邮件设置为已读
3.调用java控制windows系统的函数,然后传入subject控制命令就行了。
遇到的问题:
1、如何随时的都能获取新邮件呢?于是我们想到了多线程,于是我用了一个线程死循环不断遍历邮件列表,有指定新邮件就立马接受到(但是在线程控制方面还存在一些问题)
2、有时候连接邮件服务器会超时,但是继续等待又会连上(暂时未解决)
三、代码测试:(以新浪邮箱为例)
首先我们得确定新浪邮箱的一些配置

测试程序:


运行可能会报连接服务器异常

由于在多线程中执行,自己会重新连接服务器

成功的例子:发送一封主题为 notepad的邮件,会打开记事本,如下图

由于初学javamail和多线程,此程序尚不完善,今后学习中继续改善,我觉得他们的python版的很屌啊,还得学习,抽空看看python版的实现原理
程序源代码下载:
可执行jar包下载地址:
可执行jar包运行方法:
有java环境就能双击打开(编译版本jdk1.8.20)
要是看程序的打印信息,可以将jar包放到桌面:

也是可以运行的

如何用java实现使用电子邮件控制你的电脑的更多相关文章
- 如何用java控制你的电脑?
用java控制你的电脑 java,是一门强大的语言,强大的地方在于有很多类,我们可以直接的使用.而java.awt.Robot就很有意思了,顾名思义robot机器人,怎样一个机器法,如:控制鼠标方法: ...
- Spring进阶—如何用Java代码实现邮件发送(一)
相关文章: <Spring进阶—如何用Java代码实现邮件发送(二)> 在一些项目里面如进销存系统,对一些库存不足发出预警提示消息,招聘网站注册用户验证email地址等都需要用到邮件发送技 ...
- 如何用Java编写一段代码引发内存泄露
本文来自StackOverflow问答网站的一个热门讨论:如何用Java编写一段会发生内存泄露的代码. Q:刚才我参加了面试,面试官问我如何写出会发生内存泄露的Java代码.这个问题我一点思路都没有, ...
- Java中的流程控制(三)
关于Java中的流程控制 关于Java中的流程控制 4.do while语句 do while语句的功能和while语句差不多,只不过它是在执行完第一次循环后才检测条件表达式的值,这意味着包含在大括号 ...
- Java中的流程控制(二)
关于Java程序的流程控制(二) 关于Java程序的流程控制(二) 3.switch选择语句 switch语句用于将一个表达式的值同许多其他值比较,并按比较结果选择下面该执行哪些语句. switch( ...
- Java中的流程控制(一)
程序的流程控制(一) 关于Java程序的流程控制(一) 从结构化程序设计角度出发,程序有三种结构: 顺序结构 选择结构 循环结构 1.顺序结构 就是程序从上到下一行行执行,中间没有判断和跳转. 2.i ...
- 第三节:带你详解Java的操作符,控制流程以及数组
前言 大家好,给大家带来带你详解Java的操作符,控制流程以及数组的概述,希望你们喜欢 操作符 算数操作符 一般的 +,-,*,/,还有两个自增 自减 ,以及一个取模 % 操作符. 这里的操作算法,一 ...
- Java 基本语法---流程控制
Java 基本语法---流程控制 0. 概述 三大流程控制语句:顺序.选择.循环. 选择结构: if 结构,if - else结构: 多重 if - else 语句 ; 嵌套 if - else 语句 ...
- Java 訪问权限控制:你真的了解 protected keyword吗?
摘要: 在一个类的内部,其成员(包含成员变量和成员方法)是否能被其它类所訪问,取决于该成员的修饰词:而一个类是否能被其它类所訪问,取决于该类的修饰词.Java的类成员訪问权限修饰词有四类:privat ...
随机推荐
- 问题-Delphi 中使用TStringList后,报out of memory 的解决方法
问题现象: 请一段开发个项目 程序调试全部通过但测试时出现个问题 “out of memory” 在长时间运行时!后来终于解决 :很简单其实就是object.create时对象没有释放. 代码如下: ...
- A Tour of Go Exercise: HTTP Handlers
Implement the following types and define ServeHTTP methods on them. Register them to handle specific ...
- AD板层定义介绍(二)
1.顶层信号层(Top Layer):也称元件层,主要用来放置元器件,对于比层板和多层板可以用来布线: 2.中间信号层(Mid Layer): 最多可有30层,在多层板中用于布信号线. 3.底层信号层 ...
- Qt QDebug :Cannot retrieve debugging output!
调试Qt程序时用Qdebug类输出调试信息: qDebug("read My Com"); 这个问题是个小问题,其实跟程序没关系.当你同时开多个Qt程序(Creator编程 ...
- Dom深入浅出
Dom1级提供了一个Node接口,该接口将由Dom中所有节点类型(包括元素节点.文本节点.属性节点等12种)实现,而js是作为Node类型来实现的,js中的所有节点类型的继承自Node类型, 所以它们 ...
- Emgu CV 高斯建模
Codeprivate void button1_Click(object sender, EventArgs e) { Emgu.CV.Capture cap = new Capture(" ...
- Python Telnet弱口令爆破脚本及遇到的错误与问题
写得时候遇到了一个很大的问题,就是我在发送用户名,接受用户名就会一直卡住.然后等了好久后提示 recv ‘\r\nSession timed out.\r\n\r\nTelnet Server has ...
- RxJava的使用
前言 RxJava及RxAndroid比较详细的介绍可以参考该文档<给 Android 开发者的 RxJava 详解> 基本介绍 ReactiveX 及 RxJava使用大部分来自和参考& ...
- SQLite 使用教程2 语法
http://www.runoob.com/sqlite/sqlite-syntax.html SQLite 语法 SQLite 是遵循一套独特的称为语法的规则和准则.本教程列出了所有基本的 SQLi ...
- JAVA使用EPoll来进行NIO处理的方法(转)
JDK 6.0 以及JDK 5.0 update 9 的 nio支持epoll (仅限 Linux 系统 ),对并发idle connection会有大幅度的性能提升,这就是很多网络服务器应用程序需要 ...