如何使用python發送IBM Notes郵件?如果這樣搜索,很容易可以搜索一大堆關於使用win32抄來抄去的代碼和文章,當然,也能用。我想實現一種接口方式的代碼,管理員可以發送任何ID(發件人)的郵件。
結論:在Windows客戶端上可以實現單用戶發送郵件,但未能實現任意用戶發送郵件
一開始我設計的程序是將郵件相關內容發送到數據庫,定時程序自動在數據庫中獲取要發送的郵件,制作成接口的形式,支持任意用戶發送郵件。
但很快發現問題,我們在網上搜索得到的win32的python代碼,並不能支持更換用戶ID。
在IBM的官網上,沒找到查到相關接口文檔,但在HCL software官網上有Lotus script 語言的相關接口文檔。(雖然我不知道這個網站是用來做什么的)
(鏈接:https://help.hcltechsw.com/dom_designer/10.0.1/basic/H_NOTESSESSION_CLASS.html)
我們可以看到,NotesSession對象有一個CreateRegistration函數,可以創建NotesRegistration對象,而
NotesRegistration對象有一個函數,名為SwitchToID,一開始看到這里,我以為有希望了,但是,經過嘗試之后,發現會報錯,創建不了
NotesRegistration對象。
或許在Lotus Script中的函數名和使用pywin32的不一樣?為了驗證這個想法,就需要搞懂win32的原理,我記得這個是可以在網上找到相關文檔的,英文的,我也看的一知半解。
但只要在代碼中加多一句
from win32com client import makepy makepy.GenerateFromTypeLibSpec("Lotus Domino Objects")
就可以利用makepy看到相關接口文件
當我們創建session的時候,session = DispatchEx("Notes.NotesSession"),實際上是在讀取注冊表的
Notes.NotesSession,打開注冊表編輯器,計算機--HKEY_CLASSES_ROOT,往下找找,就能找到關於
Notes.NotesSession的值,添加上面makepy之后,就可以在C盤自己用戶名下文件夾AppData/Local/Temp里面找到gen_py的文件夾,里面有跟
Notes.NotesSession值一樣命名的py文件,我們就可以看到相關
Notes.NotesSession對象或者其他Notes對象
的接口函數了。
可以看到
NotesSession對象的確有一個CreateRegistration函數,可以創建NotesRegistration對象。
但是!還是不成功,會報錯說
NotesSession沒有相關屬性。其實也能理解,畢竟我只是安裝了一個Notes客戶端,接口能支持到什么程度也只有官方能解釋。我猜想,如果能在Notes管理服務器上創建接口,說不定就可以任意發送了,但我不是管理員,也就只能這樣了。
就像想要隱藏發件人或者偽造發件人,用win32就不能實現,因為如果輕易可以偽造,那安全性就很低了。