最近在研究如何可以在网页上显示出自己所收到的界面,用了很多种方法进行尝试,最后选择了一种比较简单可行的方式,在下方会进行叙述。 在最开始的时候,本想用linux下的邮件命令进行操作,但是这项做法有很多的不便之处,因为自己配置邮件服务器是件比较麻烦的事情,若有兴趣,可以移步 http://blog.163.com/s_zhchluo/blog/static/15014708201111153646190/
我在比较后选用了linux平台下的claws mail 客户端,作为一个轻量级的客户端还是很好用的。
Claws Mail 是一款基于 GTK+ 的电子邮件客户端(和新闻阅读器),其特性如下:
- 响应速度快
- 优雅而精致的界面
- 配置简单,操作直观
- 功能丰富
- 可使用插件来实现更多功能
- 稳定耐用
更多特性可以参照http://www.claws-mail.org/
Debian&Ubuntu install
sudo apt-get install claws-mail
Redhat
#cd /usr/src
#wget nbsp;
#tar claws-mail-3.8.1.tar.gz
#cd claws-mail-3.8.1
#./configure --disable-libetpan
#make
#make install
这里需要注意的是,claws_mail需要依赖于gtk-devel 和glib-devel 或更高的版本,rhel6.2的系统上默认已经安装过gtk2-devel 和glib2-devel 如果你的系统上没有安装这两个开发库的话,请使用yum -y install gtk2-devel glib2-devel
接下来对claws mail 进行配置
下一步
如实填写
接下来的配置是重点,决定了能否收发邮件和完成后面的界面读取。首先要注意的是服务协议,笔者因为手机故障没法开启163邮箱的服务协议,所以用 qq mail 进行举例说明,由于笔者是在板子上搭建的,照相方式不清楚,直接采用了别人的配置图.
以qq mail 为例,先登录自己邮箱,在左上方设置中选择账户选项
将pop3/smtp服务,或者imap/smtp服务开启,笔者推荐使用后者,具体区别是
POP允许电子邮件客户端下载服务器上的邮件,但是您在电子邮件客户端的操作(如:移动邮件、标记已读等),这是不会反馈到服务器上的,比如:您通过电子邮件客户端收取了QQ邮箱中的3封邮件并移动到了其他文件夹,这些移动动作是不会反馈到服务器上的,也就是说,QQ邮箱服务器上的这些邮件是没有同时被移动的 。但是IMAP就不同了,电子邮件客户端的操作都会反馈到服务器上,您对邮件进行的操作(如:移动邮件、标记已读等),服务器上的邮件也会做相应的动作。也就是说,IMAP是“双向”的。同时,IMAP可以只下载邮件的主题,只有当您真正需要的时候,才会下载邮件的所有内容。
接收邮件服务器:imap.qq.com
发送邮件服务器:smtp.qq.com
账户名:您的QQ邮箱账户名(如果您是VIP邮箱,账户名需要填写完整的邮件地址)
密码:您的QQ邮箱密码
电子邮件地址:您的QQ邮箱的完整邮件地址
如何设置IMAP服务的SSL加密方式?
使用SSL的通用配置如下:
接收邮件服务器:imap.qq.com,使用SSL,端口号993
发送邮件服务器:smtp.qq.com,使用SSL,端口号465或587
账户名:您的QQ邮箱账户名(如果您是VIP帐号或Foxmail帐号,账户名需要填写完整的邮件地址)
密码:您的QQ邮箱密码
电子邮件地址:您的QQ邮箱的完整邮件地址
其中端口号可以直接跟在服务器后,如imap.qq.com:993
这是一般配置方法,但是由于找不到收到邮件的存储路径,没有办法对文件进行处理,所以上述内容应该放在第二部执行,首先创建一个本地的mbox,然后将其设置为默认邮箱,后添加第二步邮箱,如此设置好了以后,进入邮件客户端,对邮件进行个性化设置,例如自动检测邮件的频率,这个很重要,笔者设置的是10分钟检测一次。然后在设置中找到动作设置,添加动作,也可以用shell命令或者自己写的脚本来实现,将第二步配置的邮箱收到的邮件用添加的动作发送到本地MH邮箱,由于本地MH邮箱的地址是可查的,位于 /home/mail/inbox 并且按照收发时间以自然数增大方式进行排序
以其中文件较小的“8”进行分析
X-QQ-FEAT: u9yQq91qdYVduOev4is2pMgOyVjMV8HVJOG0A0jJq484UW0NcbDbYOLfi6To1
SStcGc63PvaPj7gKMKm2oYnnVR1HJhMCfyD5wSrdfeX2+aiBVPOLmceL3xvH9bNKJ2iS+wK
lpD4N+M04BbU/JkLwn/ke1wskNjQqbONOLBYnpY7a4ABAKyKgpcYYc0g4f7zHEJ/yxTFyaS
LalK+uK6aVteK6tn+/xKGWfGY/+KvuQOlIwnQHmCTDV9A5VNqhWPH
X-QQ-SSF: 0001000000000040000000000000008
X-HAS-ATTACH: no
X-QQ-BUSINESS-ORIGIN: 2
X-Originating-IP: 123.245.3.15
X-QQ-STYLE:
X-QQ-mid: webmail504t1492517490t5968786
From: "=?gb18030?B?YQ==?=" <107110*****@qq.com>
To: "=?gb18030?B?g6nNb5Cclt2KhaGj?=" <72784****@qq.com>
Subject: 11111122
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_58F60272_094C3900_05AA19DB"
Content-Transfer-Encoding: 8Bit
Date: Tue, 18 Apr 2017 20:11:30 +0800
X-Priority: 3
Message-ID: <tencent_2EDF51CB3DD8E32A312FA32A@qq.com>
X-QQ-MIME: TCMime 1.0 by Tencent
X-Mailer: QQMail 2.x
X-QQ-Mailer: QQMail 2.x
This is a multi-part message in MIME format.
------=_NextPart_58F60272_094C3900_05AA19DB
Content-Type: text/plain;
charset="gb18030"
Content-Transfer-Encoding: base64
MzMzMzMzMzMzMzMzMzMz
------=_NextPart_58F60272_094C3900_05AA19DB
Content-Type: text/html;
charset="gb18030"
Content-Transfer-Encoding: base64
PGRpdj4zMzMzMzMzMzMzMzMzMzM8L2Rpdj4=
------=_NextPart_58F60272_094C3900_05AA19DB--
从上面可以看出特征,可以知道邮件从哪里来From <发件人邮箱> To<收件人邮箱> 日期Date: Tue, 18 Apr 2017 20:11:30 +0800 Subject: 11111122 至于邮件内容 是被加密成别的东西了,具体如何破译无从知晓,但是对于一个网站页面提示收件的功能来说已经足够了。
接下来就是如何能在没有规律可循的文件中准确读取字符串并且输出的问题了
笔者编写了一段代码
package com.tss.email;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class TestEmail {
public static final String PATH="D:/我的文档/Tencent Files/1163981627/FileRecv/email";
public static void main(String[] args) {
File file=new File(PATH);
String[] str=file.list();
for(String s:str){
File f=new File(file, s);
try {
BufferedWriter write=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("qqinfo.txt")));
BufferedReader buff=new BufferedReader(new InputStreamReader(new FileInputStream(f)));
StringBuffer sbuff=new StringBuffer(1024);
String n;
try {
while((n=buff.readLine())!=null){
if(n.startsWith("From")){
sbuff.append("From:"+n.substring(n.indexOf('<')+1,n.indexOf('>')));
}
if(n.startsWith("To")){
sbuff.append("\tTo:"+n.substring(n.indexOf('<')+1,n.indexOf('>')));
}
}
System.out.println(sbuff.toString());
write.write(sbuff.toString());
write.flush();
write.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
将此信息输出到网页上即可 每次开启网页都是最近收到的邮件,由此完成了邮件提示功能。