用python调用outlook发送邮件的问题
现在看来,com搞错了。我还没有调整观点。但我觉得应该能行。因为COM接口上的文档很少。
你可以先从VBA文档中学习这个接口。找一些C++调用outlook的例子。
以下是我在网上找到的一个例子。仅供参考
#!/usr/bin/env?大蟒
"""
答?简单?地址?书?浏览器。?下降?变成?那个?深度?关于
你的?交换?服务器?穿过?展望?然后呢。发现?那个?联系人
列表。?然后呢?摘录?那些?联系人!
注意:?生成?那个?类型?图书馆?为了什么?微软?展望?首先。
邮件?信息
-
在?MSDN?那个?界面?是吗?记录在案?在下面?“消息传递?和
协作“,?”协作?数据?对象“,?”CDO?为
Windows?2000",?"CDO?为了什么?Windows?2000",?"消息传递”,
“概念”,?“CDO?消息传递?COM?接口“,?“那个?IMessage
COM?接口“,?”IMessage?属性”。
可惜,?不是吗?全部?属性?是吗?总是吗?可用。
确实?那个?gen_py '?目录?里面?站点包?梅?是
答?更多?准确吗?总结?的?属性?然后呢。接口。
得救了?项目
-
typedef?enum?{
olTXT?=?0,
olRTF?=?1,
olTemplate?=?2,
olMSG?=?3,
奥尔多克?=?4,
olHTML?=?5,
奥夫卡?=?6,
奥尔夫卡尔?=?七
}?OlSaveAsType
约会?物品?是吗?得救了?作为?vCal?被谁?默认。
联系?物品?是吗?得救了?作为?vCard?被谁?默认。
邮件?物品?是吗?得救了?作为?文字?被谁?默认。
全部?其他?物品?是吗?得救了?作为?文字?被谁?默认。
"""
进口?win32com.client
进口?sys,?操作系统(Operating System)
#?这个?是吗?需要?之前?我们?可以吗?甚至?说话?关于什么?不一样?enum?价值观。
展望?=?win32 com . client . dispatch(" Outlook。应用”)
班级?查看:
“一个?观点?上?命名空间。
def?__init__(self,编码):
“初始化?那个?观点?用什么?答?性格?正在编码。
自我编码?=?编码
班级?控制台视图(视图):
“一个?控制台风格的?查看。”
显示名称空间属性映射?=?{
win32 com . client . constants . ol folder?:
("+",?“姓名”),
win32 com . client . constants . ol contact?:
(" >,?"电子邮件1地址"),
win32 com . client . constants . olmail?:
(" >,?“主题”),
没有吗?:
("?",?“姓名”)
}
def?__init__(self,编码,?page_width=80,?page_limit=20):
"""
初始化?那个?观点?用什么?答?性格?编码?然后呢。那个?可选择的
'页面宽度'?然后呢。'页面_限制'。
"""
查看。__init__(self,编码)
self.page_width?=?页面宽度
self.page_limit?=?页数限制
def?update_status(自我,计数器,?max_value):
“更新?答?地位?指标?用什么?那个?鉴于?柜台?价值?然后呢。最大值。
last_counter?=?max(计数器?-?1,?0)
最后_宽度?=?int((last_counter?*?self.page_width)?/?最大值)
宽度?=?int((计数器?*?self.page_width)?/?最大值)
sys.stdout.write(" . "?*?(宽度?-?最后_宽度))
如果?柜台?==?最大值:
sys.stdout.write("\n ")
def?错误(自身):
sys.stdout.write("!")
def?show_namespace(自身,项目):
“表演?那个?命名空间,?鉴于?答?列表?的?项目',"
如果?len(物品)?& gt?self.page_limit:
打印?"!",?“展示?那个?第一个“,?self.page_limit,?“物品?只有。”
为了什么?价值?在?items[:self.page_limit]:
尝试:
装修,?财产?=?self . show _ namespace _ property _ mapping[value。类别]
除了?关键错误:
装修,?财产?=?self . show _ namespace _ property _ mapping[无]
打印?装修,?self.get_property(值,?属性)。编码(自编码)
def?get_property(self,?对象,?财产,?默认值= " ":
尝试:
#?注意:?黑!
如果?财产?==?“森顿”:
回归?getattr(object,属性)。格式()
回归?getattr(object,属性)
除了?属性错误:
回归?系统默认值
班级?提取器:
“一个?班级?二手?为了什么?那个?提取?的?物品/物件?从哪里?文件夹。
提取_类型_映射?=?{
win32 com . client . constants . ol appointment?:
(win32 com . client . constants . olvcal,?“风投”),
win32 com . client . constants . ol contact?:
(win32 com . client . constants . olv card,?“vcf”),
win32 com . client . constants . olmail?:
(win32 com . client . constants . ol txt,?“txt”),
没有吗?:
(win32 com . client . constants . ol txt,?" txt ")
}
def?__init__(self,视图=无):
“初始化?那个?提取器?用什么?那个?可选?查看“.”
self.view?=?视角
def?提取(自我,?物品,?文件名):
“摘录?那个?鉴于?项目?去哪?答?文件?用什么?那个?鉴于?文件名“.”
合计_数量?=?len(项目)
为了什么?我?在?范围(0,?总数):
价值?=?项目[i]
尝试:
另存为类型,?后缀?=?self . extract _ type _ mapping[value。类别]
除了?关键错误:
另存为类型,?后缀?=?self . extract _ type _ mapping[无]
尝试:
价值。SaveAs(os.path.join(文件名,str(i)?+?"."?+?后缀),
另存为类型)
除了?属性错误:
如果?自我观点:
self.view.error()
除了?win32 com . client . pywintypes . com _ error:
如果?自我观点:
self.view.error()
如果?自我观点:
self.view.update_status(i?+?1,?总数)
班级?资源管理器:
“一个?班级?维护?那个?状态?的?探索。”
def?__init__(self,视图=无):
全球?观点
自我电流?=?self.ns?=?展望。GetNamespace("MAPI ")
self.view?=?视角
自我。_get_namespace()
def?向上(自己):
“提升?变成?那个?父母?文件夹?回归?是否?它?曾经是。有可能。”
如果?自我电流?!=?自我ns:
自我电流?=?自我.当前.父母
自我。_get_namespace()
回归?1
回归?0
def?下来(自我,姓名):
"""
下降?变成?那个?文件夹?用什么?那个?鉴于?名字?回归?是否?它
可以吗?是吗?完成了。
"""
如果?self.choices.has_key(name):
自我电流?=?self.choices[name]
自我。_get_namespace()
回归?1
回归?0
def?get_items(self):
“回报?答?列表?的?物品?在?那个?当前?文件夹。
回归?自我项目
def?获取选择(自我):
“回报?答?字典?映射?名字?去哪?对象。”
回归?自我选择
def?_get_namespace(self):
"""
安?内部?方法?哪个?刷新?那个?当前?命名空间。
"""
自我选择?自我物品?=?get_namespace(self.current,?自我观点)
def?get_namespace(名称空间,视图=无):
"""
得到?那个?内容?的?那个?鉴于?命名空间',?回归?答?字典?关于
选择?(合适吗?为了什么?文件夹)?然后呢。答?列表?的?物品?(合适吗?为
消息)。
"""
d?=?{}
l?=?[]
#?首先?试试?找?为了什么?文件夹。?然后呢?看?为了什么?项目。?然后呢。那又怎样?开着。
为了什么?属性?在?((“文件夹”,?“姓名”),?(“物品”,?无)):
#?看?为了什么?对象?的?那个?当前?类型:?文件夹,?物品,?等等。
object_name?=?属性[0]
尝试:
子对象?=?getattr(名称空间,对象名称)
除了?属性错误:
#?忽略?那个?休息?的?那个?循环?身体?然后呢。开始
#?那个?下一个?迭代。
继续
#?指数?那个?找回来了?物品?被谁?储存?他们?被谁?名字?在?答?字典。
#?不能?切片?物品,?然后呢。他们?总是吗?似乎?去哪?开始?在哪里?指数?1.
合计_数量?=?镜头(子对象)
为了什么?我?在?范围(1,?合计_数量?+?1):
尝试:
field_name?=?属性[1]
#?商店?在?那个?字典?使用?那个?指定的?财产,?如果
#?指定。
l.append(子对象[i])
如果?field_name?是吗?不是吗?无:
d[getattr(子对象[i],?field_name)]?=?子对象[i]
除了?属性错误:
及格
#?粗制滥造?地位?指示器。
如果?查看:
view.update_status(我,?总数)
回归?d,?l
def?main():
#?得到?那个?编码?如果?指定。
如果?len(sys.argv)?& gt?2:
编码?=?sys.argv[2]
否则:
编码?=?“UTF八号”
观点?=?控制台视图(编码)
探索者?=?浏览器(视图)
什么时候?1:
#?提示?那个?用户。
打印?"-"?*?60
view . show _ namespace(explorer . get _ items())
打印?"-"?*?60
打印?“〖美〗p?拥有?[E]xtract?[Q]uit?[H]elp?然后呢?& ltReturn & gt!"
打印?"-"?*?60
s?=?原始输入()。剥离()。upper()[0]
#?发现?那个?对吗?行动。
如果?s?==?“U”:
#?起来。
explorer.up()
埃利夫?s?==?“D”:
#?提示?为了什么?那个?文件夹?去哪?进入。
打印?“下来了?变成:“
名字?=?原始输入()
如果?不是吗?explorer.down(名称):
打印?“没有吗?这样的?对象。”
埃利夫?s?==?“E”:
#?提示?为了什么?那个?文件?去哪?摘录?敬。
打印?“摘录?收件人:"
文件名?=?原始输入()
打印?"正在提取..."
提取器?=?提取器(视图)
extractor . extract(explorer . get _ items(),?文件名)
埃利夫?s?==?“问”:
打印?"正在退出..."
养?系统退出
埃利夫?s?==?“H”:
打印?“类型?那个?d?钥匙?然后呢?& ltReturn & gt?去哪?进入?答?文件夹。
打印?“给?那个?确切?文件夹?名字?什么时候?提示?然后呢。新闻?& ltReturn & gt."
打印?“类型?那个?u?钥匙?然后呢?& ltReturn & gt?去哪?搬家?向上?一个?水平。”
打印?“类型?那个?q?钥匙?然后呢?& ltReturn & gt?去哪?不干了。”
打印?“类型?那个?h?钥匙?然后呢?& ltReturn & gt?去哪?读书?这个?又来了。”
打印?“类型?那个?e?钥匙?然后呢?& ltReturn & gt?去哪?摘录?项。”
打印?“给?答?文件名?什么时候?提示?然后呢。新闻?& ltReturn & gt."
打印
打印?“好吗?运气!”
否则:
打印?“没有吗?这样的?命令。”
如果?__name__?==?" __main__ "
主()
#?vim:?tabstop=4?expandtab?shiftwidth=4