Как создать приглашение на собрание Outlook с альтернативным отправителем / организатором?
Я разработал приложение 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 ответ
Согласно этой странице, вы можете отправлять приглашения на собрания от имени другого человека, но у вас должен быть доступ к календарю этого человека. Другой человек должен назначить вас делегатом.