Как создать приглашение на собрание Outlook с альтернативным отправителем / организатором? - PullRequest
6 голосов
/ 22 февраля 2012

Я разработал приложение 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)

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

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 # и также не пытаюсь редактировать приглашение на собрание после факта.

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

1 Ответ

0 голосов
/ 10 марта 2012

Согласно этой странице , вы можете отправлять приглашения на собрания от имени другого человека, но вам необходим доступ к календарю этого человека. Другой человек должен назначить вас делегатом.

...