前面談的都是申請與上傳,在實戰教學的最後就來寫一篇關於下載的~

當然講到郵空下載大家想到的一定都是DSL 或是 SMG !! 因為利用POP方式來下載郵空附件是非常方便的事情~

不過方便之餘也存在著帳密暴露在外的高風險 !!  可不知曾幾何時起,分享者除了要怕空間砍檔外更需擔心人為 的惡意砍檔了… 

想玩郵空分享的人可試著改走WEB吧!!  現在大部份的郵空都支援HTTPS 協定,透過此機制來保護分享檔案也許會是種比較適當的選擇喔~!!


屁話說完就進入正題~

如何走WEB下載郵空的檔案呢??  其實就登入郵空後,下載信件內的附檔就是了嘛…

下面我就舉YM-JP 為例子來說明~

首先我們要利用YM-JP 提供的SSL協定來登入~

go:https://login.yahoo.co.jp/config/login_verify2?.src=ym

 

GetAccount()
IFNo:end
Label:login
go:http://www.yahoo.co.jp/r/l2
go:https://login.yahoo.co.jp/config/login_verify2?.src=ym
FindWebText:SSL(https)
IFNo:login
SetFieldValue:login=***LoginID***
SetFieldValue:passwd=***LoginPW***
PostForm:[0]
Wait:ym/Logout?YY=,5,login
clicklink:受信箱

上面這段是在處理  取帳號、登出、登入、判斷登入是否成功之偵錯、進收信箱  的過程,若你看不懂,請回頭重修~XD

切記一點,要搭配SSL 的方式登入,就得乖乖在登入頁填入帳密後登入!! 若用POSTDATA  的方式拉連結登入,封包裏一樣會有沒加過密的帳密訊息喔!!!

( 成功登入後可切換至【POSTDATA 】標籤,你會發現帳密就列那裏!!  所以此GDL 編碼時要選加強編碼,禁止使用者可切換去取得帳密,以確保分享是安全無虞的!!  )

 

好,那接下來就是要把所有信件裏的附檔連結都取出來,才能開始下載~

不過問題來了,現在信箱動不動就上G,以JP-YM而言,單檔20MB,一個帳號放個20個檔(20封信)也是粉合理的~

也就是說若我們一封一封進去裏面取出其附檔進結,那一個帳號就得進20次才能取完所有的連結 !!

假若你是分享一片4.2G的DVD來算,那光取連結石頭都爛了…


好在信件列表頁面的信件連結通常都會與其內之附檔連結有所關連!! 也就是說我們可以直接在
信件列表頁面就完成取附 檔連結的動作!!

 

   我以標題名為 Vrzfvf_22863_keyout_70.part10.rar   的這封信為例子來說明其間的關連    

mail_link(信件列表頁該信件連結):
http://jp.f28.mail.yahoo.co.jp/ym/ShowLetter?MsgId=3840_51467_oSO-&Idx=0&YY=77108&inc=25&order=down&sort=date&pos=0&view=a&head=b&box=Inbox

file_link(該信件內附檔連結):
http://jp.f28.mail.yahoo.co.jp/ym/ShowLetter?box=Inbox&MsgId=3840_51467_oSO-&bodyPart=2&download=1&YY=77108&order=down&pos=0,70.part10.rar

兩個連結一比對馬上就粉清楚!! 我們只要自 mail_link 中取得 MsgId、YY 的值後,再補上附件的檔案名稱,就可以直接在信件列表頁面 完成 file_link 了!!

所以,本來一個帳號若放40檔(40封信),那最少得抓40次!! 現在只要進2頁(一般一頁可列出25封信),便全搞定囉,爽吧!!!

至於附件名稱是否會列在信件標題裏,就要看你用何種寄信軟體而定了! ! 幸運的是,常用的三個寄信軟體都可以內定或指定達成喔!!


寄信軟體   信件標題
DSL 固定為 filename|大小
SMG 可指定filename、大小、crc 值
GDL 可自訂語法(filename)

好,了解關聯性後,就可以開始來取所有的連結了。這裏非常的容易,利用NT程式裏的進階的取連結指令,只要一行就搞定了…

