Как мне создать запрос на встречу в Outlook с альтернативным отправителем / организатором?

Я разработал приложение Python для автоматизации отправки электронных писем и запросов на встречи для внутренних офисных мероприятий.Чтобы отделить их от моих обычных сообщений, мы создали альтернативный адрес электронной почты, который я могу использовать для отправки официальных объявлений. Я изменил свое приложение, чтобы обрабатывать это для электронных писем, используя SentOnBehalfOfName для альтернативного отправителя, однако мне не удалось продублировать это для запросов на собрания. Далее следует моя попытка, основанная на серии поисковых запросов. Однако при запуске я получаю сообщение об ошибке:

Traceback (most recent call last):
  File "mailer_test.py", line 49, in  test_sender)
  File "mailer_test.py", line 38, in send_meeting_request
    mtg.Send()
  File "", line 2, in Send
pywintypes.com_error: (-2147024809, 'The parameter is incorrect.', None, None)

Это происходит, когда я добавляю параметр для альтернативного отправителя - удаление этого приводит к успешному отправлению сообщения из моей учетной записи. Ниже приведен тестовый код, воспроизводящий ошибку. Я удалил свой фактический адрес электронной почты, но все остальное осталось прежним.

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)

Примечание. Это не та же проблема, что и этот вопрос , поскольку я не использую C # и не пытаюсь редактировать запрос на собрание постфактум.

Обновление: Как предположил Марникс Клоостер, я просматривал пользовательский интерфейс, чтобы увидеть, как я могу это сделать, и это оказалось непросто (если даже возможно). Единственный способ, которым я это сделал, - это зайти в календарь другого пользователя, создать там новую встречу и добавить приглашенных. Этот почтовый ящик добавляется путем перехода на вкладку Дополнительно с помощью кнопки Дополнительные настройки ... в диалоговом окне «Настройки сервера», отображаемом при изменении настроек учетной записи . Альтернативный ответ на этот вопрос - как использовать этот почтовый ящик в качестве отправителя по умолчанию при доступе к Outlook через COM.

6
задан Community 23 May 2017 в 12:32
поделиться