J'ai développé une application Python pour automatiser l'envoi d'e-mails et de demandes de réunions pour les événements internes du bureau. Pour les garder séparés de mes communications régulières, nous avons mis en place une adresse e-mail alternative que je peux utiliser pour envoyer les annonces officielles. J'ai modifié mon application pour gérer cela pour les e-mails en utilisant le SentOnBehalfOfName
pour l'expéditeur alternatif - cependant, je n'ai pas été en mesure de reproduire cela pour les demandes de réunions. Ma tentative basée sur une série de recherches web suit. Cependant, en exécutant ceci, j'obtiens l'erreur :
Traceback (most recent call last):
File "mailer_test.py", ligne 49, in test_sender)
File "mailer_test.py", ligne 38, in send_meeting_request
mtg.Send()
File "", ligne 2, in Send
pywintypes.com_error: (-2147024809, 'Le paramètre est incorrect.', None, None)
Cela se produit lorsque j'ajoute l'option pour un expéditeur alternatif - en la supprimant, le message est envoyé avec succès depuis mon compte. Le code de test qui reproduit l'erreur est ci-dessous - j'ai supprimé mon adresse e-mail réelle, mais tout le reste est le même.
import win32com.client
OUTLOOK_APPOINTMENT_ITEM = 1
OUTLOOK_MEETING = 1
OUTLOOK_ORGANIZER = 0
OUTLOOK_OPTIONAL_ATTENDEE = 2
UNE_HEURE = 60
TRENTE_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:
# Veut définir l'expéditeur à une adresse spécifiée dans l'appel
# C'est la partie du code qui ne fonctionne pas
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 = UNE_HEURE
mtg.ReminderMinutesBeforeStart = TRENTE_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 = ['moi@example.com']
test_sender = 'alternatif@example.com'
ol.send_meeting_request('Réunion de test', meeting_time, 'Nulle part',
test_recipients, 'Ceci est une réunion de test.',
test_sender)
Note: Ce n'est pas le même problème que cette question, car je n'utilise pas C# et je n'essaie pas non plus de modifier la demande de réunion après coup.
Mise à jour: Comme l'a suggéré Marnix Klooster, j'ai parcouru l'interface utilisateur pour voir comment je pouvais faire cela, et cela ne semble pas être facile (voire même possible). La seule façon dont je l'ai fait est d'aller dans le calendrier de l'autre utilisateur et de créer un nouvel événement là-bas et d'ajouter des invités. Cette boîte aux lettres est ajoutée en allant dans l'onglet Avancé
à partir du bouton Plus de paramètres...
dans la boîte de dialogue des Paramètres du serveur affichée lors du changement des Paramètres du compte
. Une autre réponse à cette question serait comment utiliser cette boîte aux lettres comme l'expéditeur par défaut lors de l'accès à Outlook via COM.