Outlook vba отправляет электронную почту из SharedMailbox без «Отправлено от имени»

Я изо всех сил пытался программно отправить электронное письмо как общий почтовый ящик, а НЕ от имени.

Я попробовал этот код, который сейчас не могу вспомнить, откуда я его взял, внес в него несколько изменений.

Public Sub test()

    Dim outApp As Outlook.Application
    Dim objOutlookMsg As Outlook.MailItem
    Dim objOutlookRecip As Recipient
    Dim Recipients As Recipients
    Dim addrEntry As Outlook.AddressEntry
    Dim addrEntries As Outlook.AddressEntries
    Dim nameSpace As Outlook.nameSpace
    Dim addrLists As Outlook.AddressLists
    Dim uMailInbox As Outlook.Recipient
     
    Set outApp = CreateObject("Outlook.Application")
    Set objOutlookMsg = outApp.CreateItem(olMailItem)
    Set nameSpace = outApp.GetNamespace("MAPI")
    Set addrLists = nameSpace.Session.AddressLists
    
    Set addrEntry = addrLists.Item("Global Address List").AddressEntries.Item("testSender")

    Set Recipients = objOutlookMsg.Recipients
    Set objOutlookRecip = Recipients.Add("testReceiver@testdomain.com")
    objOutlookRecip.Type = 1
    
    objOutlookMsg.Sender = addrEntry
    
'    Debug.Print objOutlookMsg.SentOnBehalfOfName
    
    objOutlookMsg.Subject = "Testing this macro"
    objOutlookMsg.HTMLBody = "Testing this macro" & vbCrLf & vbCrLf
    
    For Each objOutlookRecip In objOutlookMsg.Recipients
        objOutlookRecip.Resolve
    Next
    
    objOutlookMsg.Display
    objOutlookMsg.Send
    
    Set outApp = Nothing

End Sub

Я также дал следующие разрешения учетной записи, используемой в приложении Outlook: -Чтение и управление разрешениями -Отправить как разрешения

И намеренно не дал разрешения: -Отправить от имени разрешения

Тем не менее в полученном электронном письме есть цитата «отправлено от имени»

Второй подход предлагал добавить учетную запись общего почтового ящика в учетные записи Outlook, а затем отправить электронное письмо, используя вторую учетную запись, соответствующую общему почтовому ящику. Однако, используя этот подход, я все равно получил цитату «отправлено от имени», хотя все это время у меня не было разрешения «Отправить от имени».

Наконец, третий подход здесь предлагает создать элемент электронной почты из папки Outlook общего почтового ящика.

Public Sub test2()

    Dim outApp As Outlook.Application
    Dim trgtStore As Outlook.Store
    Dim trgtFolder As Outlook.Folder
    Dim emailItem As Outlook.MailItem
    Dim recip As Outlook.Recipient
    Dim addrEntry As Outlook.AddressEntry
    Dim addrLists As Outlook.AddressLists
    Dim nameSpace As Outlook.nameSpace
    
    Set outApp = CreateObject("Outlook.Application")
    Set trgtStore = outApp.Session.Stores("testSender")
    
    Set trgtFolder = trgtStore.GetDefaultFolder(4) ' olFolderOutbox = 4
    Set emailItem = trgtFolder.Items.Add
    
    Set nameSpace = outApp.GetNamespace("MAPI")
    Set addrLists = nameSpace.Session.AddressLists
    
    Set addrEntry = addrLists.Item("Global Address List").AddressEntries.Item("testSender")
    
    With emailItem
        
        Set recip = .Recipients.Add("testReceiver@testdomain.com")
        recip.Type = 1 'olTo = 1  olOriginator = 0 olCC = 2 olBCC = 3
        .Subject = "Testing this macro"
        .HTMLBody = "Testing this macro" & vbCrLf & vbCrLf
        .Sender = addrEntry
        .Display
        .Send
        
    End With
    
End Sub

Каждый раз, когда я получаю цитату «отправлено от имени» в полученном электронном письме... Может ли кто-нибудь помочь с этой проблемой, пожалуйста?

