Python 调用 Outlook 发送邮件

微软 Office 提供基于 COM 接口的编程。Python 通过 pywin32 可以方便地调用各组件。如果下载和安装 pywin32 有困难,可以到 Sourceforge 的镜像网摘查找合适的版本。

单一账号

import win32com.client as win32def send_mail():outlook = win32.Dispatch('Outlook.Application')mail_item = outlook.CreateItem(0) # 0: olMailItemmail_item.Recipients.Add('someone@qq.com')mail_item.Subject = 'Mail Test'mail_item.BodyFormat = 2          # 2: Html formatmail_item.HTMLBody  = '''<H2>Hello, This is a test mail.</H2>Hello Guys. '''mail_item.Send()if __name__ == '__main__':send_mail()

多账号发送邮件

如果 Outlook 有多个账号,需要选择账号发送邮件,需要在代码中对账号进行判断,代码如下:

def send_mail():outlook_app = win32.Dispatch('Outlook.Application')# choose sender accountsend_account = Nonefor account in outlook_app.Session.Accounts:if account.DisplayName == 'sender@hotmail.com':send_account = accountbreakmail_item = outlook_app.CreateItem(0)   # 0: olMailItem# mail_item.SendUsingAccount = send_account not working# the following statement performs the function insteadmail_item._oleobj_.Invoke(*(64209, 0, 8, 0, send_account))mail_item.Recipients.Add('receipient@qq.com')mail_item.Subject = 'Test sending using particular account'mail_item.BodyFormat = 2   # 2: Html formatmail_item.HTMLBody = '''<H2>Hello, This is a test mail.</H2>Hello Guys. '''mail_item.Send()if __name__ == '__main__':send_mail()

这里有点黑魔法,直接设置 mail_item.SendUsingAccount 不会起作用,返回值是 None, 永远从第一个邮箱账号发送邮件,我使用的是 Office 365 版。需要调用 _oleobj_.Invoke() 方法。后面列出了参考链接。

本质上,这种方法是调用 COM 组件,可以查询微软的开发帮助了解相关对象的属性和方法,比如我想知道 Account 的细节,就特意参考了下面这篇帮助:https://docs.microsoft.com/zh-cn/office/vba/api/outlook.account 。COM 编程与语言无关。另外可以在 Outlook 中 ALT + F11,进入 VBE 环境,然后 F2 进入对象浏览器界面查看比如下面的界面显示了 Account 的属性和方法:

关于调试

python 作为动态语言,通过 Debug 获取 COM 对象信息并不是很方便,比如下面代码:

import win32com.client as win32def print_outlook_accounts():outlook_app = win32.Dispatch('Outlook.Application')for account in outlook_app.Session.Accounts:print (account.DeliveryStore.DisplayName)if __name__ == '__main__':send_mail()

设置断点的调试界面:

我们只知道 account 是一个 COM Object,account 包含的信息很多都是 unknown 的。碰到这种情况,我一般用 C# 或者 VBA 编写代码进行调试。如果我需要详细了解 account 的属性和方法,在 Office 的任何组件中,比如 Excel,写一段下面的代码:

Public Sub Print_Outlook_Accounts()' 工具 -> 引用:添加 Microsoft Outook Object Library 引用Dim outlookApp As New Outlook.ApplicationDim accounts As Outlook.accountsSet accounts = outlookApp.Session.accountsDim account As Outlook.accountFor Each account In accountsDebug.Print account.DisplayNameNext
End Sub

显示出监视窗口,设置断点,获取 accounts 信息:

在监视窗口添加变量 accounts:

展开:


Item 1 和 Item 2 表示有两个账号,现在我们想看到 Item 2 的账号信息,将 Item 2 展开:


DeliveryStore 属性也包含 account 的信息,可以展开查看。

参考

  • SendUsingAccount Does Not Work in Outlook 2010, possible bug?
  • python win32com outlook 2013 SendUsingAccount return exception

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34640.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI GPT-4 将于下周发布,微软德国CTO:将提供完全不同的可能性

