You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBScript实现Outlook首封未读邮件属性提取与脚本优化

修改后的完整代码
Set FSO = CreateObject("Scripting.FileSystemObject")
dim mail, olMSGUnicode, subject, saveFolder, senderAddress, senderName, emailSubject
dim dd, mm, yy, datevalue, dtsnow, intCount, i, fileName, newFileName, fullSavePath
' 读取传入参数
subject = WScript.Arguments.Item(0)
saveFolder = WScript.Arguments.Item(1)
' 补全保存目录末尾的反斜杠,避免路径拼接错误
If Right(saveFolder, 1) <> "\" Then saveFolder = saveFolder & "\"

' 生成日期戳
dtsnow = Now()
dd = Right("00" & Day(dtsnow), 2)
mm = Right("00" & Month(dtsnow), 2)
yy = Year(dtsnow)
datevalue = dd & mm & yy

Set app = CreateObject("Outlook.Application")
Set ns = app.GetNamespace("MAPI")
Set mf = ns.GetDefaultFolder(6) ' 6对应收件箱
Set mailItems = mf.Items
' 按接收时间倒序,优先处理最新收到的未读邮件
mailItems.Sort "ReceivedTime", True

' 仅处理第一封未读邮件
For Each mail In mailItems
    If mail.Unread Then
        ' --------------------------
        ' 需求1:获取发件人信息
        ' --------------------------
        emailSubject = mail.Subject
        If mail.SenderEmailType = "EX" Then
            ' Exchange内部用户
            Set exchUser = mail.Sender.GetExchangeUser()
            If Not exchUser Is Nothing Then
                senderAddress = exchUser.PrimarySmtpAddress
                senderName = exchUser.Name
            Else
                senderAddress = mail.SenderEmailAddress
                senderName = mail.SenderName
            End If
        Else
            ' 外部邮箱用户
            senderAddress = mail.SenderEmailAddress
            senderName = mail.SenderName
        End If

        ' --------------------------
        ' 需求2:输出发件人、邮件基础信息
        ' --------------------------
        WScript.StdOut.WriteLine "SenderAddress:" & senderAddress
        WScript.StdOut.WriteLine "SenderName:" & senderName
        WScript.StdOut.WriteLine "EmailSubject:" & emailSubject

        ' 处理附件
        intCount = mail.Attachments.Count
        If intCount > 0 Then
            For i = 1 To intCount
                fileName = mail.Attachments.Item(i).DisplayName
                newFileName = datevalue & "_" & fileName
                fullSavePath = saveFolder & newFileName
                mail.Attachments.Item(i).SaveAsFile fullSavePath
                ' 输出每个附件的保存路径
                WScript.StdOut.WriteLine "SavedAttachment:" & fullSavePath
            Next
        Else
            WScript.StdOut.WriteLine "AttachmentCount:0"
        End If

        ' 标记为已读
        mail.Unread = False
        ' --------------------------
        ' 需求3:处理完第一封直接退出循环
        ' --------------------------
        Exit For
    End If
Next

Set FSO = Nothing
Set app = Nothing
Set ns = Nothing
改动说明
  • 适配需求1:新增发件人类型判断逻辑,Exchange内部用户会自动读取SMTP邮箱地址和AD显示名,外部发件人直接读取邮箱地址和发件人显示名,兼容两种发件人场景。
  • 适配需求2:新增多维度结构化输出,包括发件人邮箱、发件人名称、邮件主题、每个附件的完整保存路径,输出格式统一为字段名:值,自动化工具可以直接按分隔符拆分提取内容。
  • 适配需求3:新增邮件按接收时间倒序排序逻辑,找到最新的第一封未读邮件处理完成后直接退出循环,每次调用脚本仅处理1封邮件,适配全天间歇性收发的使用场景。
  • 额外优化了路径拼接逻辑,自动补全保存目录末尾的反斜杠,避免参数传入时少写反斜杠导致的路径错误。

内容的提问来源于stack exchange,提问作者nouptime

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 21:18:03