Outlook VBA自动处理邮件

2023-11-11

需求描述

公司里面每天都会有很多邮件,三分之一都是不需要看的,Outlook的过滤功能不错,都可以处理掉。还有些邮件,根据正文或者附件做一下处理自动转发出去就行了。于是上网搜集了一些资料,写个了小程序,共享一下,以后可以参考,也希望对大家有点用处。

实现

废话少说,直接上代码吧。打开Outlook,按Alt+F11打开代码编辑器,输入下面的代码。可能有些兄弟不知道怎么入手,后面会放几个链接做参考。

Sub AutoResponseReceipt(item As MailItem)
    Debug.Print ("receive an email")

    Dim id As String
    Dim SubjectString As String
    Dim sender As String
    Dim email As Outlook.MailItem

    On Error GoTo Err

    id = item.EntryID                   ' 先获取邮件的ID
    Set email = Application.Session.GetItemFromID(id)
    SubjectString = email.subject       ' 邮件主题
    sender = email.SenderEmailAddress   ' 邮件的发送人地址
    Debug.Print ("new email arrivaved: subject is " & SubjectString & "  sender is " & sender)

    ' 校验主题,这里是对主题做过滤,不合适的直接返回不处理
    Dim index As Integer
    index = InStr(SubjectString, "小票")
    If 0 = index Then
        index = InStr(SubjectString, "receipt")
        If 0 = index Then
            Return
        End If
    End If

    ' 下面这一段是我自己的一些处理逻辑,调用程序处理附件,
    ' 然后将程序处理后的结果当做附件转发给另一个人

    ' 获取附件并执行小票生成程序
    Dim PathPrefix As String
    PathPrefix = "E:\document\receipt_tool\"
    Dim InputFileList As New Collection         ' 这个列表存放收到的附件
    Dim OutputFileList As New Collection        ' 存放程序生成的结果
    Dim AttachFile As attachment                ' 附件

    For Each AttachFile In email.attachments    ' email.attachments是所有附件
        Debug.Print ("attachment: " & AttachFile.FileName)

        Dim InputFile As String
        Dim OutputFile As String
        InputFile = PathPrefix & AttachFile.FileName
        OutputFile = PathPrefix & AttachFile.FileName & ".docx"
        Debug.Print ("input file is " & InputFile)
        Debug.Print ("output file is " & OutputFile)

        AttachFile.SaveAsFile (InputFile)       ' 保存附件
        Dim cmd As String
        cmd = """" & PathPrefix & "receipt.exe" & """" & " " & InputFile & " " & OutputFile
        Debug.Print ("command string: " & cmd)
        Shell (cmd)                             ' 执行脚本,生成结果
        InputFileList.Add (InputFile)
        OutputFileList.Add (OutputFile)

        'Kill (InputFile)   ' 这里删除的话总会把生成的文件同时删掉
    Next

    If OutputFileList.Count = 0 Then
        Debug.Print ("no attachment")
    End If

    ' 转发邮件
    Dim OutMail As Object
    Set OutMail = Outlook.Application.CreateItem(olMailItem)
    With OutMail
        .To = "hnwyllmm@126.com"                ' 要转发邮件的收件人地址
        .subject = "打印:" & email.subject     ' 转发邮件的主题
        .Body = "帮忙打印小票,谢谢!" & Chr(10) & email.SenderEmailAddress & Chr(10) & email.SenderName ' 转发邮件的正文
    End With

    Dim SendAttach As String                    ' 将程序生成的结果添加到附件中
    For i = 1 To OutputFileList.Count
'            MsgBox (SendAttach)
        SendAttach = OutputFileList(i)
        OutMail.attachments.Add (SendAttach)
    Next
    MsgBox ("send")
    OutMail.Send                                ' 发送邮件
    OutMail.Delete                              ' 删除邮件,没用了

Err:
    ' 删除生成的文件
    For i = 1 To OutputFileList.Count
        Kill (OutputFileList(i))
    Next

    For i = 1 To InputFileList.Count
        Kill (InputFileList(i))
    Next

    email.Delete                                ' 删除收到的邮件

    ' 下面几个是释放对象,其实没有也无所谓
    Set InputFileList = Nothing
    Set OutputFileList = Nothing
    Set OutMail = Nothing

