用python调用outlook发送邮件的问题

我会把你的错误信息打印出来。“xd2 \ xd 1 \ xd6 \ xd5 \ xd6 \ xb9 \ xb2 \ xd9 \ xd7 \ xf7”表示“操作终止”

现在看来,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