上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
SUNUSER86
註冊時間: 2007-02-03 文章: 14
第 1 樓
|
發表於: 星期四 十月 26, 2017 5:48 pm 文章主題: 用JMail接收帶附件的郵件,如何得知附件檔名 |
|
|
原本使用木瓜的myfll.fll收發郵件
但客戶反映,有時候會有部分郵件收不到,但開啟OUTLOOK就可以收到這被遺落的部分郵件,追蹤了一段時間,毫無頭緒。
藉此機會改用JMAIL收發,但接收郵件獲取附件的檔案名稱,就出現問題,程式碼如下
oPop3=CREATEOBJECT("jmail.pop3")
oPop3.connect("username","password","pop3server")
oCount=oPop3.Count &&獲取郵箱裡的郵件總數
FOR nCount1=1 TO oCount
oMsg=oPop3.Messages.Item(nCount1) &&建立按序號提取郵件信息的對象
* ? oMsg.fromname && 發件人
* ? oMsg.subject &&主題
* ? oMsg.body &&正文
Atts=oMsg.Attachments
nAttCount=Atts.count()
FOR nCount2 = 1 TO nAttCount
oAtts=Atts.Item(nCount2)
attname=oAtts.name
attdata=oAtts.data
ENDFOR
* oPop3.DeleteSingleMessage(nCount1) &&刪除該郵件
ENDFOR
oPop3.Disconnect()
return
每當程式執行到 attname=oAtts.name 就跳開,出現OATTS is not an object.,請教各位先知,哪裡出了問題。 |
|
回頂端 |
|
|
garfield Site Admin
註冊時間: 2003-01-30 文章: 2158
第 2 樓
|
|
回頂端 |
|
|
SUNUSER86
註冊時間: 2007-02-03 文章: 14
第 3 樓
|
發表於: 星期五 十月 27, 2017 7:50 pm 文章主題: |
|
|
garfield大大,執行結果,情況一模一樣 |
|
回頂端 |
|
|
garfield Site Admin
註冊時間: 2003-01-30 文章: 2158
第 4 樓
|
|
回頂端 |
|
|
SUNUSER86
註冊時間: 2007-02-03 文章: 14
第 5 樓
|
發表於: 星期五 十月 27, 2017 9:51 pm 文章主題: |
|
|
我也曾懷疑過功能限制,原先使用Free版本,執行第一行oPop3=CREATEOBJECT("jmail.pop3"),就發生Error,後來更換為Profersional,轉為出現上述問題。
目前正在MAPI或Winsock做選擇,但接收郵件的範例實在太少了,尤其牽扯上附件,案例更少,MAPI有找到一些線索,Winsock還沒頭緒,先嘗試一下MAPI,如各位先進有經驗,請提供指引。 |
|
回頂端 |
|
|
garfield Site Admin
註冊時間: 2003-01-30 文章: 2158
第 6 樓
|
|
回頂端 |
|
|
SUNUSER86
註冊時間: 2007-02-03 文章: 14
第 7 樓
|
發表於: 星期五 十月 27, 2017 10:39 pm 文章主題: |
|
|
可惜沒有( FUNCTION RetrPop3Email ) . |
|
回頂端 |
|
|
garfield Site Admin
註冊時間: 2003-01-30 文章: 2158
第 8 樓
|
|
回頂端 |
|
|
SUNUSER86
註冊時間: 2007-02-03 文章: 14
第 9 樓
|
發表於: 星期一 十月 30, 2017 6:50 pm 文章主題: |
|
|
經過幾天的探討研究,終於大略完成使用MAPI來接收MS Outlook的郵件資料,
由於接收郵件的範例不多,帶附件的更少,今將程式碼公布如下
* xSes.Downloadmail=.T. &&下載新的郵件
xSes.Signon && xses及xmsg 為表單上的 MAPISession 及 MAPIMessages 物件
xMsg.Sessionid=xSes.Sessionid
* xMsg.FetchSorted = .T.
xMsg.FetchUnreadOnly = .T. &&只取未讀過的郵件
xMsg.Action = 1 &&切換到讀緩衝區
* 開始讀取出信件
xMsg.Fetch
FOR xi=0 TO (xMsg.MsgCount-1) && 讀取每一封信
xMsg.MsgIndex=xi && 指定第幾封信
* ? xMsg.MsgSubject
* ? xMsg.MsgOrigDisplayName
* ? xMsg.MsgOrigAddress
* ? xMsg.MsgDateReceived
* ? xMsg.MsgNoteText
* ? xMsg.MsgRead
* xMsg.Copy
IF xMsg.AttachmentCount=0 && 無附件檔案時
* xMsg.Delete &&刪除該郵件
loop && 讀下一封信
ENDIF
*讀取出所有附件檔案
FOR xj=0 TO (xMsg.AttachmentCount-1)
xMsg.AttachmentIndex=xj &&指定第xj個附件
* ? xMsg.PidTagAttachLongFilename && 顯示長檔名
* ? xMsg.AttachmentName && 顯示檔名
* ? xMsg.AttachmentPathName && 顯示路徑+檔名
* ? xMsg.AttachmentPosition
* ? xMsg.AttachmentType
Copy File (xMsg.AttachmentPathName) To "D:\"+(xMsg.AttachmentName)
next
* xMsg.Delete &&刪除該郵件
NEXT && 處理下一封信件
* xses.downloadmail=.F. &&停止下載新的郵件
xses.signoff
* set default to c:\test
* MESSAGEBOX("完成")
問題一:使用outlook2007,有安全性對話框困擾的解決方式,可以參照
https://support.hpe.com/hpsc/doc/public/display?docId=c02967866&lang=en-us&cc=us
上述網站登錄項目
HKEY_CURRENT_USER\Software\Policies\Microsoft\.......如不存在可改為
HKEY_CURRENT_USER\Software\Microsoft\..............
此方法可完美解決安全性對話框問題
問題二:附件的檔案名稱不支援長檔名,無語問蒼天,搞到最後竟然......期待解答
結論是,接收帶附件的郵件,如果有其他方式,我第一個捨去的一定是MAPI,註冊、安全性對話框、長檔名、原先執行路徑被強佔,問題一個接一個。
尤其是當取得郵件資料,回到資料庫做後續處理,才發覺所有路徑被被強制變更,很不友善的元件。 |
|
回頂端 |
|
|
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 10 樓
|
發表於: 星期三 十一月 01, 2017 2:31 pm 文章主題: |
|
|
好奇請教一下,
您是那一類的需求,
需要自己用VFP去讀取信件? |
|
回頂端 |
|
|
SUNUSER86
註冊時間: 2007-02-03 文章: 14
第 11 樓
|
發表於: 星期四 十一月 02, 2017 9:20 pm 文章主題: |
|
|
上游公司新增訂單或變更訂單內容,都是使用E-Mail,附件內容有一定格式,將該附件解譯後,更新資料庫內容,並回傳郵件告知收悉。 |
|
回頂端 |
|
|
|