GetFileLink:附檔名稱開頭共同字串,***HostLink***/ym/ShowLetter?box=Inbox&MsgId=??&bodyPart=2&download=1&YY=??&order=down&pos=0,***TitleName***

以上面的例子來說, 附檔名稱開頭共同字串 就會是  70.part

那這樣只是取信件列表的第一頁,若你寄了粉多檔或是其它因素如廣告信件,就極有可能會有多頁的信件列表存在~! 所以我們得再加上多頁的處理判斷~!

以YM-JP 郵空而言,只要有下一頁的話,就會有個"次"的連結文字出現,所以我們可以利用ClickLink 的第二個參數特性來輕鬆完成判斷多頁的寫法~

Label:mlu-page
//從郵件列表頁中取得符合設定之過濾參數字串之信件連結裏的MsgId、YY 之值,再用其組合成每封信的附件下載連結
GetFileLink:附檔名稱開頭共同字串,***HostLink***/ym/ShowLetter?box=Inbox&MsgId=??&bodyPart=2&download=1&YY=??&order=down&pos=0,***TitleName***
ClickLink:次,mlu-page
Label:begin_download

整理一下到目前為止所寫的 GDL code

GetAccount()
IFNo:end
Label:login
go:http://www.yahoo.co.jp/r/l2
go:https://login.yahoo.co.jp/config/login_verify2?.src=ym
FindWebText:SSL(https)
IFNo:login
SetFieldValue:login=***LoginID***
SetFieldValue:passwd=***LoginPW***
PostForm:[0]
Wait:ym/Logout?YY=,5,login
clicklink:受信箱
Label:mlu-page
//從郵件列表頁中取得符合設定之過濾參數字串之信件連結裏的MsgId、YY 之值,再用其組合成每封信的附件下載連結
GetFileLink:附檔名稱開頭共同字串,***HostLink***/ym/ShowLetter?box=Inbox&MsgId=??&bodyPart=2&download=1&YY=??&order=down&pos=0,***TitleName***
ClickLink:次,mlu-page
Label:begin_download

附檔連結有了後,再來就是要補上下載它們的指令!!

那NT提供了三種下載模式,我們應該要選哪一種呢??

因為我們需在已登入的情況下才能下載信件之附檔,所以只能選擇支持快取運作的模擬IE下載方式才行!! 即是用    StartDownload()

另外,郵空WEB下載會依其限制而有不同的下載總線程數。以YM-JP 為例,同一帳號內最多只同時允許雙線下載~      

所以我們可再加個 SetMaxDownload  指令來控制 StartDownload() 的最大下載線程數~  ( 因為YM-JP 的下載速度粉快,這裏建議調成1就好)

最後再把多帳號的程序補上去,就樣就是一個基本的 YM-JP 下載 GDL 了~

SetMaxDownload:1
Label:Start
GetAccount()
IFNo:end
Label:login
go:http://www.yahoo.co.jp/r/l2
go:https://login.yahoo.co.jp/config/login_verify2?.src=ym
FindWebText:SSL(https)
IFNo:login
SetFieldValue:login=***LoginID***
SetFieldValue:passwd=***LoginPW***
PostForm:[0]
Wait:ym/Logout?YY=,5,login
clicklink:受信箱
Label:mlu-page
//從郵件列表中取得符合設定之過濾參數字串之信件連結裏的MsgId、YY 之值,組合成每封信的附檔連結
GetFileLink:附檔名稱開頭共同字串,:***HostLink***/ym/ShowLetter?box=Inbox&MsgId=??&bodyPart=2&download=1&YY=??&order=down&pos=0,***TitleName***
ClickLink:次,mlu-page
Label:begin_download
StartDownload()
AccountLoop:Start
Label:end
Output:<<所有檔案已下載完成>>
EXIT()

當然這個GDL只是最基本的,若要用來分享的話,還要再加入判斷登入後是否有鎖帳號、登入後是否需再確認密碼等空間認証狀況… 就留給USER 自行完善補足囉~

 

那有了此下載 GDL 後,接著要來看如何用它來作郵空分享!!

