0

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

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参数,我可以禁用它吗?

4

1 回答 1

0

没有办法通过在本地自动化 Outlook 来实现这一点。

您对 Outlook 对象模型所做的一切都只与本地帐户有关。如果您需要通过添加约会或会议而不自定义您的来修改远程日历,如果您使用 Exchange 帐户或 O365,请考虑使用 EWS、Outlook REST API 或 Graph API。有关详细信息,请参阅探索 Exchange 中的 EWS 托管 API、EWS 和 Web 服务一个 Outlook REST API - 您最喜欢的平台 - 400+ 百万用户。Graph API 是最可靠的方式,因为其他技术将在不久的将来消亡。

您也可以考虑将访问权限委托给其他帐户并使用NameSpace.GetSharedDefaultFolder方法,该方法返回一个Folder对象,该对象代表指定用户的指定默认文件夹。此方法用于委派方案,其中一个用户已将一个或多个默认文件夹(例如,他们的共享日历文件夹)的访问权限委派给另一个用户。在这种情况下,您将能够访问用户的日历文件夹并直接在那里添加约会而无需发送任何内容。这是说明 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 对象模型对于所有类型的编程语言都很常见,因此希望理解 OOM 调用不会有问题。

于 2021-12-07T18:33:13.277 回答