Email 如何列出当前正在进行的特定文件夹中的所有事件?并通过电子邮件将列表发送给用户

Email 如何列出当前正在进行的特定文件夹中的所有事件?并通过电子邮件将列表发送给用户,email,event-handling,plone,Email,Event Handling,Plone,我有一个plone的4.0实例。我想列出从今天开始或日期范围(开始日期和结束日期)包含今天日期的文件夹中的事件。 我还需要向邮件中列出这些事件的小组发送电子邮件。我在ZMI上添加了一个Python脚本,它工作得非常好。唯一的问题是,当我发送邮件时,邮件中只列出一个事件细节。我不知道如何迭代才能得到完整的列表。请导游 import datetime folder_path = '/'.join(context.getPhysicalPath()) + '/events' # Convert D

我有一个plone的4.0实例。我想列出从今天开始或日期范围(开始日期和结束日期)包含今天日期的文件夹中的事件。 我还需要向邮件中列出这些事件的小组发送电子邮件。我在ZMI上添加了一个Python脚本,它工作得非常好。唯一的问题是,当我发送邮件时,邮件中只列出一个事件细节。我不知道如何迭代才能得到完整的列表。请导游

import datetime

folder_path = '/'.join(context.getPhysicalPath()) + '/events'

# Convert Date yyyy/mm/dd to dd month yyyy
now = DateTime().Date()
nowd = DateTime(now)

#dateList = [nowd10 - nowd10+margin]
#print dateList
#return printed

dt = nowd.strftime('%b %d,%Y')
now_date = DateTime(now)


query=context.portal_catalog(portal_type='Event',
                        start={'query': (nowd-10,nowd+1),
                        'range': 'min:max'})

results = context.portal_catalog(path={'query': folder_path, 'depth': 1})
folder_dict={}
for ev in results:
  if ev.portal_type == 'Event':
     loc = ev.location
     stdt = ev.start.Date()
     stdt = DateTime(stdt)
     endt = ev.end.Date()
     endt = DateTime(endt)
     if nowd - 10 <= stdt <= nowd:
        evobj = ev.getObject()
        mydict = {}
        mydict['absolute_url'] = evobj.absolute_url()
        mydict['StartDate'] = stdt
        mydict['EndDate'] = endt
        mydict['Location'] = loc
        msgbody = ""
        for y, z in evobj.getMetadataHeaders():
           mydict[y] = z
           msgbody = """
           Title: %(Title)s
           Start: %(StartDate)s
           End: %(EndDate)s
           Event Location: %(Location)s
           Link to Event page: %(absolute_url)s
           """ % mydict
        msgbody = msgbody + msgbody


# Send email
mFrom = "fromemail"
mTo = "to email"
mMsg = "Events for Today:"
mMsg += msgbody
mSubj = "Events  " + dt

context.MailHost.send(mMsg, mTo, mFrom, mSubj)
导入日期时间
文件夹路径='/'.join(context.getPhysicalPath())+'/events'
#将日期yyyy/mm/dd转换为dd月yyyy
现在=DateTime().Date()
nowd=日期时间(现在)
#日期列表=[nowd10-nowd10+页边距]
#打印日期表
#返回打印
dt=nowd.strftime(“%b%d,%Y”)
now_date=日期时间(now)
query=context.portal\u目录(portal\u type='Event',
start={'query':(nowd-10,nowd+1),
“范围”:“最小值:最大值”})
结果=上下文.portal\u目录(路径={'query':文件夹路径,'depth':1})
文件夹_dict={}
对于ev in结果:
如果ev.portal_type==“事件”:
loc=电动车辆位置
stdt=ev.start.Date()
stdt=日期时间(stdt)
endt=ev.end.Date()
endt=日期时间(endt)

如果nowd-10您可以使用集合获取其日期范围内包含今天的所有事件,对于邮件发送,您可以使用collect.contentrules.mailtotogroup。它还能够发送正文文本字段。如果这就是您要查找的内容。

代码中有两个目录搜索,但第一个没有使用。您看到了吗?您似乎有太多名为
msgbody
的变量,一个用于总体,另一个位于最里面的循环中。此外,您可以将门户类型放入门户目录查询中。你也可以在开始和结束日期这样做,尽管这有点棘手。当你有很多活动时,这将大大加快速度。