<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: отправка письма с аттачем в The bat!]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=282&amp;type=atom" />
	<updated>2007-01-11T09:43:17Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=282</id>
		<entry>
			<title type="html"><![CDATA[AHK: отправка письма с аттачем в The bat!]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=1628#p1628" />
			<content type="html"><![CDATA[<p>Желание написать данный скрипт у меня возникло давно. За идею я взял статью с данного сайта о использовании AutoHotkey для автоматизации отправки сообщения с аттачем из почтового клиента Outlook Express, поскольку сам Outlook Express не умеет работать с командной строкой и порулить им так просто не удастся. Все действия скрипта основаны на передаче окнам Outlook Express сообщений в результате которых вызывалось окно для вставки файлов, затем мы &quot;передаем&quot; окну путь к вложениям и имена самих файлов, далее скрипт нажимал кнопку &quot;вложить&quot; в итоге мы получаем готовое &quot;к употреблению&quot;сообщение с вложенными файлами, с заполненной темой сообщения и адресатом. The bat! же (в отличии от своего &quot;брата&quot; Outlook Express) имеет множество настроек и охотно работает с командной строкой, либо по своей неопытности я не нашел как вложить несколько файлов (вкладывался только один файл) поэтому пришлось прибегнуть к вспомогательным средствам я имею ввиду AHK<br />скрипт работает так: вызывается The bat! двумя разными путями см.настройки ниже (в зависимости от выбора пользователя) с новым сообщением в котором заполняются поля to: ,subject:, text: (адресат, тема и текст сообщения соотв-но ), затем скрипт&nbsp; посылает команду {Alt}+{PgUp} (вставка файла), далее нам нужно заполнить в окне выбора файлов путь к вложениям, а также имя файла(ов). Чтобы послать окну сообщение нам нужно знать заголовок окна либо класс окна (поскольку заголовок выбора файлов различен для разных версий бата, я использовал имя класса окна узнал с помощью утилиты&nbsp; Winspector Spy) если не поможет можно использовать все-таки заголовок окна, предварительно&nbsp; откорректировав его в настройках пользователя</p><p>Вот мой скиптец</p><div class="codebox"><pre><code>; AutoHotkey Version:   1.0.46.05
; Автор:                Serg Fomichev
; Имя скрипта:          the_bat_example.ahk (v.1)
;*******************************************************************************
; Автоматизация отправки сообщения для The bat!
; сообщение отправляется по указанному в настройках адресу, с заданной темой, с 
; заданным текстом сообщения и наконец прикрепляет файлы из заданной папки 
; после отправки файлы из заданной папки удаляются по желанию пользователя
;*******************************************************************************

#NoEnv      ; запрещаем имена переменных как у переменных окружения (повышаем производительность скрипта)
;#NoTrayIcon ; не отображать иконку скрипта в трее

; ========== НАСТРОЙКИ ПОЛЬЗОВАТЕЛЯ ===============
Attach_Path = c:\test\*.* ; путь к вложению &amp; path
Recipient = test@mail.ru ; адрес получателя
Subject_message = твоя тема сообщения ; тема сообщения
Text_message = Файлы вложены и отправлены с помощью скрипта AutoHotKey ; текст сообщения

;title_insert_files = Прикрепить файл (MIME/Base64) ;заголовок окна вложения файлов (вызывается нажатием в бате {Alt}+{PgUp}
title_insert_files = ahk_class #32770               ;класс окна вложения файлов 

; дополнительные настройки для использования если 
; The bat! не настроен как клиент 
; для обрабоки команды mailto: по умолчанию
The_bat_path = C:\Program Files\The Bat!\thebat.exe ;собственно путь к почтовому клиенту
account = yandex ; имя почтового ящика в бате       
mailto_not_default = 1 ; если 1 то отправление почты будет происходить через команду типа 
                         ;C:\Program Files\The Bat!\thebat.exe /MAILU=MyAccount;S=%O
                         ;EDIT;TO=test@mail.ru;Subj=твоя тема сообщения
; =================================================
Subject_message = &quot;%Subject_message%&quot;         ; приводим к читаемому формату The bat! т.к.  
Text_message    = &quot;%Text_message%`%0a`%0d &quot;   ; он считает пробел следующим параметром

IfNotExist, %Attach_Path% ; если НЕ существует указанного пути, то...
    {   
        MsgBox, 0, Ошибка!,  Проверьте существование путей!`n путь: %Attach_Path% не найден! ; вывод сообщения об ошибке
        Return ; закончить обработку
    }    
IfNotExist, %The_bat_path% ; если НЕ существует указанного пути, то...
    {   
        MsgBox, 0, Ошибка!,  Проверьте существование путей!`n путь: %The_bat_path% не найден! ; вывод сообщения об ошибке
        Return ; закончить обработку
    }
Loop, %Attach_Path%                                  ;считываем в переменную список файлов
    FileList = %FileList% &quot;%A_LoopFileName%&quot;         ;из пути вложений
if     (mailto_not_default=1)
{ 
;Run, &quot;%The_bat_path%&quot; /MAILU=%account%;EDIT;TO=%Recipient%;Subj=%Subject_message%     ;по желанию какая больше нравится
Run, &quot;%The_bat_path%&quot; mailto:%Recipient%?subject=%Subject_message%&amp;body=%Text_message% ;первая создает сообщение по шаблону по умолчанию
;вторая в поле текст сообщения выводит желаемый текст сообщения + вывод запроса типа бат не установлен как клиент по умолчанию, 
;поставь чек не задавать больше вопрос и выбери желаемое действие
}
else
{
Run, mailto:%Recipient%?subject=%Subject_message%&amp;body=%Text_message% ;выполняем собственно команду
}
WinActivate, Редактирование письма -&gt; %Recipient%
WinWait, Редактирование письма -&gt; %Recipient%     ;ждем окно перед нажатием {Alt}+{PgUp} (горячая клавиша бата для вставки файлов)
Send !{PgUp}
WinActivate, %title_insert_files%   ;активируем окно (почему-то после нажатия клавиш вставки файлов было неактивным)
WinWait, %title_insert_files%       ;ждем окно перед посылкой в поле пути к вложениям
ControlSetText, Edit1, %Attach_Path%         ;собственно коментировать нечего итак понятно
Send {Enter}                                 ;посылаем сначала путь жмем энтер
WinWait, %title_insert_files%       ;ждем окна
ControlSetText, Edit1, %FileList%            ;посылаем собственно список файлов из папки с вложениями      
Send {Enter}                                    ;жмем энтер
WinWait, Редактирование письма -&gt; %Recipient%   ;ждем окно с новым письмом
WinWaitClose, Редактирование письма -&gt; %Recipient%  ;можно сразу нажать F2 но для перестраховки что файлы вложились будем нажимать отправить сами
MsgBox, 4, Подтвердите удаление файла(ов), Файлы отправлены, очистить каталог`n%Attach_Path%  ; диалог подверждения удаления файлов вложений
IfMsgBox, No
{
    MsgBox, 0, Информационное сообщение, Не забудьте удалить файлы `nиз папки %Attach_Path% `nвручную!!!
    Return  ; User pressed the &quot;No&quot; button.
}    
IfMsgBox, Yes
{
    FileDelete %Attach_Path%
    MsgBox, 0, Информационное сообщение, Каталог %Attach_Path%`n для дальнейшей работы очищен!
     Return ; 
}</code></pre></div><p>Для написания данного скрипта я использовал материалы с &quot;Серого форума&quot;, статьи, примеры из Хранилища, отдельное спасибо <strong>The gray Cardinal</strong>, а также <strong>Androgen&#039;у</strong> за его скрипты и подробные объяснения к ним. Буду рад, если кто-то поправит или предложит новые идеи по реализации данной задачи.</p>]]></content>
			<author>
				<name><![CDATA[SergFom]]></name>
			</author>
			<updated>2007-01-11T09:43:17Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=1628#p1628</id>
		</entry>
</feed>
