Страницы: 1
RSS
Отправка письма с другого почтового аккаунта Outlook - VBA
 
Добрый день всем!
И снова вопросы по VBA, прошу подсказать по следующее:
ранее был написан макрос для рассылки писем, однако периодически возникает необходимость проведения подобной рассылки с двух различных адресов: один от имени сотрудника, а другой от имени департамента (некие информационные письма).
В Outlook сотрудника подключены две почтовые учетные записи - его (mail1@mail.ru) и департамента (mail2@mail.ru), при этом первичной является учетка сотрудника - по умолчанию письма отправляются с его адреса (и она же привязана к его учетной записи на машине).
Поискав в необъятноим интеренете наткнулся, что метод .Logon имеет четыре опциональных параметра: Profile, Password, ShowDialog, NewSession, попытался прикрутить это в макрос, получилась такая запись
Код
OutApp.Session.Logon mail2@mail.ru, "",True, True
но результат - ноль.
Что я сделал не так?
Ниже привожу часть макроса рассылки:
Код
Sub SendMail()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim cell As Range
    Dim lLastRow As Long
    Dim i&
    Application.ScreenUpdating = False
    Set OutApp = CreateObject("Outlook.Application" )
    OutApp.Session.Logon "mail2@mail.ru", "",True, True
On Error GoTo cleanup
    On Error Resume Next
End Sub
Заранее спасибо всем отписавшимся!
Изменено: Poglad_kota - 21.07.2014 11:58:43
 
Мыло в кавычки. Навскидку.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Поправил, но все равно результат тот же.
Спасибо за поправку!
 
А профиль именно так называется? Проверить не могу - не использую аутлук. У меня Мышь_летучая. Могу только высказывать свои умозаключения.
ЗЫ Если не в тягость, внесите поправку в макрос в стартовом сообщении.  :)
ЗЫЗЫ Может где пароль "" поставить, если он пустой.
Изменено: JayBhagavan - 17.07.2014 15:28:30

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Изменения внес, спасибо! Но все равно не работает)
Изменено: Poglad_kota - 21.07.2014 11:47:48
 
Ни у кого больше нет идей? (
 
с Logon в аутлуке как-то все непросто
сам однажды пытался сделать такую опцию в программе рассылки писем, - работает через раз, закономерности не понял
в итоге, плюнул на это дело, и убрал строку с Logon - решив ограничиться только ящиком, настроенным по-умолчанию
 
Всего лишь идея. Может из разряда бреда, но осмелюсь высказать. Возможно ли через ВБА менять ящик по-умолчанию?

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
в Outlook тоже же есть макросы, может с этой стороны подойти (предположение - исследовать этот вопрос лень)
 
вот, как раз этим я сейчас и пытаюсь заниматься - тоже пришел к этой идее)
 
Ящик в VBA менять можно. В отдельных ячейках адреса, фамилии, текст письма (тоже может быть разным).
 
Цитата
vikttur пишет: В отдельных ячейках адреса, фамилии, текст письма
это понятно.
Цитата
vikttur пишет: Ящик в VBA
можно подробнее? чисто теорию (именно с отправкой через Outlook, vba в Excel)
мне начинающему спамеру это интересно.
 
Присоединяюсь к просьбе Nic70y, хотя интересует именно смена ящика, с остальным уже сталкивался)
Изменено: Poglad_kota - 21.07.2014 14:30:18
 
Есть такой параметр - .SetOnBehalfOfName...Может его стоит попробовать?
Код
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    Set OutMail = OutApp.CreateItem(0) 
    On Error Resume Next
    With OutMail
        .To = "кому"
        .From = "департамент"
        .SetOnBehalfOfName = "mail2@mail.ru" 
        .Subject = "информационное письмо"  
        .Body = "какой-то текст"
        .Send
    End With
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Nic70y пишет: можно подробнее? чисто теорию
Вот же ж. Заставляет напрягаться...
Код
For ааа = 2 To 100500
        Set OutMail = OutApp.CreateItem(0)
        On Error Resume Next

   OutMail.To = ячейка1.Value 'адрес
        OutMail.Subject = ячейка25.Value 'тема

и т.д.
и матами -  сослуживцу, но чего-нибудь приятное - сослуживице из соседнего кабинета... Но не перепутай!  :)
 
Виктор, спасибо! :)
С каждый днем, благодаря добрым "Планетянам" я становлюсь все более продвинутым спамером!
 
Цитата
6 пишет: Есть такой параметр - .SetOnBehalfOfName...
Большое спасибо! Проблема решена, главное, что бы у пользователя были соответствующие права от администратора.
Ну и еще использовал по глупости копипасту с Вашего сообщения, а там буква пропущена, позор мне)
Параметр .SentOnBehalfOfName
Изменено: Poglad_kota - 22.07.2014 10:36:21
 
