【问题标题】:send email to Outlook group EXCLUDING one person向 Outlook 组发送电子邮件,不包括一个人
【发布时间】:2014-03-26 03:38:15
【问题描述】:

我有一个 Access 数据库,我们通过它通过电子邮件将报告发送到 Outlook 电子邮件地址列表。此列表包含电子邮件组。

我希望能够以编程方式向群组发送电子邮件,但不向群组的特定成员发送电子邮件。

很遗憾,此人无法从群组中删除,因为他仍然需要能够接收其他部门通过群组电子邮件发送给他的电子邮件。

此外,我不能简单地将组拆分为组成部分,因为每次将新成员添加到 Outlook 组时,我都无法继续向脚本添加电子邮件。

谁能建议一种方法来狙击发送到 Outlook 组中这个特定地址的电子邮件?

我更喜欢 VBA 解决方案,但也可以使用 PowerShell 来实现。

编辑 - 这是我目前的代码。

这是发送电子邮件的函数:

Function SendEmails(SystemID As String, _
                    DistributionGROUPID As String, _
                    subjectID As String, _
                    EmailIDBody As String, _
                    Optional Attachments As Variant)

    Dim Subject As String
    Dim SendTo As Variant
    Dim CopyTo As Variant
    Dim BlindCopyTo As Variant
    Dim ReplyTo As Variant
    Dim emailBody As String
    Dim Attachement As Variant

    Subject = GetEmailSubject(SystemID, subjectID)
    SendTo = GetEmailAddresses(SystemID, DistributionGROUPID, 1)
    CopyTo = GetEmailAddresses(SystemID, DistributionGROUPID, 2)
    BlindCopyTo = GetEmailAddresses(SystemID, DistributionGROUPID, 3)
    ReplyTo = GetEmailAddresses(SystemID, DistributionGROUPID, 4)
    emailBody = GetEmailBody(SystemID, EmailIDBody)

    If IsArray(Attachments) Then
        Attachement = Attachments
    End If

    ' Call Send Email
    SendMails _
        Subject, _
        Attachement, _
        SendTo, _
        CopyTo, _
        BlindCopyTo, _
        ReplyTo, _
        emailBody

End Function

这是从 Access 表中获取电子邮件地址并将其加载到字符串中的函数。我添加了一条评论,显示我可以在哪里插入一些代码/对一个函数的引用,该函数将打开每个电子邮件地址并确定它是否是一个组。 致那些知道自己在做什么的人 - 这是正确的方法,还是有可能?我会做一些谷歌搜索并尝试偶然发现,但如果有人可以提供解决方案,将不胜感激。

Function GetEmailAddresses(SystemID As String, Business As String, RecipientType As Integer) As Variant

    Dim arr() As String
    Dim lSubject As String
    Dim qdf As QueryDef
    Set qdf = CurrentDb().QueryDefs("qry_Email_Get_Email_Addresses")

    qdf.Parameters(0) = SystemID
    qdf.Parameters(1) = Business
    qdf.Parameters(2) = CDbl(RecipientType)

    Dim RS As Recordset
    Set RS = qdf.OpenRecordset

    If RS.RecordCount = 0 Then

        ReDim arr(1)
        arr(0) = ""

    Else

        RS.MoveLast
        ReDim arr(RS.RecordCount - 1)
        RS.MoveFirst
        Dim offset As Integer
        offset = 0
        Do While Not RS.EOF
        ' change here? open up outlook object, determine if email is a group.
        ' if group, then create inner loop that adds individual emails to 'arr' array, excluding specific address.
            arr(offset) = RS![Email_Address]
            offset = offset + 1
            RS.MoveNext
        Loop

    End If

    RS.Close
    Set RS = Nothing

    GetEmailAddresses = arr

End Function

【问题讨论】:

  • 您在使用 Outlook 对象模型吗?你能展示一些你迄今为止尝试过的代码吗?
  • 好的,请稍等。
  • @roryap - 请查看我的编辑。我错了 - 没有使用 Outlook 对象模型。我们改为使用 CDO 模型。如果您想查看实现 CDO 的方法,请告诉我。

标签: ms-access powershell outlook vba


【解决方案1】:

您可以遍历 AddressEntry.Members 集合并一次只添加您想要的成员,而不是发送到整个 DL。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-10-19
  • 2012-06-24
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
  • 2012-05-18
相关资源
最近更新 更多