Определите вложения MS Excel или MS Access и предупредите о проверке содержимого

Личная идентификационная информация (PII) часто непреднамеренно передается через незашифрованные электронные письма. В большинстве случаев эти данные хранятся в электронных таблицах Excel или Access.

Я хотел бы идентифицировать вложения Access или Excel после нажатия кнопки «Отправить» и спросить «К этому письму прикреплены файлы Access или Excel, вы уверены, что они не содержат PII?»

Я просто не понимаю критериев определения "xlsx" или "accdb" в имени вложения.

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

If Right([attachment_Name],4) = xlsx then

    answer = MsgBox("There are Access or Excel files attached to this email, are you sure these do not contain PHI?",vbYesNo)

    If answer = vbNo 
        Cancel = True
    Else

    End If

End If

End Sub

person brasks    schedule 13.02.2015    source источник
comment
Интересно, что базы данных Access отправляются по электронной почте. Хотя Access является базой данных файлового сервера по сравнению со своими аналогами клиент-сервера (SQL Server, MySQL, Oracle и т. д.), он по-прежнему представляет собой многопользовательское приложение, предназначенное для работы в сети, и его не следует рассматривать как документ с плоским файлом, например электронная таблица. Кроме того, файлы mdb/accdb могут расширяться больше, чем пределы вложений электронной почты, для чего могут потребоваться zip-файлы.   -  person Parfait    schedule 16.02.2015
comment
Доступ не должен отправляться по электронной почте. При попытке его должен сказать что-то вроде: Этот элемент содержит вложения, которые потенциально небезопасны..yada.yada.yada. Вы все равно хотите отправить? Когда я отправляю его, приходит электронное письмо с удаленным вложением и сообщением о том, что Outlook заблокировал доступ к следующим потенциально небезопасным вложениям: Это всего лишь Outlook, поэтому с другими почтовыми приложениями может быть по-другому.   -  person Darren Bartrup-Cook    schedule 06.12.2017


Ответы (2)


Вот код, который вы ищете:

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

Dim bolSensitiveAttach As Boolean
Dim answer As Double

Set Msg = Item

bolSensitiveAttach = False
If Msg.Attachments.Count > 0 Then
    For i = 1 To Msg.Attachments.Count
         If Right(Msg.Attachments(i).FileName, 3) = "xls" Or  _
                Left(Right(Msg.Attachments(i).FileName, 4), 3) = "xls" Or _
                Right(Msg.Attachments(i).FileName, 5) = "accdb" Or _
                Right(Msg.Attachments(i).FileName, 3) = "mdb" Then  
                     bolSensitiveAttach = True
         End If

    Next i
End If

If bolSensitiveAttach = True Then
    answer = MsgBox("There are Access or Excel files attached to this" _
                 & "mail, are you sure these do not contain PHI?", vbYesNo)
    If answer = vbNo Then
        Cancel = True
    End If
End If

End Sub

Надеюсь это поможет.

ОТРЕДАКТИРОВАНО ДЛЯ ВКЛЮЧЕНИЯ расширения .mdb и расширений xls* (xlsm, xlsx...) вместо xlsx. Спасибо за предложение, Парфе.

person OpiesDad    schedule 13.02.2015
comment
Рассмотрите возможность добавления более старой версии файла Access mdb, поскольку вы используете более старую версию Excel xls. - person Parfait; 16.02.2015
comment
Вы можете игнорировать =TRUE в выражении IF. bolSensitiveAttach само по себе ИСТИНА/ЛОЖЬ, поэтому вы говорите IF TRUE = TRUE THEN. Я предпочитаю называть свои переменные чем-то вроде ContainsSensitiveAttach. Затем вы можете написать IF ContainsSensitiveAttach THEN, что звучит почти как английский. - person Darren Bartrup-Cook; 06.12.2017

Вы можете использовать FileSystemObject для получения расширения:

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

    Dim olAtt As Attachment
    Dim oFSO As Object
    Dim sExt As String
    Dim bSafe As Boolean

    If Item.Attachments.Count > 0 Then
        bSafe = True
        Set oFSO = CreateObject("Scripting.FileSystemObject")
        For Each olAtt In Item.Attachments
            sExt = oFSO.GetExtensionName(olAtt.FileName)
            If sExt Like "xls*" Or sExt Like "accd*" Or sExt = "mdb" Then
                bSafe = False
                Exit For
            End If
        Next olAtt

        If Not bSafe Then
            If MsgBox("This email contains an Access or Excel file." & vbCr & _
                      "Do you wish to continue?", vbCritical + vbYesNo) = vbNo Then
                Cancel = True
            End If
        End If

        Set oFSO = Nothing

    End If
End Sub  

Я включил для доступа, но уверен, что по умолчанию он не отправляется.

person Darren Bartrup-Cook    schedule 06.12.2017