Добрый вечер!
весь код собрал, а пользователей не переключает, винда 10 , может кто поможет?
Спасибо!
Код
   
   Sub SendMail()
    Dim OutApp As Object
    Dim OutMail As Object
    Application.ScreenUpdating = False
Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    Set OutMail = OutApp.CreateItem(0)
    On Error Resume Next
    With OutMail
        .To = "Mail1@mail.ru"
        .From = "Mail22mail.ru"
        .SetOnBehalfOfName = "mail1@mail.ru"
        .Subject = "что то"
        .Body = "что нибудь"
        .Send
    End With
End Sub
Изменено: Dimarik1987 - 15.05.2019 00:39:19
 
Dimarik1987, Задача очень косвенно касается Excel, и всеж. SetOnBehalfOfName используется в тех случаях, когда надо показать что отправляет кто-то за другого. Например помощник за руководителя.  Эти права должны быть даны на сервере и обычный Mail.ru такое не предоставляет. Для отправки от другого аккаунта нужно именно переключится на него и ниже ответ на #13

Код
   Sub SendMail()
    Dim OutApp As Object
    Dim OutMail As Object
    'Application.ScreenUpdating = False
Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    For Each oAccount In OutApp.Session.Accounts
        If oAccount = "mail2@mail.ru" Then
            Set OutMail = OutApp.CreateItem(0)
            On Error Resume Next
            With OutMail
                .To = "mail11@mail.ru"
                '.From = "Mail2@gmail.com"
                '.SetOnBehalfOfName = "mail1@mail.ru"
                .Subject = "test"
                .Body = "test"
                Set .SendUsingAccount = oAccount
                .Send
            End With
        End If
    Next
End Sub
Изменено: БМВ - 15.05.2019 08:01:25
По вопросам из тем форума, личку не читаю.
 
БМВ, ругается, что oAccount "variable not defined" (((
Код
Dim objOL As Object
Dim objMail As Object

Set objOL = CreateObject("Outlook.Application")
        objOL.Session.Logon
        
        For Each oAccount In objOL.Session.Accounts
            If oAccount = "ruslo@gmail.com" Then
                Set objMail = objOL.CreateItem(0)
                On Error Resume Next
        With objMail
            .From = "ruslo@gmail.com"
            .To = "Cargo@cargo.mu"
            .Body = "Пришлите, пожалуйста. Спасибо!"
            .Subject = "Запрос"
                For i = 1 To kf
                  .Attachments.Add nam(i)
                Next i
            Set .SendUsingAccount = oAccount
            .Send
        End With
     End If
  Next
Изменено: Татьяна Агафонова - 09.01.2020 14:06:45
 
Объявите переменные.
Код
Dim oAccount As Object
Dim i As Long
 
Татьяна Агафонова, Объявите все переменные в процедуре либо за комментируйте строку  Option Explicit
"Все гениальное просто, а все простое гениально!!!"
 
МатросНаЗебре, Nordheim, спасибо, друзья!
 
Добрый день.
Подскажите, пожалуйста.
Если я делаю не новое письмо, а прогоняю процедуру пересылки (.Forward) найденного в почте мной письма, то не получается выбрать ящик с которого отправлять письмо
Привожу часть кода
Код
Set maillist = objnamespace.Folders("xxxx@mail.ru").Folders("Имя папки, в которой будем искать письма").Items
Rectime = "сюда вытягиваю из ячейки Excel время письма"

e = Format(Rectime, "ddddd hh:mm")
e = Format(DateAdd("n", -1, e), "ddddd hh:mm")
e1 = Format(DateAdd("n", 2, e), "ddddd hh:mm")
strfilter = "[ReceivedTime]>'" & e & "' and [ReceivedTime]<'" & e1 & "'"
Set filtered_items = maillist.Restrict(strfilter)
fitems = filtered_items.Count
If fitems >0 Then
    For i = 1 To Fitems
        If filtered_items(i).ConversationID = "ссылка на ячейку Excel" And Rectime = Cstr(filtered_items(i).ReceivedTime) Then
            Set olreply = filtered_items(i).Forward
            With olreply
                .SentOnBehalfOfName = "yyy@mail.ru"
                .To = "yyy@mail.ru"
                .Subject = "Тема письма"
                .Send '.Display
            End With
        End If
    Next
Else
    MsgBox "Письмо не найдено в папке Обработанные"
    Cancel = True
    Exit Sub
End If

Т.к. поиск письма осуществляется на технологическом почтовом ящике (ТПЯ), то по умолчанию пересылка производится с него же
С помощью SentOnBehalfOfName значение отправителя меняется (это видно с помощью .Display), но при отправке письма, фактически оно всё равно приходит от имени ТПЯ, а не "yyy@mail.ru"

В чем может быть проблема? может необходимо какой-то другой параметр менять? Подскажите, пожалуйста
Т.е. фактически SentOnBehalfOfName работает, только если создается новое письмо, а не пересылается другое
Изменено: Дмитрий Попов - 10.02.2021 10:58:50
 
Цитата
Дмитрий Попов написал:
В чем может быть проблема?
в том, что сообщение создали до того, как попробовать все предложенные в этой теме решения. Пробуйте .SendUsingAccount
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх