Python 如何使用备用发件人/组织者创建Outlook会议请求?

Python 如何使用备用发件人/组织者创建Outlook会议请求?,python,outlook,win32com,Python,Outlook,Win32com,我开发了一个Python应用程序,可以自动发送电子邮件和满足内部办公活动的请求。为了将这些与我的常规通信分开,我们设置了一个备用电子邮件地址,我可以用它发送官方公告。我已经修改了我的应用程序,通过为备用发件人使用SentOnBehalfOfName来处理电子邮件-但是,我无法为会议请求复制此应用程序。下面是我基于一系列网络搜索的尝试。但是,在运行此操作时,我会得到以下错误: Traceback (most recent call last): File "mailer_test.py", l

我开发了一个Python应用程序,可以自动发送电子邮件和满足内部办公活动的请求。为了将这些与我的常规通信分开,我们设置了一个备用电子邮件地址,我可以用它发送官方公告。我已经修改了我的应用程序,通过为备用发件人使用
SentOnBehalfOfName
来处理电子邮件-但是,我无法为会议请求复制此应用程序。下面是我基于一系列网络搜索的尝试。但是,在运行此操作时,我会得到以下错误:

Traceback (most recent call last):
  File "mailer_test.py", line 49, in <module> test_sender)
  File "mailer_test.py", line 38, in send_meeting_request
    mtg.Send()
  File "<COMObject CreateItem>", line 2, in Send
pywintypes.com_error: (-2147024809, 'The parameter is incorrect.', None, None)
注意:这与问题不同,因为我没有使用C#,也没有试图在事后编辑会议请求

更新:
正如Marnix Klooster所建议的,我一直在通过UI查看如何做到这一点,这似乎并不容易(如果可能的话)。我这样做的一种方法是进入另一个用户的日历,在那里创建一个新的约会,并添加被邀请者。更改
帐户设置时显示的服务器设置对话框中的
更多设置…
按钮转到
高级
选项卡,即可添加该邮箱。这个问题的另一个答案是如何在通过COM访问Outlook时使用此邮箱作为默认发起人。

根据,您可以代表另一个人发送会议请求,但您需要访问此人的日历。其他人必须指定您为代表。

只是想问一个愚蠢的问题:此功能是否可通过用户界面使用?如果不是(而且我从来没有找到过),那么从编程的角度来说也可能是不可能的。这根本不是一个愚蠢的问题——我一直在UI上尝试,运气不好。然而,似乎认为这是可能的弄乱公关收件人的旗帜。这是正确的。这里给出的第一步是“打开其他人的日历”。我可以手动完成,但有没有办法自动完成?使用exchange API:?
import win32com.client

OUTLOOK_APPOINTMENT_ITEM  = 1
OUTLOOK_MEETING           = 1
OUTLOOK_ORGANIZER         = 0
OUTLOOK_OPTIONAL_ATTENDEE = 2

ONE_HOUR       = 60
THIRTY_MINUTES = 30

OUTLOOK_FORMAT = '%m/%d/%Y %H:%M'
outlook_date   = lambda dt: dt.strftime(OUTLOOK_FORMAT)

class OutlookClient(object):
    def __init__(self):
        self.outlook = win32com.client.Dispatch('Outlook.Application')

    def send_meeting_request(self, subject, time, location, recipients, body,
                             sender=None):
        mtg = self.outlook.CreateItem(OUTLOOK_APPOINTMENT_ITEM)
        mtg.MeetingStatus = OUTLOOK_MEETING
        mtg.Location = location

        if sender:
            # Want to set the sender to an address specified in the call
            # This is the portion of the code that does not work
            organizer      = mtg.Recipients.Add(sender)
            organizer.Type = OUTLOOK_ORGANIZER
        for recipient in recipients:
            invitee      = mtg.Recipients.Add(recipient)
            invitee.Type = OUTLOOK_OPTIONAL_ATTENDEE

        mtg.Subject                    = subject
        mtg.Start                      = outlook_date(time)
        mtg.Duration                   = ONE_HOUR
        mtg.ReminderMinutesBeforeStart = THIRTY_MINUTES
        mtg.ResponseRequested          = False
        mtg.Body                       = body
        mtg.Send()

if __name__ == "__main__":
    import datetime
    ol = OutlookClient()
    meeting_time = datetime.datetime.now() + datetime.timedelta(hours=3)
    test_recipients = ['me@example.com']
    test_sender     = 'alternate@example.com'

    ol.send_meeting_request('Test Meeting', meeting_time, 'Nowhere',
                            test_recipients, 'This is a test meeting.',
                            test_sender)