PDA

Показать полную графическую версию : [решено] Выслать на email точное время включения компа


McLotos
04-06-2012, 08:55
Добрый день, мной написан небольшой скриптик, который прописан в автозапуск системы и при включении компа отправляет на заданные email письмо, подскажите как сделать чтобы это письмо отправлялось в скрытом режиме, и независимо от интерфейса. Сейчас возникают некоторые траблы, из-за того что не у всех юзеров почтовые программы идентичны.

#include <Inet.au3>
Run(@ProgramFilesDir & '\Microsoft Office\Office12\OUTLOOK.exe')
$s_MailTo="recipient@domain.com"
$s_MailSubject="Work Day"
$s_MailBody="I'm on line"
_INetMail($s_MailTo, $s_MailSubject, $s_MailBody)
sleep(2000)
ControlClick("WorkDay - Сообщение (HTML)","Отправит&ь",4256)

1. Подскажите, нельзя ли отправлять письмо с русским текстом?
2. Логично ли переписать этот код так, чтобы она просто записывала время запуска, затем отправляла письмо с указанием точного времени запуска.

Iska
04-06-2012, 09:51
Например, так:
AutoItSetOption("MustDeclareVars", 1)

Local Const $cdoSendUsingPort = 2
Local Const $cdoBasic = 1

Local Const $sPartSchema = "http://schemas.microsoft.com/cdo/configuration/"


Local $oMessage = ObjCreate("CDO.Message")
Local $oConfiguration = ObjCreate("CDO.Configuration")

Local $sFile = "C:\Temp\Some.txt"


With $oConfiguration.Fields
.Item($sPartSchema & "sendusing") = $cdoSendUsingPort
.Item($sPartSchema & "smtpauthenticate") = $cdoBasic
.Item($sPartSchema & "smtpserver") = "smtp.mail.com"
.Item($sPartSchema & "smtpserverport") = 25
.Item($sPartSchema & "sendusername") = "login"
.Item($sPartSchema & "sendpassword") = "password"

.Update
EndWith

With $oMessage
.To = "to@mail.com"
.From = "from@mail.com"
.Subject = "Тема письма"

.Configuration = $oConfiguration

.TextBody = "Первая строка" & @CRLF & _
"Очередная строка" & @CRLF & _
"Последняя строка"

If FileExists($sFile) = 1 Then
.AddAttachment($sFile)
EndIf

.Send
EndWith

$oConfiguration = 0
$oMessage = 0

Exit(0)

Возможно, понадобится библиотека Collaboration Data Objects (http://www.microsoft.com/downloads/details.aspx?FamilyID=2714320d-c997-4de1-986f-24f081725d36&DisplayLang=en).
2. Логично ли переписать этот код так, чтобы она просто записывала время запуска, затем отправляла письмо с указанием точного времени запуска. »
Вопрос не понятен.

Creat0R
04-06-2012, 16:25
Предупреждение за нарушение правил форума, пункт 2.7 (http://forum.oszone.net/rules.html#2.7) и пункт 3.19 (http://forum.oszone.net/rules.html#3.19):

2.7: В заголовке темы обязательно обозначайте название предмета, которого касается вопрос, а в теле сообщения максимально подробно опишите проблему (приведите аппаратную/программную конфигурацию, а также изложите ситуацию, в которой возникает проблема)...
Подробнее о принципах создания тем читайте в этом документе (http://forum.oszone.net/faq.php?faq=vb_read_and_post#faq_thread) и Правилах форумов.

3.19: Запрещается... Создавать темы, имеющие неинформативные или состоящие из заглавных букв заголовки (например, "Помогите!", "HELP!", "У меня проблема"). Такие темы будут закрыты или перенесены в Тест-форум. Если вы хотите вернуть перенесенную тему обратно, пока ее не закрыли в Тест-форуме, измените ее заголовок на осмысленный (http://forum.oszone.net/faq.php?faq=vb_board_usage#faq_rename_thread) и напишите об этом в теме.

Переименуйте пожалуйста тему (Как переименовать свою тему? (http://forum.oszone.net/faq.php?faq=vb_board_usage#faq_rename_thread)).

McLotos
06-06-2012, 16:25
Вопрос не понятен. »
Ну на сколько будет логичнее, если скрипт при запуске будет просто запоминать во сколько его включили, и спустя где-то минут 5 будет отсылать письмо с точным временем запуска.

Iska
06-06-2012, 18:06
Лучше брать время старта из самой системы, например, посредством Wbem:
wmic.exe OS get LastBootUpTime

Делать?

P.S. Почему отсылать не сразу, а через пять минут?

McLotos
08-06-2012, 07:45
Делать? »
не понял суть вопроса
P.S. Почему отсылать не сразу, а через пять минут? »
потому-что сразу винда не даст отправить, она тупо не успевает.

Iska
08-06-2012, 13:58
Тогда примерно так:
AutoItSetOption("MustDeclareVars", 1)

Local Const $cdoSendUsingPort = 2
Local Const $cdoBasic = 1

Local Const $sPartSchema = "http://schemas.microsoft.com/cdo/configuration/"

Sleep(5 * 60 * 1000)

Local $oMessage = ObjCreate("CDO.Message")
Local $oConfiguration = ObjCreate("CDO.Configuration")

Local $oSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
Local $oSWbemServicesEx = $oSWbemLocator.ConnectServer(".", "root\cimv2")
Local $oSWbemObjectEx


For $oSWbemObjectEx In $oSWbemServicesEx.InstancesOf("Win32_OperatingSystem")
ExitLoop
Next

With $oConfiguration.Fields
.Item($sPartSchema & "sendusing") = $cdoSendUsingPort
.Item($sPartSchema & "smtpauthenticate") = $cdoBasic
.Item($sPartSchema & "smtpserver") = "smtp.mail.com"
.Item($sPartSchema & "smtpserverport") = 25
.Item($sPartSchema & "sendusername") = "login"
.Item($sPartSchema & "sendpassword") = "password"

.Update
EndWith

With $oMessage
.To = "to@mail.com"
.From = "from@mail.com"
.Subject = "Last bootup time: " & @ComputerName

.Configuration = $oConfiguration

.TextBody = "Last bootup time for [" & @ComputerName & "] is " & FormatWMIDateTime($oSWbemObjectEx.LastBootUpTime())
.Send
EndWith

$oSWbemObjectEx = 0
$oSWbemServicesEx = 0
$oSWbemLocator = 0

$oConfiguration = 0
$oMessage = 0

Exit(0)

Func FormatWMIDateTime($sWMIDateTime)
Return ( _
StringMid($sWMIDateTime, 7, 2) & "." & _
StringMid($sWMIDateTime, 5, 2) & "." & _
StringMid($sWMIDateTime, 1, 4) & " " & _
StringMid($sWMIDateTime, 9, 2) & ":" & _
StringMid($sWMIDateTime, 11, 2) & ":" & _
StringMid($sWMIDateTime, 13, 2) _
)
EndFunc

McLotos
08-06-2012, 22:52
Iska, спасибо, обязательно попробую этот вариант. Вы как всегда, каждый ответ сразу в очку.




© OSzone.net 2001-2012