因為我們的寫法是即時登入帳號來取得附件連結,再即時下載!! 所以分享時必需要給下載者這些帳、密資訊!!  所以帳密是一定要經過編碼處理的!!

那下載GDL 呢?? 需不需要編碼呢??   因為需用到帳密登入,所以必需要利用強化編碼來鎖定功能頁籤!! 因此下載GDL 是必需要編碼的!!

另外此下載GDL要編碼時也需針中文字的部份作處理(可改用英文或加掛MSG )

比如,我可以改成如下:

 YM-JP_DL.GDL SetMaxDownload:1
GetMsg:1,***Variable5***
GetMsg:2,***Variable12***
GetMsg:3,***Variable62***
Label:Start
GetAccount()
IFNo:end
Label:login
go:http://www.yahoo.co.jp/r/l2
go:https://login.yahoo.co.jp/config/login_verify2?.src=ym
FindWebText:SSL(https)
IFNo:login
SetFieldValue:login=***LoginID***
SetFieldValue:passwd=***LoginPW***
PostForm:[0]
Wait:ym/Logout?YY=,5,login
clicklink:***Variable5***
clicklink:ShowFolder?rb=Inbox
Label:mlu-page
//從郵件列表中取得符合設定之過濾參數字串之信件連結裏的MsgId、YY 之值,組合成每封信的附檔連結
GetFileLink:70.part,:***HostLink***/ym/ShowLetter?box=Inbox&MsgId=??&bodyPart=2&download=1&YY=??&order=down&pos=0,***TitleName***
ClickLink:***Variable12***,mlu-page
Label:begin_download
StartDownload()
AccountLoop:Start
Label:end
output:***Variable62***
EXIT()

 
 YM-JP_DL.MSG 受信箱
次
<<所有檔案已下載完成>>  

接著我就會把YM-JP_DL.GDL 拿去編碼~ (  請參考教學裏程式說明中編碼部份 )  切記,一定要勾選【加強編碼】~

再來就是把你要分享的帳密綁在YM-JP_DL.GDL 上來編碼,最後這些編碼後得到的帳號資料就可以連同YM-JP_DL.GDL 拿去作分享囉~

其實加入編碼的分享處理是一點也不難的!! 只要你觀念清楚就粉容易懂囉!!

 


先來談談郵空轉寄是在作啥的、有何用處!!

郵空分享的最大優勢便在於單封多址(SMG軟體稱為鏡像傳送功能)!! 也就是說只要花一個檔案的上傳時間,就可以同時有多個信件會收到該檔!!

但相對也需要更多的帳號,所以在帳號數有限的情況下一般在寄信時可能會先用雙載點!! 一個用來分享、一個用來補檔備用~

當分享帳號中出現缺檔(人為或空間使然)時,再利用第二個備用載點的帳號來進行郵件轉寄到新的帳號,以此來提供補檔~

因為轉寄的過程是由郵空來傳送,我們只要給定目的信件的地址即可! 也就是說不用再一次浪費寶貴的寬頻來上傳補檔啦~


了解用意後,接著再來看用郵空轉寄時應該注意的事情!!

通常郵空轉寄信件可能會提供兩個選擇,因為每個郵空的定義字眼都不太一樣,所以這裏我用 轉寄型態 來區別~

分別是以   郵件本文(含附檔) 的型態轉寄 或是  單純以附檔型態來轉寄

那這二種模式差在哪裏呢??

不知大家平時在收信時有沒碰過一種需要一直開啟粉多次後才會看到原始內容的轉寄信件呢??   ( 小美每次都寄這種的給我   )

比如下圖,我收到富小美寄給我的一封 "強顏歡笑的最高境界",裏面有一個影片檔~

但當我開啟信件想打開附加檔案來看時,卻發現這個附件仍是另一封信,而不是我想要的影片檔!!  


於是我只好再繼續開啟這封信…

 

如下圖所示,後來開啟的這封信件裏的附加檔案就可以讓我直接打開或儲存了!!!

    

 

為何會有如此的情況呢??  原因就是我們在轉寄信件時選擇了 以郵件本文(含附檔) 的型態轉寄 !!

