2012-02-22 17 views
6

Gönderme e-postalarını otomatik hale getirmek ve iç ofis etkinlikleri için istekleri karşılamak için bir Python uygulaması geliştirdim. Bunları normal iletişimden ayrı tutmak için resmi duyuruları göndermek için kullanabileceğim alternatif bir e-posta adresi oluşturduk. Uygulamamı, alternatif gönderen için SentOnBehalfOfName'u kullanarak e-postalar için işlemek üzere değiştirdim; ancak, toplantı istekleri için bunu yineleyemedim. Bir dizi web aramasına dayanan girişimlerim takip ediyor. - Bu Hesabımdan başarıyla gönderildi mesaj sonuçlar çıkarmadan çok bir başka gönderen için seçeneği eklediğinizdeAlternatif gönderen/düzenleyici ile bir Outlook toplantı isteği nasıl oluştururum?

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) 

bu gerçekleşir: Bu çalıştırırken, olsa da, ben hata alıyorum. Hatayı yeniden üreten test kodu aşağıdadır - Gerçek e-posta adresimi kaldırdım ancak diğer her şey aynı.

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 = ['[email protected]'] 
    test_sender  = '[email protected]' 

    ol.send_meeting_request('Test Meeting', meeting_time, 'Nowhere', 
          test_recipients, 'This is a test meeting.', 
          test_sender) 

Not: C# kullanarak değilim ve ben de aslında sonra toplantı isteğini düzenlemek için çalışıyor değilim, bu durum this question aynı sorun değildir.

Güncelleme: Marnix Klooster önerdi, ben UI bakarak oldum ben bunu nasıl görmek ve kolay görünmüyor (eğer hatta mümkünse). Bunu yapmamın bir yolu, diğer kullanıcının takvime gitmek ve orada yeni bir randevu oluşturmak ve davetliler eklemek. Bu posta kutusu, Account Settings değiştirilirken görüntülenen Sunucu Ayarları iletişim kutusundaki More Settings... düğmesinden Advanced sekmesine giderek eklenir. Bu soruna alternatif bir cevap, Outlook'a COM aracılığıyla erişirken varsayılan postalayıcı olarak bu posta kutusunun nasıl kullanılacağıdır.

+1

Sadece aptalca bir soru sormak için: Bu işleve UI aracılığıyla ulaşılabilir mi? Eğer değilse (ve onu hiç bulamadım), o zaman programsal olarak da imkansız olabilir. –

+0

Hiç aptal bir soru değil - UI aracılığıyla çok şanssız deniyorum. Ancak, http://help.lockergnome.com/office/set-meeting-organizer--ftopict697177.html, PR_RECIPIENT_FLAGS ile karıştırmanın mümkün olduğunu düşünmektedir. –

cevap

-1

this page göre, başka bir kişi adına toplantı istekleri gönderebilirsiniz, ancak bu kişinin takvimine erişim olması gerekir. Diğer kişi sizi delege olarak atamalıdır.

+0

Bu doğru. Orada verilen ilk adım, "Diğer kişinin takvimini aç". Bunu el ile yapabilirim, ama bunu otomatikleştirmenin bir yolu var mı? –

+0

Değişim API'sini kullanma: http://docs.activestate.com/activepython/2.4/pywin32/exchange.html? –

İlgili konular