公众号关注 「奇妙的 Linux 世界」 设为「星标」&#xff0c;每天带你玩转 Linux &#xff01; ​ GPT-4&#xff0c;下周就要来了。 3 月 9 日&#xff0c;微软德国 CTO Andreas Braun 在一场名为 “AI in Focus - Digital Kickoff” 的活动中表示&#xff0c;GPT-4 将在下周发…

GPT-4将于下周发布,微软德国CTO:将提供完全不同的可能性

来源&#xff1a;学术头条 GPT-4&#xff0c;下周就要来了。 3 月 9 日&#xff0c;微软德国 CTO Andreas Braun 在一场名为 “AI in Focus - Digital Kickoff” 的活动中表示&#xff0c;GPT-4 将在下周发布&#xff0c;将提供多模态模型。自 3 月初发布 Kosmos-1 以来&#x…

Java 正式发布 | 历史上的今天

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 5 月 23 日&#xff0c;在 2007 年的今天&#xff0c;盛大宣布出售所持有新浪公司股票&#xff0c;累计获利 7650 万美元。盛大曾于 2005 年 2 月通过公开市场收…

东南亚跨境一件代发好用的Shopee货代系统—星卓越

做跨境电商&#xff0c;需要将货物运往国外&#xff0c;随着做跨境电商的人越来越多&#xff0c;也越来越多的人需要货代这个服务。货代顾名思义就是货运代理&#xff0c;能够帮助商家发货&#xff0c;为商家节省成本和时间&#xff0c;省去繁琐的打包运货的过程&#xff0c;全…

行业分析| 物流对讲

交通运输是支撑国民经济发展的重要产业&#xff0c;承担着促进商品的高效快捷流转的使命&#xff0c;物流行业在现代社会发展中有着十分积极的作用&#xff0c;在新的时代背景下物流业需要更加智能化的管理与服务模式。“智慧物流”起源于IBM提出的“智慧地球”这一概念&#x…

Shopee打包贴单商品代发选星卓越货代服务系统

随着东南亚跨境电商的日益发展&#xff0c;目前做货代服务的人越来越多&#xff0c;货代服务系统在市场上也有许多&#xff0c;而这些货代服务系统的质量又参差不齐&#xff0c;这时对于做Shopee无货源&#xff0c;一件代发模式的新手商家来说&#xff0c;选择一个靠谱&#xf…

商务部:2017中国国际货运代理行业发展报告 (附下载)

报告下载&#xff1a;添加199IT官方微信【i199it】&#xff0c;回复关键词【2017中国国际货运代理行业发展报告】即可&#xff01; 为全面了解我国国际货代行业发展情况&#xff0c;分析国际货代行业发展面临的国内国际环境和发展趋势&#xff0c;商务部服贸司组织编写了《中国…

国际海运详解:国际海运的发货方式有哪些?区别是什么?

在跨境物流运输中&#xff0c;海运是一个种常用的运输方式&#xff0c;下面来重点介绍国际海运的几种发货方式和区别&#xff1a; 一、电放提单 是电报放货的缩写。提单信息以电子报纸或电子信息的形式发送给目的港船公司&#xff0c;收货人可以更换加盖电子印章的提单和电子…

一群货代人的圈子-实时在线货运管理的方法

有十个赞我们将指导你们下载这个文章 我这里只做分享的事情 实时在线货运管理的方法 来吧&#xff0c;我们可以在这里看到你想要的东西 www.baitongda.cn

2022-2028年中国国际货运代理行业市场竞争态势及未来前景分析报告

报告类型&#xff1a;产业研究 报告格式&#xff1a;电子版、纸介版 出品单位&#xff1a;智研咨询-产业信息网 智研咨询发布的《2022-2028年中国国际货运代理行业市场竞争态势及未来前景分析报告》共十一章。首先介绍了中国国际货运代理行业市场发展环境、国际货运代理整体运…

