Я изо всех сил пытался программно отправить электронное письмо как общий почтовый ящик, а НЕ от имени.
Я попробовал этот код, который сейчас не могу вспомнить, откуда я его взял, внес в него несколько изменений.
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
Каждый раз, когда я получаю цитату «отправлено от имени» в полученном электронном письме... Может ли кто-нибудь помочь с этой проблемой, пожалуйста?
С наилучшими пожеланиями
Свойство Sender
доступно только для чтения, поэтому вы не можете установить его следующим образом:
objOutlookMsg.Sender = addrEntry
Вместо этого вы можете использовать два возможных варианта:
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
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, а не от имени Это...
Вам нужно настроить другую учетную запись в Outlook и использовать свойство SendUsingAccount
в коде, чтобы настроить правильную учетную запись в этом случае.
Спасибо, Евгений, использование свойства SendUsingAccount позволяет мне отправлять как с помощью общего почтового ящика, НО ТОЛЬКО, если общий почтовый ящик ранее установлен/настроен в приложении Outlook. Другое дело, строку «Set oMail.SendUsingAccount = oAccount» следует изменить на «oMail.SendUsingAccount = oAccount», иначе вы получите ошибку времени выполнения.
Нет ли способа добиться того же результата, не устанавливая учетную запись общего почтового ящика в учетной записи Outlook? Это означает, что он будет использовать только тот факт, что я дал пользователю разрешение на чтение и управление разрешениями и на отправку в качестве разрешений.
В этом случае вам нужно использовать свойство SentOnBehalfOfName
.
Подтвердите, что общий почтовый ящик настроен как учетная запись, распознаваемая VBA, с помощью
Sub ShowAllAccounts()
здесь stackoverflow.com/questions/62729844/switching-the-from-inbox/…