#vba #outlook
#vba #outlook
Вопрос:
У меня есть макрос, который создает новое электронное письмо, отправляет от имени…. НО я не хочу явно использовать жестко заданный адрес электронной почты, лучше спросите Outlook, какие адреса там уже установлены.
Я подумываю об использовании фильтра (например …. заканчивается на «@myonbehalfdomain.com «)
Итак, в моем примере ниже: Eonbehalf должен получить второй адрес электронной почты, который я могу увидеть, используя выпадающее поле «от» в новом электронном письме.
Имеет смысл?
Sub CreateNewMail()
Dim olNS As Outlook.NameSpace
Dim oMail As Outlook.MailItem
Set olNS = Application.GetNamespace("MAPI")
Set oMail = Application.CreateItem(olMailItem)
strbody = "<BR><BR><BR>"
SigString = Environ("appdata") amp; _
"MicrosoftHandtekeningencustom.htm"
If Dir(SigString) <> "" Then
Signature = GetBoiler(SigString)
Else
Signature = ""
End If
On Error Resume Next
Eonbehalf = getemailaddress(2)
oMail.SentOnBehalfOfName = Eonbehalf
oMail.Display
oMail.HTMLBody = strbody amp; Signature
Set oMail = Nothing
Set olNS = Nothing
End Sub
Комментарии:
1. Должен ли пользователь выбирать адрес?
2. @Дамиан, нет, я бы хотел использовать адрес электронной почты, который заканчивается на «@certaindomain.com » .. итак, у меня есть моя основная учетная запись (test@test.com ) и onbehalf (test@certaindomain.com ). Я хочу второе (test@certaindomain.com ) ИЛИ, если это невозможно: мне нужна строка из моего основного адреса электронной почты (тест), чтобы я мог скомпилировать имя sentonbehalfname самостоятельно.
Ответ №1:
Из того, что я испытал, электронное письмо может быть доступно в Outlook для использования в качестве «Отправить от имени» двумя способами:
- В качестве дополнительной / отдельной учетной записи
- Как доступ к общей папке / почтовому ящику, в этом случае он не отображается в коллекции учетных записей
В первом случае попробуйте перебрать коллекцию учетных записей:
Sub getAccount()
Set oNS = Application.GetNamespace("MAPI")
For Each oAccount In oNS.Accounts
'your code goes here (read oAccount.DisplayName for example)
Next oAccount
End Sub
В последнем случае:
Sub getFolder()
Set oNS = Application.GetNamespace("MAPI")
For Each oFolder In oNS.Folders
'your code goes here (read oFolder.Name for example)
Next oFolder
End Sub
****************************** редактировать****************************
Попробуйте заменить getemailaddress(2) на fnGetSecondAdress("theEmailDomainYouReLookingFor")
и добавьте в свой код приведенную ниже функцию
Function fnGetSecondAdress(strDomain As String)
Dim strAddress As String
Set oNS = Application.GetNamespace("MAPI")
For Each oFolder In oNS.Folders
If InStr(1, oFolder.Name, strDomain, vbTextCompare) >= 1 And InStr(1, oFolder.Name, "Public Folders", vbTextCompare) = 0 Then
strAddress = oFolder.Name
End If
Next oFolder
fnGetSecondAdress = strAddress
End Function
Комментарии:
1. Последний случай был бы моим! Однако отсутствие базовых знаний VBA не позволяет мне завершить мою задачу. <код> Sub CreateNewMail() Скрывает olNS как Outlook. Пространство имен затемнить как Outlook. Почтовый элемент устанавливает OLNS = Application. GetNamespace(«MAPI») Устанавливает oMail = Application. Создайте элемент (olMailItem) для каждой папки в olNS.Folders, если InStr (папка, «certaindomain.com «) Затем test = oFolder. Назовите End, если следующая папка </code> Поэтому я хочу, чтобы вы «протестировали» как SentonBehalf … что я делаю не так?
2. Отредактированный оригинальный ответ, пожалуйста, проверьте, работает ли он для вас. Возможно, потребуется дополнительная настройка, если домен, который вы ищете, отображается во многих общих папках / учетных записях в вашем Outlook