国际物流行业该如何寻找客户

国际物流是一个竞争很激烈的行业&#xff0c;只有掌握了国际物流找客户的技巧和方法&#xff0c;才能掌握更多的客户资源&#xff0c;以下就来讲讲国际物流有哪些开发客户的方式。 1.交易会寻找国际和国内每年都有不少交易会,比如广交会、高交会、中小企业博览会等等。做国际物…

国际货运代理行业分析

国际货运代理面临的困局&#xff0c;是一个时代的结束&#xff01; https://zhuanlan.zhihu.com/p/68044703 国际货运代理行业的未来 https://zhuanlan.zhihu.com/p/86243754 国际货运代理的存在有何意义? https://www.zhihu.com/question/26604471/answer/95237365 2019…

一文读懂元宇宙--元宇宙含义

元宇宙是“虚实融合的世界”&#xff0c;包含模拟现实的虚拟世界、创新的虚拟世界、现实世界&#xff08;也是元宇宙的一部分&#xff09;、虚拟和现实世界的融合&#xff08;将高于/超越单一的虚拟或者现实世界&#xff09;。 虚实融合的世界&#xff08;图片来源于德勤&#…

元宇宙概述

1、什么是元宇宙 近来&#xff0c;“元宇宙”成为热门话题&#xff0c;越来越频繁地出现在人们的视野中。大家都在谈论它&#xff0c;但似乎还没有一个被所有人认同的定义。元宇宙究竟是什么&#xff1f;未来它会对我们的工作和生活带来什么样的改变&#xff1f; 何为元宇宙&…

iNFTnews | 五大策略教你如何玩转元宇宙营销

元宇宙被视为科技界的“下一件大事”&#xff0c;它不断发展和变化&#xff0c;并将在未来几年真正改变营销。 如果你想在这样一个全新的数字虚拟世界中获得成功&#xff0c;你的企业必须部署有效的元宇宙营销策略&#xff0c;以满足新一代&#xff08;如z世代&#xff09;的独…

元宇宙入门必读:分辨真正”元宇宙“的七大要素,缺一不可

自上世纪 90年代“元宇宙”诞生以来&#xff0c;关于“元宇宙”的讨论就从来没断过&#xff0c;尤其是这几年“大流行”期间&#xff08;网络活动激增&#xff09;&#xff0c;加上家喻户晓的Facebook更名为Meta之后“元宇宙”愈发红火。 “元宇宙”到底是什么&#xff1f;如何…

元宇宙NFT初学者学习教程

用最简单的方式了解AR、VR、MR、NFTs以及加密货币和区块链 你会学到什么 什么是NFT&#xff1f; 什么是元宇宙&#xff1f; NFT、元宇宙和网络3如何改变我们的世界 如何免费创建NFTs 如何销售和列出NFT 如何对元宇宙加密硬币进行尽职调查 如何在元宇宙投资 MP4 |视频:h264&am…

中央党校出版社元宇宙图书编委高泽龙在元宇宙100分第24期做分享

作为中央党校出版社元宇宙图书《元宇宙科技产业党政干部学习详解》编委&#xff0c;高泽龙9月7日晚上七点半在编委会发布平台“元宇宙100分”第24期做了分享。本期分享的对话嘉宾是中国科学院空天信息创新研究院研究员、博士生导师彭玲。 彭玲认真听了高泽龙的题目为“从《元宇…

元宇宙 阅读笔记

基本上属于一个阅读摘抄&#xff0c;原文写的还是很好的 不过我看了半天&#xff0c;怎么感觉这个就是VR啊 定义 元宇宙是一个平行于现实世界&#xff0c;又独立于现实世界的虚拟空间&#xff0c;是映射现实世界的在线虚拟世界&#xff0c;是越来越真实的数字虚拟世界。 维基百…

【ArchSummit】社交元宇宙的技术挑战与探索

&#x1f4eb; 作者简介&#xff1a;小明Java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x…