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

Outlook邮件任务:如何获取发件人姓名(FROM Name)填充至正文?

解决Outlook中获取发件人姓名(任务分配对象)的问题

我之前也踩过这个坑!Outlook的MailObj.SenderName属性确实有反直觉的行为——在回复邮件时,它返回的是当前邮件的收件人(也就是你自己),而不是你需要的任务分配对象(原始邮件的发件人)。下面是我亲测有效的解决方案:

问题根源

Outlook的SenderName属性逻辑是:

  • 对于新创建的邮件:返回当前发件人(你自己),符合预期;
  • 对于回复/转发的邮件:返回的是原始邮件的收件人(也就是现在回复操作的发起者),这就是为什么你拿到的是收件人姓名,而不是任务分配对象的原因。

正确的获取方式

我们需要区分邮件类型,针对回复/转发邮件,去读取原始邮件的发件人信息:

VBA代码示例

Sub InsertTaskAssigneeName()
    Dim currentMail As MailItem
    Set currentMail = Application.ActiveInspector.CurrentItem
    
    Dim assigneeName As String
    assigneeName = ""
    
    On Error Resume Next ' 防止原始邮件为空的情况
    If currentMail.Class = olMail Then
        ' 判断是否为回复/转发邮件
        If currentMail.ReplyRecipients.Count > 0 Or currentMail.Forwarded Then
            Dim originalMail As MailItem
            Set originalMail = currentMail.OriginalItem
            If Not originalMail Is Nothing Then
                assigneeName = originalMail.SenderName
            End If
        Else
            ' 新邮件直接取当前发件人
            assigneeName = currentMail.SenderName
        End If
    End If
    On Error GoTo 0
    
    ' 将姓名插入邮件正文开头
    If assigneeName <> "" Then
        currentMail.Body = "任务分配对象:*" & assigneeName & "*" & vbCrLf & vbCrLf & currentMail.Body
    End If
End Sub

额外注意事项

  • 如果你的场景是通过规则自动处理邮件,同样可以用OriginalItem来获取原始发件人,逻辑和上面一致;
  • 若遇到外部邮件(发件人不在你的组织地址簿),SenderName依然能正确显示对方的名称,无需额外处理;
  • 建议测试不同场景:新邮件、回复内部邮件、回复外部邮件、转发邮件,确保逻辑覆盖所有情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:18:53