Доброго времени суток. Обращаюсь к тем, кто пишет макросы под Outlook. В компании перешли на CommuniGate Pro Server и к прочим проблемам добавились другие. Теперь если ящик переполняется более 10 мб, сообщения перестают приходить. Удалять не вариант. Пришлось создать свой файл данных и переносить туда сообщения. Можно настроить автоматический перенос, но! Во-первых, некоторые сообщения все-равно не переносятся. Во-вторых, если сообщение пришло, когда комп выключен или приложение закрыто, то сообщения всё равно останутся на CommuniGate. В-третьих, настройку автоматического переноса можно выполнить только для входящих. Отправленные и удаленные нужно переносить вручную. Просьба заключается в том, чтобы написать макрос, который при появлении любого сообщения во входящих, отправленных, удаленных сразу автоматически переносил их. Кто может, помогите, пожалуйста
Доброго времени суток. Обращаюсь к тем, кто пишет макросы под Outlook. В компании перешли на CommuniGate Pro Server и к прочим проблемам добавились другие. Теперь если ящик переполняется более 10 мб, сообщения перестают приходить. Удалять не вариант. Пришлось создать свой файл данных и переносить туда сообщения. Можно настроить автоматический перенос, но! Во-первых, некоторые сообщения все-равно не переносятся. Во-вторых, если сообщение пришло, когда комп выключен или приложение закрыто, то сообщения всё равно останутся на CommuniGate. В-третьих, настройку автоматического переноса можно выполнить только для входящих. Отправленные и удаленные нужно переносить вручную. Просьба заключается в том, чтобы написать макрос, который при появлении любого сообщения во входящих, отправленных, удаленных сразу автоматически переносил их. Кто может, помогите, пожалуйстаlight26
А чем не подходит штатная утилита "Правила". Настроить автоматическое перемещение писем в заданную папку (размещенную на локальном ПК) и всего делов: и ящик пуст и письма все на месте и обрабатываются MS Outlook
А чем не подходит штатная утилита "Правила". Настроить автоматическое перемещение писем в заданную папку (размещенную на локальном ПК) и всего делов: и ящик пуст и письма все на месте и обрабатываются MS Outlookigrtsk
Инструктор по применению лосей в кавалерийских частях РККА
Во-первых, некоторые сообщения все-равно не переносятся. Во-вторых, если сообщение пришло, когда комп выключен или приложение закрыто, то сообщения всё равно останутся на CommuniGate.
Во-первых, некоторые сообщения все-равно не переносятся. Во-вторых, если сообщение пришло, когда комп выключен или приложение закрыто, то сообщения всё равно останутся на CommuniGate.
Если ПК выключен или приложение закрыто, сомнительно, что макрос будет работать
Почему сомнительно? Я совершенно точно могу сказать, что он не будет работать Но так же точно я могу сказать, что если поставить такие условия, то макрос будет отрабатывать сразу при запуске оутлук
Если ПК выключен или приложение закрыто, сомнительно, что макрос будет работать
Почему сомнительно? Я совершенно точно могу сказать, что он не будет работать Но так же точно я могу сказать, что если поставить такие условия, то макрос будет отрабатывать сразу при запуске оутлук
Это корпоративная сеть передачи данных и никто гугла не пустит в ней ковыряться
Ну, Gmail ковыряться в корпоративной сети может и не требуется. Но опять же можно воспользоваться функцией пересылки (переадресации) почты. CommuniGate с этим справляется как и любой почтовый сервер
Ну а с макросом возможно эта тема поможет в какой-то мере _https://www.cyberforum.ru/vba/thread2399927.html
Это корпоративная сеть передачи данных и никто гугла не пустит в ней ковыряться
Ну, Gmail ковыряться в корпоративной сети может и не требуется. Но опять же можно воспользоваться функцией пересылки (переадресации) почты. CommuniGate с этим справляется как и любой почтовый сервер
Ну а с макросом возможно эта тема поможет в какой-то мере _https://www.cyberforum.ru/vba/thread2399927.htmligrtsk
Инструктор по применению лосей в кавалерийских частях РККА
Сообщение отредактировал igrtsk - Понедельник, 20.09.2021, 13:50
Ну а с макросом возможно эта тема поможет в какой-то мере
К сожалению там макрос проверяет наличие входящих и потом выполняет совсем другие команды. К тому же сам код походу криво написан, так как две строки подряд начинаются с Private
Ну а с макросом возможно эта тема поможет в какой-то мере
К сожалению там макрос проверяет наличие входящих и потом выполняет совсем другие команды. К тому же сам код походу криво написан, так как две строки подряд начинаются с Privatelight26
Писал что то похоже для себя, но правда перенос не локально, а просто в папку... Можно взять за основу и дописать... Функция обработки писем, вешаем на правило "Запустить скрипт" при получении письма.
[vba]
Код
Public Sub autoIn(itm As Outlook.MailItem) Dim oApp As New Outlook.Application Dim NSpace As NameSpace Dim senderDoman As String Dim keySender As String
On Error Resume Next Set NSpace = oApp.GetNamespace("MAPI") keySender = LCase(Split(itm.SenderEmailAddress, "@")(1)) Select Case keySender Case "mail.ru" senderDoman = "e" & LCase(Split(itm.SenderEmailAddress, "@")(0)) Case "yandex.ru" senderDoman = "e" & LCase(Split(itm.SenderEmailAddress, "@")(0)) Case "gmail.com" senderDoman = "e" & LCase(Split(itm.SenderEmailAddress, "@")(0)) Case "bk.ru" senderDoman = "e" & LCase(Split(itm.SenderEmailAddress, "@")(0)) Case ""
Case Else senderDoman = LCase(Split(itm.SenderEmailAddress, "@")(1)) End Select Call moveMSG(itm, LCase(senderDoman), itm.SenderEmailAddress, NSpace, 6) End Sub
[/vba]
Функция переноса письма
[vba]
Код
Sub moveMSG(oMail As Outlook.MailItem, iSender, iName, iNSpace As NameSpace, o As Integer) Dim oApp As New Outlook.Application Dim aFolderName As Outlook.Folder
aName = xmlNodeName("mail", iSender, iName)
On Error Resume Next Set aFolderName = iNSpace.GetDefaultFolder(o).Folders.Item(aName) If aFolderName Is Nothing Then Set aFolderName = iNSpace.GetDefaultFolder(o).Folders.Add(aName) End If
oMail.Move iNSpace.GetDefaultFolder(o).Folders(aName) End Sub
[/vba]
Функция записи xml файла с привязкой "папка-отправитель"
[vba]
Код
Function xmlNodeName(xmlFile, Sender, Name) ' функция записи в XML Dim corSender As String Dim xmlDoc As MSXML2.DOMDocument60 Set xmlDoc = New MSXML2.DOMDocument60 Dim Node As MSXML2.IXMLDOMNode Dim rootXML As MSXML2.IXMLDOMNode Dim iFolder As String Dim xmlEle As MSXML2.IXMLDOMNode
corSender = CorrectName(Sender) xmlDoc.Load ("C:\Forms\sys\" & xmlFile & ".xml") ' путь к файлу...
On Error Resume Next Set Node = xmlDoc.SelectSingleNode("//" & xmlFile & "/" & corSender)
If Node Is Nothing Then iFolder = InputBox("Введите имя папки для " & Name & "." & vbCrLf & "Примечание: Спам - Прочее", "Новый адрес") If iFolder = "" Then Exit Function Set rootXML = xmlDoc.SelectSingleNode(xmlFile) Set xmlEle = xmlDoc.createElement(corSender) rootXML.appendChild xmlEle Set Node = xmlDoc.SelectSingleNode("//" & xmlFile & "/" & corSender) Node.text = iFolder rootXML.appendChild xmlDoc.createTextNode(vbCrLf) xmlDoc.Save ("C:\Forms\sys\" & xmlFile & ".xml") End If xmlNodeName = Node.text End Function
[/vba]
Вспомогательная функция для корректировки недопустимых символов
[vba]
Код
Function CorrectName(text) Dim s$, i& s = "-~:!/\#$%^&*=|`@""" For i = 1 To Len(s) text = Replace(text, Mid(s, i, 1), "_") Next CorrectName = text End Function
С отправленными сложнее, пошел по тому же принципу, но в правилах нет события с отправленными письмами, повесил обработку на событие [vba]
Код
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
[/vba] Но ловлю баг, что после отправки срабатывает скрипт и письмо перемещается до момента отправки и получаю ошибку, что письмо не может быть отправлено так как оно изменено (как то так).
Одним словом может пригодится )
Писал что то похоже для себя, но правда перенос не локально, а просто в папку... Можно взять за основу и дописать... Функция обработки писем, вешаем на правило "Запустить скрипт" при получении письма.
[vba]
Код
Public Sub autoIn(itm As Outlook.MailItem) Dim oApp As New Outlook.Application Dim NSpace As NameSpace Dim senderDoman As String Dim keySender As String
On Error Resume Next Set NSpace = oApp.GetNamespace("MAPI") keySender = LCase(Split(itm.SenderEmailAddress, "@")(1)) Select Case keySender Case "mail.ru" senderDoman = "e" & LCase(Split(itm.SenderEmailAddress, "@")(0)) Case "yandex.ru" senderDoman = "e" & LCase(Split(itm.SenderEmailAddress, "@")(0)) Case "gmail.com" senderDoman = "e" & LCase(Split(itm.SenderEmailAddress, "@")(0)) Case "bk.ru" senderDoman = "e" & LCase(Split(itm.SenderEmailAddress, "@")(0)) Case ""
Case Else senderDoman = LCase(Split(itm.SenderEmailAddress, "@")(1)) End Select Call moveMSG(itm, LCase(senderDoman), itm.SenderEmailAddress, NSpace, 6) End Sub
[/vba]
Функция переноса письма
[vba]
Код
Sub moveMSG(oMail As Outlook.MailItem, iSender, iName, iNSpace As NameSpace, o As Integer) Dim oApp As New Outlook.Application Dim aFolderName As Outlook.Folder
aName = xmlNodeName("mail", iSender, iName)
On Error Resume Next Set aFolderName = iNSpace.GetDefaultFolder(o).Folders.Item(aName) If aFolderName Is Nothing Then Set aFolderName = iNSpace.GetDefaultFolder(o).Folders.Add(aName) End If
oMail.Move iNSpace.GetDefaultFolder(o).Folders(aName) End Sub
[/vba]
Функция записи xml файла с привязкой "папка-отправитель"
[vba]
Код
Function xmlNodeName(xmlFile, Sender, Name) ' функция записи в XML Dim corSender As String Dim xmlDoc As MSXML2.DOMDocument60 Set xmlDoc = New MSXML2.DOMDocument60 Dim Node As MSXML2.IXMLDOMNode Dim rootXML As MSXML2.IXMLDOMNode Dim iFolder As String Dim xmlEle As MSXML2.IXMLDOMNode
corSender = CorrectName(Sender) xmlDoc.Load ("C:\Forms\sys\" & xmlFile & ".xml") ' путь к файлу...
On Error Resume Next Set Node = xmlDoc.SelectSingleNode("//" & xmlFile & "/" & corSender)
If Node Is Nothing Then iFolder = InputBox("Введите имя папки для " & Name & "." & vbCrLf & "Примечание: Спам - Прочее", "Новый адрес") If iFolder = "" Then Exit Function Set rootXML = xmlDoc.SelectSingleNode(xmlFile) Set xmlEle = xmlDoc.createElement(corSender) rootXML.appendChild xmlEle Set Node = xmlDoc.SelectSingleNode("//" & xmlFile & "/" & corSender) Node.text = iFolder rootXML.appendChild xmlDoc.createTextNode(vbCrLf) xmlDoc.Save ("C:\Forms\sys\" & xmlFile & ".xml") End If xmlNodeName = Node.text End Function
[/vba]
Вспомогательная функция для корректировки недопустимых символов
[vba]
Код
Function CorrectName(text) Dim s$, i& s = "-~:!/\#$%^&*=|`@""" For i = 1 To Len(s) text = Replace(text, Mid(s, i, 1), "_") Next CorrectName = text End Function
С отправленными сложнее, пошел по тому же принципу, но в правилах нет события с отправленными письмами, повесил обработку на событие [vba]
Код
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
[/vba] Но ловлю баг, что после отправки срабатывает скрипт и письмо перемещается до момента отправки и получаю ошибку, что письмо не может быть отправлено так как оно изменено (как то так).