我的任务是确定如何将批准的假期从数据库添加到日历中。所以我做了一个简单的代码:
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个用户创建它,我的呼叫者就会收到垃圾邮件。
此外,我不能直接连接到服务器并创建更复杂的东西,比如:用Python发送会议邀请。这是不可取的,因为我认为,我需要获得所有用户的登录名和密码。
那么,有什么简单的方法可以做到这一点吗?然后删除它或outlook参数,我可以用它禁用它吗?
没有办法通过本地自动化Outlook来实现这一点。
您对Outlook对象模型所做的一切都只与本地帐户相关。如果您需要通过添加约会或会议来修改远程日历而不自定义您的日历,请考虑使用EWS、Outlook REST API或Graph API(如果您使用Exchange帐户或O365(。有关详细信息,请参阅探索Exchange中的EWS托管API、EWS和web服务,以及One Outlook REST API-您最喜欢的平台-4亿多用户。图形API是最可靠的方式,因为其他技术将在不久的将来消亡。
此外,您可以考虑将访问权限委派给其他帐户并使用名称空间。GetSharedDefaultFolder方法,该方法返回一个Folder
对象,该对象表示指定用户的指定默认文件夹。此方法用于委派场景,其中一个用户已将其一个或多个默认文件夹(例如,共享日历文件夹(的访问权限委派给另一个用户。在这种情况下,您将能够访问用户的日历文件夹,并直接在那里添加约会,而无需发送任何内容。下面是示例VBA代码,它说明了OOM调用的顺序:
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调用不会成为问题。