С наилучшими пожеланиями

Подтвердите, что общий почтовый ящик настроен как учетная запись, распознаваемая VBA, с помощью Sub ShowAllAccounts() здесь stackoverflow.com/questions/62729844/switching-the-from-inbo‌​x/…

niton 21.11.2022 18:17
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
0
1
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Свойство Sender доступно только для чтения, поэтому вы не можете установить его следующим образом:

objOutlookMsg.Sender = addrEntry

Вместо этого вы можете использовать два возможных варианта:

  1. Свойство MailItem.SentOnBehalfOfName, которое возвращает строку, указывающую отображаемое имя предполагаемого отправителя почтового сообщения. В этом случае вам необходимо убедиться, что у вас есть права на отправку от имени другого человека.
Set addrEntry = addrLists.Item("Global Address List").AddressEntries.Item("testSender")
    
    With emailItem
        
        Set recip = .Recipients.Add("testReceiver@testdomain.com")
        recip.Type = 1 'olTo = 1  olOriginator = 0 olCC = 2 olBCC = 3
        .Subject = "Testing this macro"
        .HTMLBody = "Testing this macro" & vbCrLf & vbCrLf
        .SentOnBehalfOfName = addrEntry.Name
        .Display
        .Send
        
    End With
    
  1. Свойство MailItem.SendUsingAccount возвращает или задает объект Account, представляющий учетную запись, под которой должно быть отправлено MailItem. Обратите внимание, учетная запись должна быть настроена в Outlook. Например:
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

Здравствуйте, Евгений, прежде всего большое спасибо за ваше время и усилия, это очень мило с вашей стороны. Однако я пробовал 2 альтернативы, которые вы предлагаете, но когда электронное письмо получено по электронной почте назначения, оно говорит: «Отображаемое имя текущей учетной записи пользователя» от имени testSender, однако я хочу, чтобы электронное письмо было отправлено как testSender, а не от имени Это...

David 21.11.2022 16:11

Вам нужно настроить другую учетную запись в Outlook и использовать свойство SendUsingAccount в коде, чтобы настроить правильную учетную запись в этом случае.

Eugene Astafiev 21.11.2022 17:31

Спасибо, Евгений, использование свойства SendUsingAccount позволяет мне отправлять как с помощью общего почтового ящика, НО ТОЛЬКО, если общий почтовый ящик ранее установлен/настроен в приложении Outlook. Другое дело, строку «Set oMail.SendUsingAccount = oAccount» следует изменить на «oMail.SendUsingAccount = oAccount», иначе вы получите ошибку времени выполнения.

David 22.11.2022 12:00

Нет ли способа добиться того же результата, не устанавливая учетную запись общего почтового ящика в учетной записи Outlook? Это означает, что он будет использовать только тот факт, что я дал пользователю разрешение на чтение и управление разрешениями и на отправку в качестве разрешений.

David 22.11.2022 12:03

В этом случае вам нужно использовать свойство SentOnBehalfOfName.

Eugene Astafiev 22.11.2022 19:07

Другие вопросы по теме

Как отправить письмо в формате html с помощью EmailJS
Почему emailjs не отправляет мне emailjs? в HTML? Как я могу отправить электронное письмо с помощью emailjs в HTML?
Mjml включить горизонтальную прокрутку для таблицы, добавить переполнение в mjml
Как открыть приложение электронной почты по умолчанию на Android из Flutter
Laravel отправить письмо
Изменить HTMLbody нового электронного письма, созданного с помощью кнопки ленты по умолчанию?
Извлечение определенных данных в электронных письмах Outlook, содержащихся в квадратных скобках, и экспорт в определенные строки в электронной таблице Excel.
PHP: как отправить электронное письмо пользователю с помощью задания cron
Как в Powershell, используя только память (дисковое хранилище отсутствует), создать zip-архив большого текстового файла и прикрепить его к сообщению электронной почты?
Как я могу получить идентификатор сообщения после отправки электронного письма в Sengrid?