Python - 发送会议但不显示在我的日历中

Python - send meeting but do not show in my callendar

我的任务是想办法从数据库中将批准的假期添加到日历中。所以我做了这个简单的代码:

import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application")

def sendMeeting():    
  appt = outlook.CreateItem(1) # AppointmentItem
  appt.Start = "2021-12-09 10:10" # yyyy-MM-dd hh:mm
  appt.Subject = "Test test"
  appt.Duration = 60
  appt.Location = "Out of office"
  appt.MeetingStatus = 1 # 1 - olMeeting; Changing the appointment to meeting. Only after changing the meeting status recipients can be added
  appt.Organizer = "michal.liska@havelpartners.cz"

  appt.Recipients.Add("michal.liska@havelpartners.cz") # Don't end ; as delimiter

  appt.Save()
  appt.Send()
  print("sent")


sendMeeting()

一切都很好,但问题是,如果我发送了会议,它也会出现在我的日历中。因此,如果我为 100 个用户创建它,我的 callendar 就会被发送垃圾邮件。

我也无法直接连接到服务器并创建像这样更复杂的东西:Sending Meeting Invitations With Python。这是不可取的,因为我认为我需要为所有用户获取登录名和密码。

那么有什么简单的方法可以做到吗? Meaby 之后删除它或 outlook 参数,我可以用它禁用它吗?

无法通过本地自动化 Outlook 来实现此功能。

您使用 Outlook object 模型所做的一切都只与本地帐户相关。如果您需要在不自定义的情况下通过添加约会或会议来修改远程日历,如果您使用 Exchange 帐户或 O365,请考虑使用 EWS、Outlook REST API 或 Graph API。有关详细信息,请参阅 Explore the EWS Managed API, EWS, and web services in Exchange and One Outlook REST API - your favorite platform - 400+ million users。图 API 是最可靠的方法,因为其他技术将在不久的将来消亡。

您也可以考虑将访问权限委托给其他帐户并使用 NameSpace.GetSharedDefaultFolder 方法,其中 returns 一个 Folder object 表示指定用户的指定默认文件夹.此方法用于委托方案,其中一个用户已将访问权限委托给另一个用户一个或多个默认文件夹(例如,他们的共享日历文件夹)。在这种情况下,您将能够访问用户的日历文件夹并直接在其中添加约会,而无需发送任何内容。这是说明 OOM 调用顺序的示例 VBA 代码:

Sub ResolveName() 
 Dim myNamespace As Outlook.NameSpace 
 Dim myRecipient As Outlook.Recipient 
 Dim CalendarFolder As Outlook.Folder 
 
 Set myNamespace = Application.GetNamespace("MAPI") 
 Set myRecipient = myNamespace.CreateRecipient("Eugene Astafiev") 
 
 myRecipient.Resolve 
 
 If myRecipient.Resolved Then 
   Call ShowCalendar(myNamespace, myRecipient) 
 End If 
 
End Sub 
 
 
 
Sub ShowCalendar(myNamespace, myRecipient) 
 Dim CalendarFolder As Outlook.Folder 
 
 Set CalendarFolder = myNamespace.GetSharedDefaultFolder(myRecipient, olFolderCalendar) 
 
 CalendarFolder.Display 
 
End Sub

我知道问题在 Python,但是 Outlook object 模型对于所有类型的编程语言都是通用的,所以希望理解 OOM 调用不会有问题。