Пытаюсь предупредить при отправке из личного почтового ящика - PullRequest
0 голосов
/ 26 мая 2020

Пытаюсь подсказать, если отправка из личного кабинета в Outlook. У меня есть следующее, которое работает 90% времени, однако иногда возникает ошибка со следующим:

Вы не можете отправить элемент, который уже находится в процессе отправки

Код для справки:

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

Dim Send_Address As String
Dim Prompt As String

' Check Send_From name
Send_Address = Item.SendUsingAccount

Select Case Send_Address
    Case "example@domain.uk"
    Case Else

        Prompt = "You are currently sending this email from " & Send_Address & "" & vbNewLine & "Do you want to proceed?"
        If MsgBox(Prompt, vbYesNo + vbQuestion + vbMsgBoxSetForeground, "Check Address") = vbNo Then
            Cancel = True
        End If

End Select

End Sub

1 Ответ

0 голосов
/ 26 мая 2020

Невозможно преобразовать экземпляр класса Account в строку:

Dim Send_Address As String
Dim Prompt As String

' Check Send_From name
Send_Address = Item.SendUsingAccount

Свойство SendUsingAccount возвращает или устанавливает объект Account, представляющий учетную запись, под которой MailItem должен быть отправлен. Свойство SendUsingAccount можно использовать для указания учетной записи, которая должна использоваться для отправки MailItem при вызове метода Send. Это свойство возвращает Null (Nothing в Visual Basi c), если учетная запись, указанная для MailItem, больше не существует. Например, вот пример использования:

Sub SendUsingAccount() 
 Dim oAccount As Outlook.account
 For Each oAccount In Application.Session.Accounts
 If oAccount.AccountType = olPop3 Then 
 Dim oMail As Outlook.MailItem 
 Set oMail = Application.CreateItem(olMailItem) 
     oMail.Subject = "Sent using POP3 Account" 
     oMail.Recipients.Add ("someone@example.com") 
     oMail.Recipients.ResolveAll 
 Set oMail.SendUsingAccount = oAccount 
     oMail.Send 
 End If 
 Next 
End Sub

Итак, чтобы проверить SMTP-адрес, вам необходимо использовать следующий код:

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim account as Outlook.Account
Dim Send_Address As String
Dim Prompt As String

' Check Send_From name
Set account = Item.SendUsingAccount

If Not account Is Nothing then 

   Send_Address = account.SmtpAddress

Select Case Send_Address
    Case "example@domain.uk"
    Case Else

        Prompt = "You are currently sending this email from " & Send_Address & "" & vbNewLine & "Do you want to proceed?"
        If MsgBox(Prompt, vbYesNo + vbQuestion + vbMsgBoxSetForeground, "Check Address") = vbNo Then
            Cancel = True
        End If

End Select

End If

End Sub
...