Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >循环浏览未读电子邮件,将未读更改为读,用于每个

循环浏览未读电子邮件,将未读更改为读,用于每个
EN

Stack Overflow用户
提问于 2022-03-16 08:26:55
回答 2查看 125关注 0票数 0

我编写了代码来接收未读的电子邮件和其他标准。

代码运行,但For Each itm In olFolder.Items.Restrict(sFilter)不起作用。

例如,如果收件箱中有4封未读的电子邮件,每个应该循环4次,但循环只发生2次。

代码语言:javascript
运行
AI代码解释
复制
Sub ReadOutlookEmails_WithCriteria()
    Dim olApp As Outlook.Application, olNs As Outlook.Namespace
    Dim olFolder As Outlook.MAPIFolder, olMail As Outlook.MailItem
    Dim eFolder As Outlook.Folder '~~> additional declaration
      Dim Inbox As Outlook.MAPIFolder
    Dim SubFolder As Outlook.MAPIFolder
    Dim objAtt As Outlook.Attachment
        Dim olItem As Outlook.MailItem
    Dim olReply As MailItem ' Reply
    Dim olRecip As Recipient
    Dim i As Long
    Dim x As Date, ws As Worksheet '~~> declare WS variable instead
    Dim lrow As Long '~~> additional declaration

    Set ws = ActiveSheet '~~> or you can be more explicit using the next line
    Set EC = ThisWorkbook.Sheets("Email Search Criteria")
    Set IE = ThisWorkbook.Sheets("Inbox Emails")
    Set olApp = New Outlook.Application
    Set olNs = olApp.GetNamespace("MAPI")
    Set Inbox = olNs.GetDefaultFolder(olFolderInbox)
    Set SubFolder = Inbox.Folders("Rejected Emails")
    
    Todays_Date = EC.Range("E2").Value
    
    IE.Rows("2:10000").Clear
    Incr = 2

    For Each eFolder In olNs.GetDefaultFolder(olFolderInbox).Folders
        If eFolder = "Mandatory Training Enrollment" Then 'IF_Check_1
            Set olFolder = olNs.GetDefaultFolder(olFolderInbox).Folders(eFolder.Name): Debug.Print olFolder
            
            sFilter = "[ReceivedTime] >= '" & Todays_Date & "' AND [UNREAD]=TRUE"
            Debug.Print olFolder.Items.Restrict(sFilter).Count
            
            '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            For Each itm In olFolder.Items.Restrict(sFilter) ''''Problem is over here
            '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            
                If itm.Attachments.Count = EC.Range("B2") Then  'itm Like "*" & EC.Range("A2") & "*" And'IF_Check_2
                   For Each objAtt In itm.Attachments
                        Debug.Print "Subject Name - " & itm: Debug.Print "Attachment Type - " & objAtt.DisplayName
                        Debug.Print "Attachment Size - " & objAtt.Size: Debug.Print "Attachments Count - " & objAtt.Index
                        
                        Debug.Print "Subject Name - " & EC.Range("A2"): Debug.Print "Attachment Type - " & EC.Range("C2")
                        Debug.Print "Attachment Size - " & EC.Range("D2"): Debug.Print "Attachments Count - " & EC.Range("B2")
                        
                        If objAtt.Size <= EC.Range("D2") And UCase(objAtt.Filename) Like UCase("*" & EC.Range("C2")) Then
                                IE.Range("A" & Incr) = olFolder
                                IE.Range("B" & Incr) = itm.SenderName
                                IE.Range("C" & Incr) = itm
                                IE.Range("D" & Incr) = objAtt.DisplayName
                                IE.Range("E" & Incr) = itm.Attachments.Count
                                IE.Range("F" & Incr) = objAtt.Size
                                IE.Range("G" & Incr) = "Pass"
                                
                                Set olReply = itm.ReplyAll
                                'Set olRecip = olReply.Recipients.Add("Email Address Here") ' Recipient Address
                                'olRecip.Type = olCC
                                olReply.Body = "Hello," & vbNewLine & vbNewLine & "Email Success" & vbNewLine & vbNewLine & "Thank you. " & vbCrLf & olReply.Body
                                olReply.Display
                                'olReply.SentOnBehalfOfName = onBehalfOf
                                'olReply.SendUsingAccount = getGenericMailboxAccount(onBehalfOf)
                                
                                olReply.Send
                                
                                itm.UnRead = False
                                
                        End If
                   Next objAtt
                ElseIf itm.Attachments.Count <> EC.Range("B2") Then 'IF_Check_2

                            FailReason1 = "Attament is not a PDF"
                            FailReason2 = "Attachment size is more than 10MB"
                            FailReason3 = "Attachment is missing with email"
                            FailReason4 = "Attachments are more than 1"
                            
                            IE.Range("A" & Incr) = olFolder
                            IE.Range("B" & Incr) = itm.SenderName
                            IE.Range("C" & Incr) = itm
                            IE.Range("D" & Incr) = ""
                            IE.Range("E" & Incr) = itm.Attachments.Count
                            IE.Range("F" & Incr) = ""
                            IE.Range("G" & Incr) = "Fail"
                            
                            EBody = "Hello," & vbNewLine & vbNewLine & "Email Not Success." & vbNewLine & vbNewLine _
                                & "Fail Reason Might Be One Of The Below Mentioned:" & vbNewLine & vbNewLine _
                                & "*" & FailReason1 & vbNewLine & vbNewLine _
                                & "*" & FailReason2 & vbNewLine & vbNewLine _
                                & "*" & FailReason3 & vbNewLine & vbNewLine _
                                & "*" & FailReason4 & vbNewLine & vbNewLine _

                            Set olReply = itm.ReplyAll
                            'Set olRecip = olReply.Recipients.Add("Email Address Here") ' Recipient Address
                            'olRecip.Type = olCC
                            'olReply.Body = "Hello," & vbCrLf & "Email Not Success" & vbCrLf & FailReason1 & vbCrLf & FailReason2 & vbCrLf & FailReason3 & vbCrLf & olReply.Body
                            olReply.Body = EBody & vbCrLf & olReply.Body
                            olReply.Display
                            'olReply.SentOnBehalfOfName = onBehalfOf
                            'olReply.SendUsingAccount = getGenericMailboxAccount(onBehalfOf)
                            
                            olReply.Send
                            
                            itm.UnRead = False
                          
                            itm.Move SubFolder

                End If 'IF_Check_2
                Incr = Incr + 1
                
            '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            Next itm ' Its passing to the next statement even though loop is not completed.
            '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            
            Set olFolder = Nothing
        End If ''IF_Check_1
    Next eFolder
End Sub
EN

回答 2

Stack Overflow用户

发布于 2022-03-16 18:57:08

您正在修改正在迭代的集合本身(通过将Unread属性设置为false)。

不要使用foreach -使用下行循环。

代码语言:javascript
运行
AI代码解释
复制
set restrItems = olFolder.Items.Restrict(sFilter)
For i =  restrItems.Count to 1 Step -1
  set itm = restrItems(i)
票数 1
EN

Stack Overflow用户

发布于 2022-03-16 14:12:13

首先,您需要确保日期对象是按照Outlook理解的方式格式化的:

代码语言:javascript
运行
AI代码解释
复制
sFilter = "[ReceivedTime] >= '" & Todays_Date & "' AND [UNREAD]=TRUE"

使用VBA中可用的格式化函数。

代码语言:javascript
运行
AI代码解释
复制
sFilter = "[ReceivedTime] > '" & Format(Todays_Date, "ddddd h:nn AMPM") & "'"
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71500778

复制
相关文章
Redis实现信息已读未读状态提示
假如现在有2个模块需要提示消息:只要存在用户在上个时间点之后没有看过的信息就提示用户有新的信息
MonroeCode
2018/01/10
2.5K0
WEBIM未读计数不对?
ALL ON ONE 的原则,一开始登录的第一条最近联系人的会话是不显示未读计数的
hhualiu
2019/03/22
1.5K0
WEBIM未读计数不对?
Redis实现信息已读未读状态提示
前提: 假如现在有2个模块需要提示消息:只要存在用户在上个时间点之后没有看过的信息就提示用户有新的信息 思路如下: 使用hash存储用户上次看过的时间,使用sortedset存储每个模块的每个信息产生的时间 上代码: Map<String, String> dataMap = new HashMap<>(); Jedis jedis=null; String uid="1";//用户id //分类数组 String []cagoryArray={"c1","c2"}; try {     //连接池获取连
MonroeCode
2018/02/09
3.3K0
群聊消息“已读”/“未读” 功能解决方案!
一朋友和我讨论他前段时间面试某大公司的一题目: 企业IM比如企业微信、钉钉里面的群消息的有个已读未读的功能,发送者刚发出消息时,当前群里其他群成员都是未读状态,陆陆续续有人看了这个消息,这时候消息的详情变成x人已读,y人未读,如下图所示,有具体的已读未读列表(万恶的功能,看到同事or老板的消息不能假装没看到了),每条消息对应一个唯一的messageid(uint64_t),每个用户对应一个唯一的userid(uint64_t),应该如何保存这个消息对应的已读未读详情呢? 我第一时间给出一个很简单粗暴的方案
java思维导图
2022/04/25
3.3K0
群聊消息“已读”/“未读” 功能解决方案!
面试题:群聊消息的已读未读设计
对于每一个messageid,存当前readids + unreadids,当群成员A已读某一条消息时,把A userid从unreadids移除写到readids上就好了,客户端更新到messageid对应的详情列表,就可以展示m人已读,n人未读
Java旅途
2022/03/04
2K0
面试题:群聊消息的已读未读设计
钉钉消息已读、未读咋实现的嘞?
一款app,消息页面有:钱包通知、最近访客等各种通知类别,每个类别可能有新的通知消息,实现已读、未读功能,包括多少个未读,这个是怎么实现的呢?比如用户A访问了用户B的主页,难道用rabitmq给B发通知消息吗?量大了成本受得了吗?有没有成本低的方案呢
JavaEdge
2023/09/01
5440
钉钉消息已读、未读咋实现的嘞?
MySQL事务隔离级别:读未提交、读已提交、可重复读和串行
在进行多个事务的并发执行时,如果不对它们进行隔离,则可能会产生一些问题。例如:脏读、不可重复读和幻读。而事务隔离级别就是用来解决这些问题的。
网络技术联盟站
2023/06/03
7.5K0
Google Gmail邮箱一次性标记所有未读邮件为已读
和许多 Gmail 用户一样,您的收件箱中也可能塞满了数百甚至数千封未读电子邮件,有时很难知道您何时收到新邮件,
晓得博客
2021/08/05
4.7K0
面试官:群聊消息的已读未读功能,你来设计一个?
作者 | 小猿学习笔记 来源 | https://www.toutiao.com/i6686735232772604429 一朋友和我讨论他前段时间面试某大公司的一题目 : 企业IM比如企业微信、钉钉里面的群消息的有个已读未读的功能,发送者刚发出消息时,当前群里其他群成员都是未读状态,陆陆续续有人看了这个消息,这时候消息的详情变成x人已读,y人未读,如下图所示,有具体的已读未读列表(万恶的功能,看到同事or老板的消息不能假装没看到了),每条消息对应一个唯一的messageid(uint64_t),每个用户
程序猿DD
2023/04/04
1.6K1
面试官:群聊消息的已读未读功能,你来设计一个?
Android 在应用图标上设置未读消息数量
1.在使用之前首先 初始化 ,三个方法的参数分别是 应用包名/启动页的Activity及Context,四个参数的构造方法第三个是notification
黄林晴
2019/07/02
7.3K3
IM群聊消息的已读未读功能在存储空间方面的实现思路探讨
以阿里的钉钉为例,钉钉的产品定位是用于商务交流,其“强制已读回执”功能,让职场人无法再“假装不在线”、“假装没收到”。更有甚者,钉钉的群聊“强制已读回执”功能,甚至能够知道谁读了消息,谁没有读消息(老板的福音啊)。
JackJiang
2020/07/02
6K2
Python小程序,你有TA的一条未读消息
Python作为一个功能强大的编程语言,能用到的场景十分之多。这个系列旨在抓住奇思妙想,和严谨的代码结合,碰撞出火花。
HuangWeiAI
2019/08/06
1.2K0
Python小程序,你有TA的一条未读消息
史上最详细仿QQ未读消息拖拽粘性效果的实现
好久没写文章了,前段时间由于项目代码重构忙了一段时间,现在终于有点时间了就为大家带来一篇关于动画学习的自定义View:类似QQ消息拖拽的效果。
Android技术干货分享
2019/08/21
8470
史上最详细仿QQ未读消息拖拽粘性效果的实现
Android自定义View之仿QQ未读消息拖拽效果
绘制以上两条贝塞尔曲线和直线需要五个点:P1,P2,P3,P4,M,其中P1,P2,P3,P4是圆的切点,现在只知道两个圆的中心圆点O1和O2,那么怎么根据这两个点来求其余四个圆的切点呢?先分析:
Rouse
2019/07/17
1.9K1
Android自定义View之仿QQ未读消息拖拽效果
Android中为图标加上数字--用于未读短信数提醒,待更新应用数提醒等
在我们开发一些如短消息、应用商店等应用时,会考虑在短消息的图标上加上未读短信的数量,在应用商店上加上可以升级的应用数量,这样不占太大空间还能达到提示的目的。
飞雪无情
2018/08/28
1.7K0
Android中为图标加上数字--用于未读短信数提醒,待更新应用数提醒等
消息未读之点不完的小红点(Node+Websocket)
这个项目本来是我学生时代为了找工作的一个练手项目,但是没想到受到了很多的关注,star也快要破K了,这也激励着我不断去完善他,一方面是得对得起关注学习的人,另一方面也是想让自己能过通过慢慢完善一个项目来让自己提高。
秋风的笔记
2020/10/27
2.3K0
消息未读之点不完的小红点(Node+Websocket)
读《Bookdown》
R语言是主要在学术界用的编程语言,写作是其内涵之义,于是有了 RMarkdown。基于RMarkdown语法yihui进一步扩张了RMarkdown的应用,于是有了bookdown及其plus,以及blogdown。字面意思,前者是用来写书的后者是用来写博客的。每一个喜欢R语言不巧又同时喜欢写作的人,遇到这两个包都会有抑制不住的好奇心。余,概莫能外。
生信菜鸟团
2022/05/24
7860
读《Bookdown》
读SPEF
SPEF 全称 Standard Parasitic Exchange Format 是IEEE 标准,最新的标准号是:IEEE Std 1481– 2009. 用于描述芯片中的『连线特性』,即:电阻,电容,电感。SPEF 在数字实现流程中用于『连线特性』在不同工具之间的传递。
老秃胖驴
2020/06/01
3.2K1
读SPEF
快读
用于:在某些题中,由于数据范围太大到时W,然后这个时候加上个快读就会使代码死而复生!!!!
杨鹏伟
2020/09/11
5890
未读消息(小红点),前端 与 RabbitMQ 实时消息推送实践,贼简单~
前几天粉丝群里有个小伙伴问过:web 页面的未读消息(小红点)怎么实现比较简单,刚好本周手头有类似的开发任务,索性就整理出来供小伙伴们参考,没准哪天就能用得上呢。
程序员小富
2020/09/10
2.1K0

相似问题

Microsoft :每个用户的读/未读状态

12

FB PHP SDK将未读消息状态更改为已读并统计未读消息

10

获取电子邮件未读内容,不影响未读状态

60

显示未读/已读邮件

12

jQuery -读和未读项目

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文