6 votes

Comment puis-je créer une demande de réunion Outlook avec un expéditeur/organisateur alternatif ?

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.

0voto

Roland Smith Points 10392

Selon cette page, vous pouvez envoyer des demandes de réunion au nom d'une autre personne, mais vous devez avoir accès à son calendrier. L'autre personne doit vous nommer délégué.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X