Цитата:
Цитата LinkIn
А можно подробнее, как Вы перенаправляете почту (скриптом?) и какой почтовый клиент? »
|
Почтовые клиенты разные, в основном - родной виндовый, некоторые используют от офиса, около 100 сидят на бате.
В плане почты у нас нет корп стандарта. Более того, аутлук, у нас считается не обслуживаемым.
Например, при умирании, от слишком большого количества почты (бывает и по 5-7К писем, при чем часто все реально полезное) мы лишь пожимаем плечами и советует зэ бат, если отказываются, ни делаем ни чего )) Не правильно конечно, но за 6 лет что я здесь работаю, проблем с мышкой не было ни разу, а аутлук, порядочно поднадоел. Особенно не понятно что делать с секретарями, которые обязаны хранить входящую почту 10 лет. Аутлук такого извращения не вытягивает, а хранить архивы отдельно они не желают.
Ну и соответственно, для аутлуков ни чего нет, все руки не доходят сделать автоматом, ребята (аникейщики) перенаправляют руками. Сама мышка устанавливается сразу настроенной так, как нужно, в том числе с дэфолтным путем к почтовой базе на диск U:\mail\TheBat, но без подключения ящиков. Они подключаются логон скриптами, у каждого пользователя в домашнем каталоге лежит конфигурационный файл, где в секции mail указаны ящики, которые нужно подключать. Если такого еще не было, не важно по каким причинам, то делается вручную, но поскольку место хранение почты уже "перенаправлено", то работает обычный мастер далее-далее-далее... По идее ребята должны в конфиг написать ящик для подключения, но бывает забывают.. или забивают.
Вот пример. У меня дома, к сожалению, есть только старые версии, почты здесь нет, но сделано точно также, есть дополнительная секция для подключения почты....+ для всего этого написана вэб-морда, таким образом не надо скакать по каталогам и менять конфиг, все делается через нее, и логи ошибок смотрится и параметры задаются... хотя некоторые ребята предпочитают в ручную конфиг править, но это кому как удобно...:
Logon.cfg
Код:
#Каминтарием считаются строчки начинающиеся с (Space # =)
#Если секция не используется нужно удалить или закомментировать
#в ней все параметры или удалить секцию полностью.
==[Log]===========================================
#Отключение ведения лога LogLevel=Off
#Ведение лога ошибок LogLevel=Error
#Ведение полного лога LogLevel=Full
#-------------------------------------------------
#Перезапись лога при каждом выполнении скрипта LogReWrite = On
#Перезапись лога каждый день LogReWrite = 1
#Перезапись лога каждые ХХ дней LogReWrite = ХХ
#Перезапись лога запрещена LogReWrite = Off
#-------------------------------------------------
LogLevel=ERROR
LogPath=U:\Logon.log
LogReWrite=7
==[Network Printers]==============================
#Подключение сетевых принтеров: Printer=\\Server\Printer
#-------------------------------------------------
#Установка принтера по умолчанию: DefaultPrinter=\\Server\Printer
#Оставитьт принтер без изменени: DefaultPrinter=
#-------------------------------------------------
Printer=\\PS\ZUK311-HPLJ2300
DefaultPrinter=\\PS\ZUK311-HPLJ2300
==[Map Network Drive]=============================
#Подключение сетевых дисков
#Имя диска: NetworkDriveName=X:
#Сетевой путь: NetworkDrivePath=\\Server\Folder
#-------------------------------------------------
==[Run External Script]=============================
#Запуск внешних скриптов
#Путь: ExternalScript=X:\Script.bat
#Сетевой путь: ExternalScript=\\Server\Folder\Script.vbs
#-------------------------------------------------
LogonMAIN.vbs
Код:
'===============================================================
' Имя : LogonMAIN.vbs
' Язык : VBScript
' Создан : 05.03.2008г
' Изменен : 07.10.2009г
' Описание: Логон скрипт для подключение сетевых принтеров,
' установки принтеров по умолчанию, сетевых дисков
' и запуска дополнительных внешних скриптов.
' OS Ver : Win98, Win2k, WinXP, Win2k3
'===============================================================
Option Explicit
' Объявляем переменные
Public WshNetwork
Public NetPrinter
Public WshShell
Public FSO
Public File
Public i
Public LoadAllFile
Public LoadAllFile_Line
Public Conf_Split, Conf_Total
Public Printer(), TotalPrinters
Public DefaultPrinter
Public NetworkDriveName(), TotalNetworkDriveName
Public NetworkDrivePath(), TotalNetworkDrivePath
Public PathExternalScript(), TotalPathExternalScript
Public LogPath, LogReWrite, LogLevel
Public LogMessage()
Public Const ForReading = 1, ForWriting = 2, ForAppending = 8
Public SpaceLogMessage
Public SpaceNow
Public SpaceLogLevel
Public SpaceLogReWrite
'==[MAIN]=======================================================
'Первоначальное определение переменных
Init()
'Проверяем подключен ли Диск на котором находится конфиг и лог файлы
If (FSO.DriveExists(FSO.GetDriveName(LogPath))) Then
'Проверяем наличие файла настроек
If (FSO.FileExists("U:\Logon.cfg")) Then
If LoadConfig() = "Ok" Then
'Открываем лог файл
OpenLogFile()
'Мапируем принтеры
AddPrinters()
'Устанавливаем принтер по умолчанию
SetDefaultPrinters()
'Мапируем сетевые диски
If TotalNetworkDriveName = TotalNetworkDrivePath Then
MapNetworkDrives()
Else
File.WriteLine(LogMessage(22))
File.WriteLine(LogMessage(23))
End if
'Запуск внешних скриптов
RunExternalScripts()
'Закрываем лог файл
CloseLogFile()
Else
'Открываем лог файл
OpenLogFile()
File.WriteLine(LogMessage(8))
'Закрываем лог файл
CloseLogFile()
End if
Else
'Открываем лог файл
OpenLogFile()
File.WriteLine(LogMessage(7))
'Закрываем лог файл
CloseLogFile()
End if
End if
'==[END MAIN]===================================================
'==========================================================================
'==========================================================================
'==========================================================================
'============================== Ф У Н К Ц И И =============================
Function Init() 'Первоначальное определение переменных
'Создание Объектов
Set FSO = CreateObject("Scripting.FileSystemObject") ' Создаем объект SFO
Set WshNetwork = CreateObject("WScript.Network") ' Создаем объект WshNetwork
Set WshShell = CreateObject("WScript.Shell") ' Создаем объект WshShell
Conf_Total = 0
TotalPrinters = 0
TotalNetworkDriveName = 0
TotalNetworkDrivePath = 0
TotalPathExternalScript = 0
LogPath = "U:\Logon.log"
LogReWrite = "ON"
LogLevel = "ERROR"
ReDim LogMessage(28)
LogMessage(0) = " inf Регистрация произведена на: "
LogMessage(1) = " inf Версия ОС: "
LogMessage(2) = " Подключен принтер: "
LogMessage(3) = "[ERROR] Не удалось подключить принтер: "
LogMessage(4) = " Установлен принтер по умолчанию: "
LogMessage(5) = "Неизменен"
LogMessage(6) = "[ERROR] Не удалось установить принтер по умолчанию: "
LogMessage(7) = "[ERROR] Файл настроек не найден"
LogMessage(8) = "[ERROR] Ошибка чтения конфигурационного файла"
LogMessage(9) = "Завершение работы: "
LogMessage(10) = "==================================================================================================="
LogMessage(11) = " ====> Имя принтера задано неверно или он не доступен."
LogMessage(12) = " ====> Неизвестная ошибка."
LogMessage(13) = " ====> Принтер с таким именем отсутсвует."
LogMessage(14) = " ====> Automation error. The remote procedure call failed."
LogMessage(15) = " ====> Удаленная машина не существует или не доступна."
LogMessage(16) = " Подключен сетевой диск: "
LogMessage(17) = "[ERROR] Не удалось подключить сетевой диск: "
LogMessage(18) = " Подключение сетевого диска прервано: "
LogMessage(19) = " ====> Такой сетевой диск уже существует."
LogMessage(20) = " ====> Локальное имя устройства уже используется для подключения к другому сетевому ресурсу."
LogMessage(21) = " ====> Сетевой путь не существует или не доступен."
LogMessage(22) = " ====> Сетевой путь не указан."
LogMessage(23) = " ====> Указано неверное имя устройства."
LogMessage(24) = "[ERROR] Подключение сетевых дисков не возможно из-за ошибок в настройках. Файл Logon.cfg раздел [Map Network Drive]."
LogMessage(25) = " ====> Количество имен сетевых дисков отличается от количества сетевых путей."
LogMessage(26) = " Запушен внешний скрипт: "
LogMessage(27) = "[ERROR] Не удалось запустить внешний скрипт: "
LogMessage(28) = " ====> Не удалось найти указанный файл."
End function
'==========================================================================
'==========================================================================
Function OSVersion() 'Функция для получения версии ОС
Dim OStype
Dim OSver
Dim OSsp
On Error Resume Next
OStype = WshShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions\ProductType")
If Err.Number<>0 Then
' OS 9x
OSver = WshShell.RegRead("HKLM\Software\Microsoft\Windows\CurrentVersion\ProductName")
OSsp = WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\VersionNumber")
Else
' OS NT
OSver = WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName")
OSsp = WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CSDVersion")
If Err.Number<>0 Then
GetOsVersion = "Unknown NTx"
Exit Function
End If
End If
OSVersion = OSver & " (" & OSsp & ")"
End function
'==========================================================================
'==========================================================================
Function LoadConfig() 'Функция для загрузки конфигурации
On Error Resume Next
Err.Clear
'Читаем настройки принтеров
Set File = FSO.OpenTextFile("U:\Logon.cfg", ForReading, false)
LoadAllFile = File.ReadAll
File.Close
LoadAllFile_Line = Split(LoadAllFile, chr(13) & chr(10), -1, 1)
'Обработка загруженной конфигурации
For i = 0 to Ubound(LoadAllFile_Line)
If Left(LoadAllFile_Line(i), 1) <> Empty Then
If Left(LoadAllFile_Line(i), 1) <> "#" Then
If Left(LoadAllFile_Line(i), 1) <> "=" Then
If Left(LoadAllFile_Line(i), 1) <> " " Then
Conf_Split = Split(Replace(LoadAllFile_Line(i), chr(9), ""), "=", -1, 1)
Conf_Split(0) = Trim(Conf_Split(0))
Conf_Split(1) = Trim(Conf_Split(1))
If Conf_Split(0) = "LogPath" Then LogPath = Conf_Split(1)
If Conf_Split(0) = "LogReWrite" Then LogReWrite = UCase(Conf_Split(1))
If Conf_Split(0) = "LogLevel" Then LogLevel = UCase(Conf_Split(1))
If Conf_Split(0) = "Printer" Then
ReDim Preserve Printer(TotalPrinters)
Printer(TotalPrinters) = Conf_Split(1)
TotalPrinters = TotalPrinters + 1
End If
If Conf_Split(0) = "DefaultPrinter" Then DefaultPrinter = Conf_Split(1)
If Conf_Split(0) = "NetworkDriveName" Then
ReDim Preserve NetworkDriveName(TotalNetworkDriveName)
NetworkDriveName(TotalNetworkDriveName) = Conf_Split(1)
TotalNetworkDriveName = TotalNetworkDriveName + 1
End If
If Conf_Split(0) = "NetworkDrivePath" Then
ReDim Preserve NetworkDrivePath(TotalNetworkDrivePath)
NetworkDrivePath(TotalNetworkDrivePath) = Conf_Split(1)
TotalNetworkDrivePath = TotalNetworkDrivePath + 1
End If
If Conf_Split(0) = "ExternalScript" Then
ReDim Preserve PathExternalScript(TotalPathExternalScript)
PathExternalScript(TotalPathExternalScript) = Conf_Split(1)
TotalPathExternalScript = TotalPathExternalScript + 1
End If
End If
End If
End If
End If
Next
LoadConfig = "Ok"
If Err.Number <> 0 Then LoadConfig = "Error"
End function
'==========================================================================
'==========================================================================
Function OpenLogFile() 'Функция для открытия лог файла
On Error Resume Next
If LogPath = Empty Then LogLevel = "OFF"
If LogLevel <> "OFF" Then
Select Case LogReWrite
Case "ON" 'Ведение лога включенно и необходима перезапись лога при каздом выполнении скрипта
Set File = FSO.OpenTextFile(LogPath, ForWriting, true)
If Err.Number <> 0 Then
MsgBox ("Источник: Logon Script" & chr(13) & chr(13) & _
"Ошибка: Ошибка создания LOG файла." & chr(13) & _
"Причина: Отсутствует доступ к домашнему каталогу пользователя" & chr(13) & _
" или у него нет прав на запись.")
Err.Clear
End If
Case "OFF" 'Ведение лога включенно и перезапись лога запрешена
Set File = FSO.OpenTextFile(LogPath, ForAppending, true)
If Err.Number <> 0 Then
MsgBox ("Источник: Logon Script" & chr(13) & chr(13) & _
"Ошибка: Ошибка открытия LOG файла." & chr(13) & _
"Причина: Отсутствует доступ к домашнему каталогу пользователя" & chr(13) & _
" или у него нет прав на запись.")
Err.Clear
End If
Case Else 'Ведение лога включенно и необходима перезапись через каждые ХХ дней
'Считываем весь лог файл
Dim LogFile
Dim SplitLogFile
Dim LogData
Dim SearchData
Dim LogFile_Size
If (FSO.FileExists(LogPath)) Then
Set File = FSO.GetFile(LogPath)
LogFile_Size = File.Size
Set File = Nothing
LogFile = ""
If LogFile_Size > 0 Then
Set File = FSO.OpenTextFile(LogPath, ForReading, false)
LogFile = File.ReadAll
File.Close
End If
Set File = Nothing
End if
'Создаем пустой лог файл
Set File = FSO.OpenTextFile(LogPath, ForWriting, true)
'Разбираем все сообщения лога
SplitLogFile = Split(LogFile, "===============::: ", -1, 1)
'Пересобираем лог удаляя устаревшие записи
For SearchData = 1 to Ubound(SplitLogFile)
LogData = cDate(Left(SplitLogFile(SearchData),10))
if LogData >= Date - LogReWrite Then
File.WriteLine("===============::: " & Left(SplitLogFile(SearchData), len(SplitLogFile(SearchData))-2))
End if
Next
End Select
SpaceNow = 19-Len(Now): If SpaceNow < 0 Then SpaceNow = 0
SpaceLogLevel = 5-Len(LogLevel): If SpaceLogLevel < 0 Then SpaceLogLevel = 0
SpaceLogReWrite = 3-Len(LogReWrite): If SpaceLogReWrite < 0 Then SpaceLogReWrite = 0
File.WriteLine("===============::: " & Now & Space(SpaceNow) & " ::: Log " & Space(SpaceLogLevel) & "[" & LogLevel & "] ::: Перезапись лога " & Space(SpaceLogReWrite) & "[" & LogReWrite & "] :::===============" & chr(13) & chr(10))
File.WriteLine(LogMessage(0) & WshNetwork.ComputerName)
File.WriteLine(LogMessage(1) & OSVersion())
End if
If Err.Number <> 0 Then
MsgBox ("Источник: Logon Script" & chr(13) & chr(13) & _
"Ошибка: Неизвестная ошибка работы с LOG файлом." & chr(13) & _
"Причина: Отсутствует доступ к домашнему каталогу пользователя" & chr(13) & _
" или у него нет прав на запись.")
Err.Clear
End If
End function
'==========================================================================
'==========================================================================
Function CloseLogFile() 'Функция для закрытия лог файла
'Закрываем лог
If LogLevel <> "OFF" Then
File.WriteLine(chr(13) & chr(10) & LogMessage(9) & Now)
File.WriteLine(LogMessage(10))
File.close
Set File = Nothing
End If
End function
'==========================================================================
'==========================================================================
Function AddPrinters() 'Функция для мапирования сетевых принтеров
'Подключаем сетевой принтер
For i = 0 to TotalPrinters -1
AddPrinter (Printer(i))
If LogLevel <> "OFF" Then
If Err.Number = 0 and LogLevel = "FULL" Then
File.WriteLine(LogMessage(2) & Printer(i))
Else
If Err.Number <> 0 Then
File.WriteLine(LogMessage(3) & Printer(i))
Select Case Err.Number
Case "-2147023095" File.WriteLine(LogMessage(11)) 'Имя принтера задано неверно
Case "-2147023170" File.WriteLine(LogMessage(14))
Case "462" File.WriteLine(LogMessage(15))
Case Else
SpaceLogMessage = 81-Len(LogMessage(12)): If SpaceLogMessage < 0 Then SpaceLogMessage = 0
File.WriteLine(LogMessage(12)) & Space(SpaceLogMessage) & "[Err: " & Err.Number & "]"
End Select
End if
End if
End if
Err.Clear
Next
End function
'==========================================================================
'==========================================================================
Function AddPrinter(Printer)
On Error Resume Next
Err.Clear
WshNetwork.AddWindowsPrinterConnection Printer
End function
'==========================================================================
'==========================================================================
Function SetDefaultPrinters() 'Функция для установки принтера по умолчанию
'Назначаем принтер по умолчанию
If DefaultPrinter <> Empty Then
SetDefaultPrinter(DefaultPrinter)
If LogLevel <> "OFF" Then
If Err.Number = 0 and LogLevel = "FULL" Then
File.WriteLine(LogMessage(4) & DefaultPrinter)
Else
If Err.Number <> 0 Then
File.WriteLine(LogMessage(6) & DefaultPrinter)
Select Case Err.Number
Case "-2147352567" File.WriteLine(LogMessage(13)) 'Принтер с таким именем отсутсвует
Case Else
SpaceLogMessage = 81-Len(LogMessage(12)): If SpaceLogMessage < 0 Then SpaceLogMessage = 0
File.WriteLine(LogMessage(12)) & Space(SpaceLogMessage) & "[Err: " & Err.Number & "]"
End Select
End if
End if
End if
Err.Clear
Else
If LogLevel = "FULL" Then File.WriteLine(LogMessage(4) & LogMessage(5))
End If
End function
'==========================================================================
'==========================================================================
Function SetDefaultPrinter(Printer)
On Error Resume Next
Err.Clear
WshNetwork.SetDefaultPrinter Printer
End function
'==========================================================================
'==========================================================================
Function MapNetworkDrives() 'Функция для мапирования сетевых дисков
'Подключаем сетевые диски
For i = 0 to TotalNetworkDriveName -1
If NetworkDriveName(i) = Empty Then NetworkDriveName(i) = " "
MapNetworkDrive(i)
If LogLevel <> "OFF" Then
If Err.Number = 0 and LogLevel = "FULL" Then
File.WriteLine(LogMessage(16) & NetworkDriveName(i) & " на " & NetworkDrivePath(i))
Else
If Err.Number <> 0 Then
Select Case Err.Number
Case "-2147024811"
If LogLevel = "FULL" Then
File.WriteLine(LogMessage(18) & NetworkDriveName(i) & " на " & NetworkDrivePath(i))
File.WriteLine(LogMessage(19)) 'Такой сетевой диск уже существует
End if
Case "-2147023694" File.WriteLine(LogMessage(17) & NetworkDriveName(i) & " на " & NetworkDrivePath(i))
File.WriteLine(LogMessage(20)) 'Локальное имя устройства уже используется для подключения к другому сетевому ресурсу
Case "-2147023693" File.WriteLine(LogMessage(17) & NetworkDriveName(i) & " на " & NetworkDrivePath(i))
File.WriteLine(LogMessage(21)) 'Сетевой путь не существует или не доступен
Case "-2147024829" File.WriteLine(LogMessage(17) & NetworkDriveName(i) & " на " & NetworkDrivePath(i))
File.WriteLine(LogMessage(22)) 'Сетевой путь не указан
Case "-2147023696" File.WriteLine(LogMessage(17) & NetworkDriveName(i) & " на " & NetworkDrivePath(i))
File.WriteLine(LogMessage(23)) 'Указано неверное имя устройства
Case Else
SpaceLogMessage = 81-Len(LogMessage(12)): If SpaceLogMessage < 0 Then SpaceLogMessage = 0
File.WriteLine(LogMessage(12)) & Space(SpaceLogMessage) & "[Err: " & Err.Number & "]"
End Select
End if
End if
End if
Err.Clear
Next
End function
'==========================================================================
'==========================================================================
Function MapNetworkDrive(Number)
On Error Resume Next
Err.Clear
WshNetwork.MapNetworkDrive NetworkDriveName(Number), NetworkDrivePath(Number), "true"
End function
'==========================================================================
'==========================================================================
Function RunExternalScripts()
'Запускаем внешнии скрипты
For i = 0 to TotalPathExternalScript -1
RunExternalScript(i)
If LogLevel <> "OFF" Then
If Err.Number = 0 and LogLevel = "FULL" Then
File.WriteLine(LogMessage(26) & PathExternalScript(i))
Else
If Err.Number <> 0 Then
File.WriteLine(LogMessage(27) & PathExternalScript(i))
Select Case Err.Number
Case "-2147024894" File.WriteLine(LogMessage(28)) 'Не удалось найти указанный файл.
Case Else
SpaceLogMessage = 81-Len(LogMessage(12)): If SpaceLogMessage < 0 Then SpaceLogMessage = 0
File.WriteLine(LogMessage(12)) & Space(SpaceLogMessage) & "[Err: " & Err.Number & "]"
End Select
End if
End if
End if
Err.Clear
Next
End function
'==========================================================================
'==========================================================================
Function RunExternalScript(Number)
On Error Resume Next
Err.Clear
WshShell.Run PathExternalScript(Number), 0, False
End function
'==========================================================================
'==========================================================================
вэб-морду давать уже не буду, так как напрямую к вопросу подключения почты это не относится )) хотя если нужна, могу дать, мне не жалко.
если доберусь до работы и в суете не забуду, то вставлю код с обработкой подключения ящиков. но там все просто, фактически нужно просто загнать в реестр немного буковок...
|