Коллеги, у меня тут такая проблема.Есть у меня на на работе Аутлук и есть в нём два аккаунта — отдельский в локалке (OTDEL@organization.loc) и личный в интернете (myname@sitename.ru). По дефолту я, видимо, нахожусь во втором и при создании письма вручную могу сменить отправителя на OTDEL@organization.loc и благополучно отправить с него письмо. Когда же я пытаюсь отправить письмо макросом: [vba]
Код
With Outlook.Application.CreateItem(olMailItem) On Error Resume Next .To = Columns(1).Find(what:=Workbooks("ОКАТО.xlsx").Worksheets(i).Name, lookat:=xlWhole).Offset(, 1) Workbooks("Список.xlsx").Activate .Subject = "Запрос" .SentOnBehalfOfName = "OTDEL@organization.loc" .Attachments.Add ThisWorkbook.Path & "\Письма\На места\" & ActiveSheet.Name & ".rar", olByValue, 1 If .To <> "" Then .Send End With
[/vba] письмо благополучно создаётся и даже правильно заполняется поле От, но Аутлук принимается ругаться:
"Нельзя отправить сообщение от лица этого пользователя без соответствующего разрешения. Убедитесь, что отправка осуществляется от лица правильного отправителя, или запросите необходимое разрешение. Если проблема будет возникать снова, обратитесь в службу технической поддержки"
Коллеги, у меня тут такая проблема.Есть у меня на на работе Аутлук и есть в нём два аккаунта — отдельский в локалке (OTDEL@organization.loc) и личный в интернете (myname@sitename.ru). По дефолту я, видимо, нахожусь во втором и при создании письма вручную могу сменить отправителя на OTDEL@organization.loc и благополучно отправить с него письмо. Когда же я пытаюсь отправить письмо макросом: [vba]
Код
With Outlook.Application.CreateItem(olMailItem) On Error Resume Next .To = Columns(1).Find(what:=Workbooks("ОКАТО.xlsx").Worksheets(i).Name, lookat:=xlWhole).Offset(, 1) Workbooks("Список.xlsx").Activate .Subject = "Запрос" .SentOnBehalfOfName = "OTDEL@organization.loc" .Attachments.Add ThisWorkbook.Path & "\Письма\На места\" & ActiveSheet.Name & ".rar", olByValue, 1 If .To <> "" Then .Send End With
[/vba] письмо благополучно создаётся и даже правильно заполняется поле От, но Аутлук принимается ругаться:
"Нельзя отправить сообщение от лица этого пользователя без соответствующего разрешения. Убедитесь, что отправка осуществляется от лица правильного отправителя, или запросите необходимое разрешение. Если проблема будет возникать снова, обратитесь в службу технической поддержки"
Ага, это я тоже нашёл. Но там единственный рабочий способ не оставляет следов в Outlook'е :( [moder]А почему тогда не написали в вопросе что-то типа "Вот это, это и это пробовал, не подходит по таким-то причинам"?[/moder]
Ага, это я тоже нашёл. Но там единственный рабочий способ не оставляет следов в Outlook'е :( [moder]А почему тогда не написали в вопросе что-то типа "Вот это, это и это пробовал, не подходит по таким-то причинам"?[/moder]StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Сообщение отредактировал _Boroda_ - Среда, 01.06.2016, 13:48
Еще вариант отсюда - не тестировал(только одна учетка - на ней работает.) : [vba]
Код
Sub Mail_small_Text_Change_Account() 'Only working in Office 2007-2016 'Don't forget to set a reference to Outlook in the VBA editor Dim OutApp As Outlook.Application Dim OutMail As Outlook.MailItem Dim strbody As String
Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(olMailItem)
strbody = "Hi there" & vbNewLine & vbNewLine & _ "This is line 1" & vbNewLine & _ "This is line 2" & vbNewLine & _ "This is line 3" & vbNewLine & _ "This is line 4"
On Error Resume Next With OutMail .To = "ron@debruin.nl" .CC = "" .BCC = "" .Subject = "This is the Subject line" .Body = strbody
'SendUsingAccount is new in Office 2007 'Change Item(1)to the account number that you want to use .SendUsingAccount = OutApp.Session.Accounts.Item(1)
.Send 'or use .Display End With On Error GoTo 0
Set OutMail = Nothing Set OutApp = Nothing End Sub
[/vba] на сколько я понял выбор аккаунта менять в строке: [vba]
Еще вариант отсюда - не тестировал(только одна учетка - на ней работает.) : [vba]
Код
Sub Mail_small_Text_Change_Account() 'Only working in Office 2007-2016 'Don't forget to set a reference to Outlook in the VBA editor Dim OutApp As Outlook.Application Dim OutMail As Outlook.MailItem Dim strbody As String
Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(olMailItem)
strbody = "Hi there" & vbNewLine & vbNewLine & _ "This is line 1" & vbNewLine & _ "This is line 2" & vbNewLine & _ "This is line 3" & vbNewLine & _ "This is line 4"
On Error Resume Next With OutMail .To = "ron@debruin.nl" .CC = "" .BCC = "" .Subject = "This is the Subject line" .Body = strbody
'SendUsingAccount is new in Office 2007 'Change Item(1)to the account number that you want to use .SendUsingAccount = OutApp.Session.Accounts.Item(1)
.Send 'or use .Display End With On Error GoTo 0
Set OutMail = Nothing Set OutApp = Nothing End Sub
[/vba] на сколько я понял выбор аккаунта менять в строке: [vba]
А почему тогда не написали в вопросе что-то типа "Вот это, это и это пробовал, не подходит по таким-то причинам"?
Потому что на момент публикации вопроса я ещё не пробовал. Ваш Капитан Очевидность а попробовал только после того, получил Ваш ответ, вставил в поисковый запрос слово Outlook и эта тема действительно оказалась первой. Спасибо, кстати.
А почему тогда не написали в вопросе что-то типа "Вот это, это и это пробовал, не подходит по таким-то причинам"?
Потому что на момент публикации вопроса я ещё не пробовал. Ваш Капитан Очевидность а попробовал только после того, получил Ваш ответ, вставил в поисковый запрос слово Outlook и эта тема действительно оказалась первой. Спасибо, кстати. StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Хм. Завтра попробую... В объектной модели Аутлука вообще чёрт ногу сломит, по сравнению с ним даже Ворд прост и ясен И макрорекордером ещё не оборудован
Хм. Завтра попробую... В объектной модели Аутлука вообще чёрт ногу сломит, по сравнению с ним даже Ворд прост и ясен И макрорекордером ещё не оборудован StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Сообщение отредактировал StoTisteg - Четверг, 02.06.2016, 02:13
А вот именно этот код с изменением только адреса (ну и Item'а, ясен пень) — заработал. Видимо, всё дело в связывании, с ранним почему-то не хочет, желает позднего. [p.s.] Да, так и есть — связывание. Меняем в том же коде [vba]
Код
Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(olMailItem)
...
With OutMail
[/vba] на [vba]
Код
With Outlook.CreateItem(olMailItem)
[/vba] (при подключённой библиотеке, конечно) и код перестаёт работать.
А вот именно этот код с изменением только адреса (ну и Item'а, ясен пень) — заработал. Видимо, всё дело в связывании, с ранним почему-то не хочет, желает позднего. [p.s.] Да, так и есть — связывание. Меняем в том же коде [vba]
Код
Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(olMailItem)
...
With OutMail
[/vba] на [vba]
Код
With Outlook.CreateItem(olMailItem)
[/vba] (при подключённой библиотеке, конечно) и код перестаёт работать.StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Сообщение отредактировал StoTisteg - Пятница, 03.06.2016, 13:45
Это ранне связывание — в книге, разумеется, была подключена объектная модель Outlook'а. Но да, оказалось, чтодело именно в этом — наверно, смена аккаунта лежит в какой-то другой библиотеке, что довольно странно.
Это ранне связывание — в книге, разумеется, была подключена объектная модель Outlook'а. Но да, оказалось, чтодело именно в этом — наверно, смена аккаунта лежит в какой-то другой библиотеке, что довольно странно.StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.