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
相关产品推荐
相关产品推荐

