【问题标题】:Change reply address in Outlook mail更改 Outlook 邮件中的回复地址
【发布时间】:2012-03-04 18:49:25
【问题描述】:

我有一个 Excel 表,其中包含三列员工姓名、电子邮件 ID 和出生日期。

我编写了一个宏,它将员工的出生日期与今天的日期相匹配,它将向员工发送 Outlook 邮件并抄送我的部门。

当所有员工看到该邮件时,他们可以点击回复或回复所有人。

我编写了另一个 Outlook 宏,将收件人地址字段替换为他/她的生日人员电子邮件 ID。

第二个宏正在我的系统上运行任何打开的 Outlook 电子邮件。

因为我有 Outlook 宏,所以我可以执行它,但要在他们需要这个 Outlook 宏的所有员工系统中执行相同的操作。我怎样才能在他们的系统中运行它而不手动将此宏放入他们的系统中?

【问题讨论】:

  • 如果行首有空格,则该行被格式化为代码。我已删除空格,以便阅读您的问题。

标签: vba outlook


【解决方案1】:

以下代码假定 ObjMail 是您正在创建的邮件。

' Delete any existing reply recipients
Do While ObjMail.ReplyRecipients.Count > 0
  ObjMail.ReplyRecipients.Remove 1
Loop

' Add the new recipient
ObjMail.ReplyRecipients.Add "BirthdayPerson@isp.com"

' Send blind copy to other staff members
ObjMail.BCC = "Staff1.isp.com, Staff2.isp.com, Staff3.isp.com" 

发送给员工的消息会说它来自发送生日消息的人。但如果有人回复,收件人将是“BirthdayPerson@isp.com”。

我已将密件副本发送给其他工作人员。这不是因为员工名单是秘密的,而是因为:

  • 如果您有 500 名员工,每个地址平均包含 20 个字符,则使用抄送将为 500 条消息中的每条添加 10,000 个字符。
  • 它可以防止员工在添加他们最好的祝福时使用“全部回复”来保存另外 500 * 500 条消息。
  • 如果您希望填写公司的服务器,请使用 ObjMail.CC。

我担心消息的大小,因为多年前我曾在英国 NHS 工作,该机构有数千名员工分散在全国各地。一家小医院的某个人试图在医院内为他的自行车做广告,但设法向全国的每一位员工做广告。我在家工作,拨号速度很慢;下载这条消息花了半个小时。

应要求提供测试例程完整代码的新部分

下面是我用来测试答案的完整例程。它改编自我为另一个答案编写的例程。它会创建一个您可能不想要的 HTML 正文,但会向您展示如果您这样做的话。我已将用于测试的真实电子邮件地址替换为虚拟地址;否则不变。

Sub ReplyToRecipientWithBlindCopies()

  ' Create a mail item with a simple message.
  ' Send the mail item to "BirthdayPerson@isp.com" and make them
  ' the recipient of any replies.
  ' Send blind copies to all other recipients.

  ' Author: Tony Dallimore, York, England

  Dim OlApp As Outlook.Application
  Dim ObjMail As Outlook.MailItem

  Dim MessageBody As String

  ' This creates a blue message on a grey background.  This is a
  ' demonstration of what is possible; not a recommendation!
  MessageBody = "<table width=""100%"" style=""Color:#0000FF;" & _
         " background-color:#F0F0F0;""><tr><td align= ""center"">" & _
         "Happy birthday from all your colleagues!</td></tr></table>"

  Set OlApp = Outlook.Application
  Set ObjMail = OlApp.CreateItem(olMailItem)
  With ObjMail
    .BodyFormat = olFormatHTML
    .Subject = "Happy birthday!"
    .HTMLBody = HeadAndBodyToHtmlDoc("", MessageBody)

    ' Remove any existing recipients
    Do While .Recipients.Count > 0
      .Recipients.Remove 1
    Loop
    ' Remove any existing reply recipients
    Do While .ReplyRecipients.Count > 0
      .ReplyRecipients.Remove 1
    Loop

    ' Add birthday person to Recipient and ReplyRecipient lists
    .Recipients.Add "BirthdayPerson@isp.com"
    .ReplyRecipients.Add "BirthdayPerson@isp.com"

    ' You will need to replace this with a loop
    ' to add all your staff members.
    .BCC = "Staff1@isp.com, Staff2@isp.com, Staff3@isp.com"

    ' Display the prepared messages ready for any final changes.
    ' The user must send it.
    .Display
  End With

End Sub
Function HeadAndBodyToHtmlDoc(Head As String, Body As String) As String

  ' Wrap Head and Body created by caller in a standard envelope.

  ' Author: Tony Dallimore, York, England

  HeadAndBodyToHtmlDoc = _
        "<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Frameset//EN""" & _
        " ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"">" & _
        vbCr & vbLf & "<html xmlns=""http://www.w3.org/1999/xhtml""" & _
        " xml:lang=""en"" lang=""en"">" & vbCr & vbLf & "<head><meta " & _
        "http-equiv=""Content-Type"" content=""text/html; " & _
        "charset=utf-8"" />" & vbCr & vbLf & Head & vbCr & vbLf & _
        "</head><body>" & vbCr & vbLf & Body & "</body></html>"

End Function

【讨论】:

  • 我的答案中的额外部分应该提供您寻求的额外信息。如果我的回答符合您的要求,如果您接受,我将不胜感激。
  • 不,我要问的是那些生日电子邮件将从未知电子邮件发送给所有员工。您编写的代码运行良好,但该宏在我的前景中运行。当他们单击 b'day 电子邮件回复或全部回复按钮时,我需要它在所有员工的前景中工作。为此,我只需要将此代码以宏的形式发送给所有使用自动生成的邮件的员工。我怎样才能用那封电子邮件发送这个宏.......
  • 我不明白。您有一个 Excel 工作簿,其中包含工作人员的姓名、电子邮件地址和生日。你有一个宏,它会在员工生日那天向他们发送一封电子邮件,说“生日快乐!”我已提供信息以允许您对该宏进行小幅改进,因此现在其他工作人员可以单击“回复”并发送消息说“我也祝你生日快乐!”您的宏位于 Excel 工作簿中,并依赖于该工作簿中的信息。您为什么要将该宏通过电子邮件发送给任何人?您需要通过电子邮件发送工作簿。
  • 正如你所说的一切都是正确的,但我在我的 excel 工作簿中的宏会向所有员工发送电子邮件,说明这些员工在这一天过生日。但是现在我有另一个宏,当任何员工点击他收到的电子邮件上的回复按钮时,它会更改回复地址。我在问如何在员工系统中执行第二个宏。
  • 如何分发宏是一个不同的问题。一种可能性是分发代码并让员工自己安装。另一种可能性是让您的 IT 部门在下一次重建时分发它,如果他们以这种方式组织您的软件。我确信还有其他可能性,但这不是我的专业领域,这可能不是 Stack Exchange 最好的部分。
猜你喜欢
  • 2017-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多