список / получение всех имен отправителей в Outlook

#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