End Sub

编辑完保存,在”开始->规则->创建规则”中添加一个过滤规则,在”如何处理该邮件”中选择运行脚本,并选择这个脚本。

参考链接

1 Visual Studio 2013 MSDN首页
2 MSDN:Outlook VBA入门教程
3 Outlook VBA教程
4 Outlook 文件夹定义

另外,在MSDN上可以直接搜索想要查看的对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Outlook VBA自动处理邮件 的相关文章

  • 使用 VSTO 更改 Outlook 设置

    我刚刚花了大约 4 个小时试图弄清楚如何以编程方式检索 设置 Microsoft Outlook 2010 的 Outlook 设置 我所说的 设置 是指文件 选项 邮件下的设置 我想做的是检索用户设置的设置列表 自动化我们每天需要在某些消
  • 如何将工作表和范围作为变量传递?

    我想在子例程之间传递工作表的名称和范围 以下抛出 下标超出范围 错误 Sub This x Sheet1 y D3 MsgBox x Range y Value End Sub This is 我的项目资源管理器的示例 https i st
  • 将不连续范围从一张纸复制到另一张纸

    VBA 新手 也是第一次发帖 可能会问一个非常基本的问题 然而 我在互联网上 或在我拥有的参考书中 没有找到答案 所以我很困惑 如何将一张纸中的一堆间隔开的列放入另一张纸中 但没有间隙 例如 我想从这样的工作表中复制标记为 x 的单元格 x
  • 两个数组相乘 - 区域小数分隔符问题

    Background 刚才 我回答了一个问题 我必须将两个相同大小的数组相乘 但是我注意到我的本地小数分隔符存在一个特殊问题 Sample Code Sub Sample Dim arr1 As Variant arr2 As Varian
  • 从 Excel 数据为列中的每个不同值创建 CSV 文件?

    我有一个 Excel 其供应商代码 数字 作为其中一列 VENDORITEM DESCRIPTION PRICE PRICEGROUP VENDOR NUMBER PRODUCT CATEGORY HNM36789 30ML FLUID C
  • Outlook 2007 捕获 ReplyToAll 事件的共享加载项

    我正在使用 VS 2010 和 Dot Net Framework 2 0 我已在 扩展性 gt Outlook 共享加载项 中创建了一个项目 我正在尝试捕获 ReplyToAll 事件 但它没有被解雇 请看下面的代码 连接方法 inspe
  • vba - 扫描文档中的宏并替换宏文本?

    我面临一个谜题 我工作的地方有大量的 Word 模板 它们都包含一个包含一些错误的自动新建事件句柄 这个错误存在于所有模板中 我想知道是否有一种方法可以扫描包含此宏的模板的目录并稍微更改宏代码 这可能吗 是的 你可以这么做 您可以使用以下方
  • 在 Access VBA 中获取 Combobox.Value

    我有这个代码 If Me Combobox Value My Text Then 然而 由于我想测试 我的文本 是否是唯一选择的值 因此跳过了条件 我也尝试过 Me Combobox Column 1 and Me Combobox Tex
  • 雅虎财经历史股价动力查询返回301响应

    直到今天我的 Excel 2016 power query 都能够从以下 URL 获取历史股票定价数据https finance yahoo com quote AAL history p AAL https finance yahoo c
  • 在Excel中过滤后打印可见区域的宏

    我有一个根据过滤表的宏column A价值观 现在我想打印only过滤器后的可见行 但遗憾的是它打印了所有行 包括过滤期间隐藏的顶部和底部行 在我的工作表中 有来自的数据Column A I 但打印区域只能是Columns C I 过滤后的
  • Excel 公式或 VBA:在具有 2 列条件的单独表中查找匹配的地址 - 无辅助列

    我需要公式结构方面的帮助 我有2张桌子 我想找到 a 列和 b 列相等的匹配项并获取表 2 中的地址 它们将是唯一的条目 例如 项目信息表 A B C 1 Name Company Project 2 Chris Evans Apple I
  • 根据不同的列数据范围隐藏行

    我对使用 VBA 相当陌生 我正在尝试创建一个代码 该代码将查看具有不同数据范围的两个不同列 并隐藏最后一个数据点之外的行 引用两列 目前我有这个 Private Sub Worksheet PivotTableUpdate ByVal T
  • 在 Excel 中的文件夹内的所有文件上添加一列

    我在一个文件夹内有 250 个不同的 excel 文件 具有相同的布局 其中包含列A to F 我需要在列上添加新列G 传统的方法是打开每个文件并在以下位置添加新列G 有没有使用 Excel 宏或任何其他工具的简单过程来完成此任务 这个链接
  • 使用 VBA 从数据透视表中提取数据

    我编写了以下 vba 代码 该代码应该从 old xlsx 的某些单元格导入任何现有数据 这些单元格是数据透视表的一部分 并且 OE gt location gt qual in 作为其行的子单元格 该列由手动输入的日期决定 strForm
  • 我可以使用 VBA 将密码“传递”到 Excel 中的外部数据库连接吗?

    我正在尝试使用 VBA 隐藏我在 Excel 工作表中设置的数据连接的密码 由于 Excel 以纯文本形式存储外部数据源的密码 因此我想让 VBA 调用表的刷新并提供密码 我录制了刷新表格并输入密码的宏 但令我沮丧的是 它似乎省略了密码部分
  • 是否有任何公式可用于将特定单元格复制指定次数?

    目前我正在处理一份数据 其中我有一个公司名称列表 例如 1 A 2 B 3 C 还有很多 需要的结果是 1 A 2 A 3 A 4 A 5 A 6 B 7 B 8 B 9 B 10 B 11 C 12 C 13 C 14 C 15 C 等等
  • 使用 VBA 在 Access 表中记录计数

    我正在尝试获取表的记录数 如果计数大于 17 则创建一个新表 Dim rst As DAO Recordset strSQL Select from SKUS Set rst db OpenRecordset strSQL If rst R
  • Excel VBA 用户窗体 - 当发生变化时执行 Sub

    我有一个包含很多文本框的用户表单 当这些文本框的值发生变化时 我需要通过调用子例程 AutoCalc 根据文本框值重新计算最终结果值 我有大约 25 个框 我不想向每个调用上述子例程的文本框单独添加 Change 事件 当某些值发生变化时调
  • 如果一个数字写在方括号中,例如[5],这意味着什么

    我正在开发一个旧版 VBA Excel 应用程序 并偶然发现了一些代码行 其中长字符串 从文件中读取 被切成碎片 这些行看起来像这样 Range E16 Value Mid line 49 6 显然 写 6 意味着需要 6 个字符 但我从未
  • VBA全局类变量

    我的障碍是试图让多个子程序识别类变量 当我尝试全局声明它们时 出现编译错误 无效的外部过程 然后 当我运行公共函数或子函数来声明变量时 它们在其他子函数中保持未定义状态 我希望多个子程序能够识别变量 因为它们的值应该通过用户窗体进行更改 然