所以在新的信件裏(指我收到的"強顏歡笑的最高境界"這封信),它的附檔就會是原轉寄信件的【郵件本文加上附檔】,也就是我們看到的另一個EML檔 !!

在這種情況下,我們若用POP的方式下載,則會下載到EML 檔(裏面會有本文+附檔) !!  而非是我們想要的 強顏歡笑的最高境界.WMV !

若我們改採用WEB的方式來下載的話,那附件連結中會有一個判斷郵件本文的變數可供調整,所以可直接下載  強顏歡笑的最高境界.WMV !

以YM-JP來說就是參數bodyPart ,其值可能為2.X 、2.1.x、2.x.x (視轉寄次數而定)

以XUITE-MAIL來說就是參數number,其值可能為6、8、…  (視轉寄次數而定)

所以結論就是:

若你是用DSL 或SMG 分享的人,那轉寄郵件時務必要採用【以純附件型態】來轉寄!不然下回來是EML檔,就只能一個一個慢慢打開後再另存附件了!

 

好,事前準備功夫作足後,接著便可以開始來寫轉寄的GDL了~

這裏我一樣以YM-JP 為例~ ( 用它我可以抄下載GDL的內容   )

一樣先把GDL 列到進行到信件列表頁面~

GetAccount()
IFNo:end
Label:login
go:http://www.yahoo.co.jp/r/l2
go:https://login.yahoo.co.jp/config/login_verify2?.src=ym
FindWebText:SSL(https)
IFNo:login
SetFieldValue:login=***LoginID***
SetFieldValue:passwd=***LoginPW***
PostForm:[0]
Wait:ym/Logout?YY=,5,login
clicklink:受信箱

再來,我們有兩種選擇,一種是先進信件頁後再來按轉寄至轉寄頁面、另一種則是直接試著用連結的方式進去轉寄頁面~

當然照往例,挑軟的下手…  不過這次我還真分不出來哪個比較難耶,都粉軟啦… 

其實寫到實戰教學最後一篇了,該有的基本功我都交給你了,剩下的只是在引導你如何去利用它而已~

好,那就先一步一步來吧!!  順便也可以說明一下轉寄的類型~

那我們就先把信件列表頁面中,有我們要的附件之信件連結給取出來放到【備註清單】中~

//從郵件列表中取得所有符合設定之過濾參數字串之信件連結並存於【備註清單】中
GetFileLink:附檔名稱開頭共同字串,***LinkHref*** ->3

再來就是利用備註清單來弄個小迴圈,當備註清單內已無資料時,就表示此帳號內的所有的信件都已轉寄完成了!!

Label:Get_mail_link
GetNote()
Label:in_Forward
go:***Note***
…
處理轉寄的程序
…
NoteLoop:Get_mail_link

 

好! 那接著就來看看 JP-YM 的轉寄細部流程要如何處理!!

首先我們先了解一下轉寄時的兩個選項~!

如上圖,進到信件頁面後,按下轉寄鈕就會有兩個選項可以讓你選~

上面那個黃標的就是 以郵件本文(含附檔) 的型態轉寄

下面那個粉紅標的才是  單純以附檔型態來轉寄

你可以兩種都按看看,再來區分兩種模式下的轉寄頁面會有何種差異~!

這裏我們先看結果,等一下再說指令要如何下!!

以郵件本文(含附檔) 的型態轉寄    的話,轉寄頁面會是如下!!


若以  單純以附檔型態來轉寄  的話,轉寄頁面會是如下!!

這樣子應該比較的出來吧!! 以後寫別的郵空時就要特別注意何種型態才是單以附件型態轉寄的喔!!

 

好! 那我們就回頭來看要如何按下轉寄時的第二個選項!!

當然已學到現在的你看這種這麼花俏的按鈕一定心裏有底了!  哈~ 這個用一般指令是按不下去的啦…

之前我都會跟你說就寫一段RunScript 來處理就好…  但今天換個方式,教你利用辛苦學到的基礎功來解決它!!

就是藉由分析自網頁端傳回到【PostData】 清單中的訊息,再來判斷它是經由何種過程進入轉寄頁面的!!


