如何使用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就不能实现,因为如果轻易可以伪造,那安全性就很低了。