在linux環境下實現頁面讀取郵件

  最近在研究如何可以在網頁上顯示出自己所收到的界面,用了很多種方法進行嘗試,最後選擇了一種比較簡單可行的方式,在下方會進行敘述。

  在最開始的時候,本想用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: <[email protected]>
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();
			}
			
			
		}

	}

}
將此信息輸出到網頁上即可 每次開啓網頁都是最近收到的郵件,由此完成了郵件提示功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章