為了方便看,我們可以先切到 【 PostData 】標籤,用右鍵清空一下清單中的資料~

再來就手動去按下轉寄的第二個選項,再切到 【 PostData 】標籤裏去看結果~

我們會獲得如下列的回傳訊息~

Post URL: http://jp.f28.mail.yahoo.co.jp/ym/Compose?box=Inbox&Mid=3840_51467_oSO-&inc=&Search=&YY=57516&order=down&sort=date&pos=0&view=a&head=b
Content-Type: application/x-www-form-urlencoded

Post Data Start (連續) -------------------------------
REP=&REPA=&FWD=1&fwopt=quoted&Idx=2&PhotoIcon=
Post Data (分隔) ----------------------------------
REP=
REPA=
FWD=1
fwopt=quoted
Idx=2
PhotoIcon=
Post Data End -------------------------------------

上面這些代表的意思會看吧!!(不會的回基礎必修2去重讀吧…)

所以說,從信件頁到轉寄頁面,是經由一個表單傳送的過程!! 而其表單中的欄位值正是左右著最後結果的關鍵!!

你可以比較一下在信件頁面時,上面那幾個欄位的值為何??

這樣就粉清楚了吧!!  FWD、fwopt 、Idx  這三個欄位的值正是控制 信件頁到轉寄頁面 會是如何的關鍵!!

FWD 給1表啟動轉寄選項 (內定為空值)

fwopt 給 attach 表以本文含附件型態轉寄、給quoted 則表以附件型態轉寄 (內定為 attach)

Idx 表此封信是在信件列表中的第i封信(i 從0 開始算起),其值內定會列出

好,了解欄位應該如何給定後,接著再來看送出表單的方式~

第一種就是把那三個欄位填入值後,直接用PostForm 指令來傳送出去~

第二種就是把那幾個欄位用&串加起來後,再用模擬表單送出的指令 PostData  來送出~

首先看第一種:

SetFieldValue:FWD=1
SetFieldValue:fwopt=quoted
PostForm:compose

簡直是容易到一個不行… (為何要用 compose 這個表單呢?? 因為那幾個欄位是在這個表單內嘛,你不用它難道要用移動信件的表單呀 )


再來看第二種:

這個也是粉給它容易~ 就取出會變動的參數值後,組合一下就是了~

先來處理 Post_Action  的部份~

熊熊給它發現一件事, 參數 Mid 的值跟本信件連結裏的MsgId值 根本就是一樣嘛!!! 

嘿嘿嘿… 奸笑三聲後,有了新的想法…

那我就直接在信件列表頁裏用 GetFileLink 指令來組合模擬表單送出的指令(PostData) 所需要的參數內容不就得了!!     

如此一來,還可省下進入信件頁面的步驟!! 1封信省一個步驟,若有40封信,那省下的時間就粉可觀了!! 

 

   我一樣以標題名為 Vrzfvf_22863_keyout_70.part10.rar   的這封信為例子來說明其間的關連    

mail_link(信件列表頁該信件連結):
http://jp.f28.mail.yahoo.co.jp/ym/ShowLetter?MsgId=3840_51467_oSO-&Idx=0&YY=77108&inc=25&order=down&sort=date&pos=0&view=a&head=b&box=Inbox

Post_Action ? 欄位串  ( 該信件內轉寄時,模擬表單送出指令(PostData) 所需要的參數內容 ):
http://jp.f28.mail.yahoo.co.jp/ym/Compose?box=Inbox&Mid=3840_51467_oSO-  ?   FWD=1&fwopt=quoted


這裏我把原本 Post_Action 的某些參數略掉,因為重點只在 Mid 這個參數上!! 它代表的是此信件是該帳號中的哪封信,其值俱唯一性!! 有它就夠了!! 其它丟掉就好… XD

至於Idx 這個欄位省略的原因也一樣!!  因為它與Mid 這個參數代表的都是該信件是此帳號中的哪封信,所以既然已指定 Mid 這個參數值了,後面的就可以略掉了!!!

 

所以我們前面設計的部份要修改一下~