随机推荐

  • 四均线交易系统

    策略说明 基于4均线系统进行判断交易 系统构成 5和20周期均线 3和10周期均线 构成的两组不同周期的均线组合 入场条件 当2组均线均成空头排列时且当前价低于上根BAR最低价入场 出场条件 1 小周期空头均线组合成多头排列 2 两组多头均
  • C++ 获取系统时间(微秒)

    int main 程序开始时间 std chrono time point
  • Python制作一款简单的乒乓球小游戏

    开发工具 Python版本 3 6 4 相关模块 pygame模块 以及一些Python自带的模块 相关文件 关注公众号 Python学习指南 回复 乒乓球 即可获取 环境搭建 pip安装需要的相关模块即可 原理简介 游戏规则 操作 玩家1
  • AWS SAA-C03 #49

    A company stores call transcript files on a monthly basis Users access the files randomly within 1 year of the call but
  • 虚拟机磁盘扩容

    1 前言 现在做开发时 虚拟机的使用很多 经常遇到这样的问题 当初创建虚拟机的时候开辟的磁盘空间比较小 随着虚拟机安装的软件越来越多所占的空间也越来越大 导致虚拟机的磁盘空间越来越少 甚至不够用 此时我们便可以对虚拟机的磁盘大小进行扩容 简
  • 中秋闲鱼卖货,月入过万的新玩法?

    中秋节越来越近了 都开始忙着走亲串友 人情社会关系要多走动 虽然大家都在忙着搞钱 但是逢年过节要停下脚步享受美好生活 月圆中秋思念满满每逢佳节倍思亲 在异国他乡的朋友因疫情不能回家团聚 但现在移动互联网给人们生活带来太多便捷 打电话语音视频
  • 获得用户输入的一个字符串,输出其中字符a的出现次数

    task19 获得用户输入的一个字符串 输出其中字符a的出现次数 name wangzilu date 2020 2 19 task 获得用户输入的一个字符串 输出其中字符a的出现次数 first way x str input pleas
  • shell 重定向到文件

    首先明确基本 gt dev null 输出到空设备 表示丢掉输出信息 2 gt 1 将输出到标准错误的信息输出到标准输出设备 通常是屏幕 有3个默认的i o 0 是标准输入 一般是键盘 1 是标准输出 一般是屏幕了 2 是标准错误 有时候屏
  • 编程笔记:Windows Forms in C#

    1 画线时遇到的奇怪问题 以下摘取部分代码 Graphics g null g CreateGraphics private void Form1 MouseMove object sender MouseEventArgs e 下面三行代
  • 第七章、并发编程实战项目

    一 并发任务执行框架 架构师是什么 在一个软件项目开发过程中 将客户的需求转换为规范的开发计划及文本 并制定这个项目的总体架构 指导整个开发团队完成这个计划的那个人 就是 架构师 一般是一个项目里的最资深的专业技术人员 可以说架构师首先一定
  • 【SDOI2016】数字配对【建立二分图+费用流求方案数】

    题目链接 首先 我们可以看一下这个推导过程 如果 那么 对于 就一定不是质数 一定是它的一个因子 于是可以看出 这一定是一幅二分图 于是 可以根据二分图的性质来确定了每个点的属于S边还是T边了 include
  • 《深入理解mybatis原理》 MyBatis事务管理机制

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net u010349169 article details 37992171 MyBatis作为Java语言的数据库框架 对数据库的事务管理是其非常重要的
  • 在手机端点击input框不弹出输入法的方法

    1 使用CSS样式 input pointer events none 2 使用事件阻止 input onmousedown function e e preventDefault 这样不仅会阻止键盘 同时 input 会失去光标跟随 如果
  • 通俗易懂的LSTM

    目录 一 LSTM的基础知识 1 长依赖的问题 2 LSTM的核心 3 LSTM的门结构 4 LSTM门结构的作用 5 LSTM的变体 GRU 二 LSTM的补充知识 1 LSTM缓解梯度消失的原因 一 LSTM的基础知识 1 长依赖的问题
  • Python OpenCV 解决人脸识别报错cascade.detectMultiScale error

    Authored by Monana Contact me via serena9636 163 com 环境 Python2 7 OpenCV3 1 0 Win 64bit 我想在OpenCV中实现一段如下的很简单的人脸识别代码 这也是在
  • vsCode返回上一步

    vsCode返回上一步 windows Alt 上下左右的左箭头 Linux Ctrl Alt 减号
  • 图像信噪比的理解

    图像的信噪比和图像的清晰度一样 都是衡量图像质量高低的重要指标 图像的信噪比是指视频信号的大小与噪波信号大小的比值 其公式为 S N 信噪比 20 log 信号 噪声 dB 信噪比大 图像画面就干净 看不到什么噪波干扰 表现为 颗粒 和 雪
  • 使用VMware完成KVM虚拟化实验并运行Centos

    本次实验在VMware中的Ubuntu18内安装KVM并运行centos 首先 在VMware下开启虚拟化 更新软件索引 apt get update 安装依赖 apt get install qemu kvm qemu virt mana
  • js验证姓名,包括少数民族名字中的·,后你哦·就两节课了

    姓名验证 u4E00 u9FA5 uf900 ufa2d s 2 20 亲测
  • Outlook VBA自动处理邮件

    需求描述 公司里面每天都会有很多邮件 三分之一都是不需要看的 Outlook的过滤功能不错 都可以处理掉 还有些邮件 根据正文或者附件做一下处理自动转发出去就行了 于是上网搜集了一些资料 写个了小程序 共享一下 以后可以参考 也希望对大家有