Împiedicați în mod condiționat Outlook să trimită e-mail pe baza adreselor de la și destinatarului

Am mai multe conturi de e-mail configurate în Outlook 2007 (de exemplu, [email protected], [email protected] etc.). Ocazional, de obicei, ca rezultat al funcției de completare automată, voi trimite din greșeală e-mail de la [email protected] unui destinatar care ar trebui să primească e-mail doar de la [email protected]).

Aceste restricții între adresele de e-mail de la (contul meu de e-mail selectat) și destinatar (Către sau CC) pot fi definite în general prin numele domeniului.

De exemplu, [email protected] nu ar trebui să trimită către destinatar-domainX.com și recipient-domainY.com. Și [email protected] nu ar trebui să trimită către destinatar-domain1.com și recipient-domain2.com.

Deci, ar fi bine să definiți în mod explicit sau să „codați” aceste restricții de domeniu per cont de e-mail într-un script VBA sau fișier text.

Deci, cum, folosind VBA sau alte mijloace, pot implementa o verificare a adreselor de e-mail, pentru a preveni trimiterea unui e-mail dacă una dintre aceste restricții este încălcată.

Deschis și către alte soluții mai elegante.

Mulțumiri.


person splounx    schedule 08.04.2011    source sursă


Răspunsuri (2)


Acest lucru vă permite să filtrați e-mailurile după adresă. Nu pot revendica prea mult credit pentru asta, sunt în mare parte mai multe coduri diferite postate online fuzionate într-unul singur. Indiferent, funcționează solid și ar trebui să te ducă la jumătatea drumului unde vrei să fii. Acesta este folosit în compania noastră pentru a trimite toate e-mailurile trimise extern într-un folder public HR Reviews.

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    If Item.Class <> olMail Then Exit Sub
    Dim objMail As MailItem
    Set objMail = Item
    Dim NotInternal As Boolean
    NotInternal = False
    Dim objRecip As Recipient
    Dim objTo As Object
    Dim str As String
    Dim res As Integer
    Dim strBcc As String
    On Error Resume Next
    Const PidTagSmtpAddress As String = "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"
    Dim i As Integer
    Dim objRecipColl As Recipients
    Set objRecipColl = objMail.Recipients
    Dim objOneRecip As Recipient
    Dim objProp As PropertyAccessor
    For i = 1 To objRecipColl.Count Step 1
        Set objOneRecip = objRecipColl.Item(i)
        Set objProp = objOneRecip.PropertyAccessor
        str = objProp.GetProperty(PidTagSmtpAddress)
        If Len(str) >= 17 Then  'Len of email address screened.  
            If UCase(Right(str, 17)) <> "@COMPANYEMAIL.COM" Then NotInternal = True
        Else
            NotInternal = True
        End If
    Next
    If NotInternal = True Then
        strBcc = "[email protected]"
        Set objRecip = objMail.Recipients.Add(strBcc)
        objRecip.Type = olBCC
            If Not objRecip.Resolve Then
                strMsg = "Could not resolve the Bcc recipient. " & _
                         "Do you still want to send the message?"
                res = MsgBox(strMsg, vbYesNo + vbDefaultButton1, _
                        "Could Not Resolve Bcc Recipient")
                If res = vbNo Then
                    Cancel = True
                End If
            End If
    End If
    Set objRecipColl = Nothing
    Set objRecip = Nothing
    Set objOneRecip = Nothing
    Set objMail = Nothing
    Set objTo = Nothing
    Set oPA = Nothing
End Sub
person Ken    schedule 22.07.2011

Am modificat codul pentru a fi puțin mai ușor de citit, efectiv același cod doar puțin mai ordonat.

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

If Item.Class <> olMail Then Exit Sub

Dim sCompanyDomain As String: sCompanyDomain = "companydomain.com"

Const PidTagSmtpAddress As String = "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"

On Error Resume Next
Dim oMail As MailItem: Set oMail = Item
Dim oRecipients As Recipients: Set oRecipients = oMail.Recipients
Dim bDisplayMsgBox As Boolean: bDisplayMsgBox = False

Dim sExternalAddresses As String
Dim oRecipient As Recipient

For Each oRecipient In oRecipients

    Dim oProperties As PropertyAccessor: Set oProperties = oRecipient.PropertyAccessor
    Dim smtpAddress As String: smtpAddress = oProperties.GetProperty(PidTagSmtpAddress)

    Debug.Print smtpAddress

    If (Len(smtpAddress) >= Len(sCompanyDomain)) Then

        If (Right(LCase(smtpAddress), Len(sCompanyDomain)) <> sCompanyDomain) Then

            ' external address found
            If (sExternalAddresses = "") Then

                sExternalAddresses = smtpAddress

            Else

                sExternalAddresses = sExternalAddresses & ", " & smtpAddress

            End If

            bDisplayMsgBox = True

        End If

    End If

Next

If (bDisplayMsgBox) Then

    Dim iAnswer As Integer
    iAnswer = MsgBox("You are about to send this email externally to " & sExternalAddresses & vbCr & vbCr & "Do you want to continue?", vbExclamation + vbYesNo, "External Email Check")

    If (iAnswer = vbNo) Then
        Cancel = True
    End If

End If

End Sub
person Abu Belal    schedule 12.07.2013