2012-02-22 17 views
6

私は、社内イベントの電子メールや会議出席依頼を自動送信するPythonアプリケーションを開発しました。これらの情報を私の定期的な連絡とは別に保存するために、公式のお知らせを送るために使用できる代替のメールアドレスを設定しました。代替の送信者にSentOnBehalfOfNameを使用してメールの処理を行うようにアプリケーションを変更しましたが、これを会議出席依頼のために複製できませんでした。一連のウェブ検索に基づいた私の試みは次のとおりです。これを実行している場合は、しかし、私はエラーを取得する:私は別の送信者のためにオプションで追加するときに代替の送信者/オーガナイザを使用してOutlook会議出席依頼を作成するにはどうすればよいですか?

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

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

注:これは、this questionと同じ問題ではない私は、C#を使用していないので、私はまた事実の後に会議出席依頼を編集するつもりはありませんよ。

更新:マーニックスクロスターが示唆したように、私はUIを見てきた 私はこれを行うことができます方法を確認するために、簡単ではありません(場合でも可能)。私がやったひとつの方法は、他のユーザーのカレンダーに入り、そこに新しい予定を作成して招待状を追加することです。そのメールボックスは、Account Settingsの変更時に表示される[サーバー設定]ダイアログの[More Settings...]ボタンのAdvancedタブに移動して追加します。この質問に対する別の答えは、COM経由でOutlookにアクセスするときにこのメールボックスを既定の発信者として使用する方法です。

+1

この機能はUIから利用できますか?そうでなければ(それが見つからなかった)、プログラム的にも不可能かもしれません。 –

+0

まったくの質問ではありません - 私は多くの運がなければUIを通して試してきました。しかし、http://help.lockergnome.com/office/set-meeting-organizer--ftopict697177.htmlは、PR_RECIPIENT_FLAGSを使いこなすことで可能だと思っているようです。 –

答えて

-1

this pageによれば、他の人に代わって会議出席依頼を送信できますが、その人のカレンダーにアクセスする必要があります。他の人はあなたを代表として任命しなければなりません。

+0

それは正しいです。そこに与えられた最初のステップは、「他人のカレンダーを開く」ことです。私はそれを手動で行うことができますが、それを自動化する方法はありますか? –

+0

交換APIの使用:http://docs.activestate.com/activepython/2.4/pywin32/exchange.html? –

関連する問題