//--從郵件列表中取得所有符合設定之過濾參數字串之信件連結並存於【備註清單】中
GetFileLink:附檔名稱開頭共同字串,***HostLink***/ym/Compose?box=Inbox&MsgId=???FWD=1&fwopt=quoted->3
Label:Get_mail_link
GetNote()
ReplaceVariable:***Note***,MsgId,Mid,***Variable17***
Label:in_Forward
PostData:***Variable17***
FindWebText:From
IFNo:in_Forward
…
處理轉寄的程序
…
NoteLoop:Get_mail_link

 

進入轉寄頁面後,只剩收信地址這格要我們填 !!  這裏就是填入我們要用來補檔的郵件地址!! 

接著再按送出鈕就行囉~  ( 郵件標題那裏多了一個 "Fwd:  " 的字串也蠻礙眼的,就順便處理一下好了 )

//--從郵件列表中取得所有符合設定之過濾參數字串之信件連結並存於【備註清單】中
GetFileLink:附檔名稱開頭共同字串,***HostLink***/ym/Compose?box=Inbox&MsgId=???FWD=1&fwopt=quoted->3
Label:Get_mail_link
GetNote()
ReplaceVariable:***Note***,MsgId,Mid,***Variable17***
Label:in_Forward
PostData:***Variable17***
FindWebText:From
IFNo:in_Forward
SetFieldValue:To=用來補檔的信箱地址
ItemToVariable:Subj,***Variable34***
ReplaceVariable:***Variable34***,Fwd: ,,***Variable34***
SetFieldValue:Subj=***Variable34***
ClickButton:sendbottom
//RunScript:Send_Click()
NoteLoop:Get_mail_link

那成功轉寄後,會有如下的畫面!! 我們可以儘量挑非日文字的部份來作為偵錯的關鍵字!!

比如這裏我挑"送信先" 這個字串作為轉寄成功的字眼~

 

偵錯加上後,最後就變成這樣子囉~

//-- 請於【帳號清單】內放入備用載點的 ID:PW
//-- 請自行於GDL中加入用來補檔的信箱地址,格式以 ID@MAIL_URL 來表示。
//-- 若要多址則以符號","作區隔。例如 ID1@MAIL_URL,ID2@MAIL_URL,ID3@MAIL_URL 這樣就是單封三址(三載點的意思)



ClearNote:
ClearOut:
Prompt:請填入你分享時的檔案名稱開頭共同字串。<Crlf>例如 OP194.rXX 。<Crlf>那就是打上 "OP194" 就行囉!!
GetAccount()
IFNo:end
Label:login
go:http://www.yahoo.co.jp/r/l2
go:https://login.yahoo.co.jp/config/login_verify2?.src=ym
FindWebText:SSL(https)
IFNo:login
SetFieldValue:login=***LoginID***
SetFieldValue:passwd=***LoginPW***
PostForm:[0]
Wait:ym/Logout?YY=,5,login
clicklink:受信箱
//--從郵件列表中取得所有符合設定之過濾參數字串之信件連結並存於【備註清單】中
GetFileLink:***PromptData***,***HostLink***/ym/Compose?box=Inbox&MsgId=???FWD=1&fwopt=quoted->3
Label:Get_mail_link
GetNote()
ReplaceVariable:***Note***,MsgId,Mid,***Variable17***
Label:in_Forward
PostData:***Variable17***
FindWebText:From
IFNo:in_Forward
SetFieldValue:To=用來補檔的信箱地址
ItemToVariable:Subj,***Variable34***
ReplaceVariable:***Variable34***,Fwd: ,,***Variable34***
SetFieldValue:Subj=***Variable34***
ClickButton:sendbottom
//-- 若轉寄失敗,則再重新轉寄一次
FindWebText:送信先
IFNo:in_Forward
NoteLoop:Get_mail_link
Label:end
EXIT()

以上的設計是針對補檔而言!! 若你粉雖小被砍了一堆帳號的話,那 用來補檔的信箱地址 可能就要再加入自【郵件清單】中取多帳號的設計了~

你可參考一下前一篇126郵空的寫法,這部份就留給USER自行努力囉~

Free Web Hosting