如何通过API获取macOS日历事件关联的邮箱账户?
获取Mac日历事件关联的邮箱账户方案
你可以通过事件所属的EKCalendar对象获取关联的邮箱账户,EKEvent本身没有直接存储账户信息,但每个事件都绑定了对应的日历,而EKCalendar的ownerAccount属性就是该日历关联的邮箱地址。
实现步骤
- 获取事件对应的
EKCalendar实例:每个EKEvent都有calendar属性,通过它可以拿到所属日历 - 读取
calendar.ownerAccount:该属性返回日历绑定的账户邮箱,本地日历无关联账户时返回nil
修改后的代码
func fetchCalendarEvents() { let eventStore = EKEventStore() eventStore.requestAccess(to: .event) { granted, error in guard granted, error == nil else { // 处理权限拒绝或错误情况 return } guard let defaultCalendar = eventStore.defaultCalendarForNewEvents else { // 处理默认日历不存在的情况 return } let oneYearFromNow = Date().addingTimeInterval(365 * 24 * 60 * 60) let predicate = eventStore.predicateForEvents(withStart: Date(), end: oneYearFromNow, calendars: [defaultCalendar]) let events = eventStore.events(matching: predicate) // 遍历事件,获取每个事件关联的邮箱账户 for event in events { if let ownerAccount = event.calendar.ownerAccount { print("事件「\(event.title ?? "无标题")」关联邮箱:\(ownerAccount)") } else { print("事件「\(event.title ?? "无标题")」未关联邮箱账户") } } } }
补充说明
ownerAccount返回的是日历所属的账户邮箱,比如iCloud、Exchange等账户对应的邮箱- 若日历是本地创建且未绑定任何账户,该属性会返回
nil - 无需使用
ACAccountStore,EventKit框架已通过日历对象提供了所需的账户信息
内容的提问来源于stack exchange,提问作者Reena93
相关产品推荐
相关产品推荐

