arrowГлавная arrow Статьи arrow Статьи на разные темы arrow Duru - высылаю мыло Monday, 01 December 2008  
Главное меню
Главная
Новости
Статьи
Комментарии
Файлы
Ресурсы
Ленты новостей
Форум разработчиков
Фотогалерея кларионистов
Пользователи
Общение
Ссылки
Поиск
Контакты
Карта сайта
Ссылки
Softvelocity
Clarion Magazine
Кларион в России
SealSoft Company
IngaSoft Plus
Авторизация (CB)
Счетчик



who's online
Duru - высылаю мыло Версия для печати Отправить на e-mail
Написал Still Zero   
17.11.2006

Disclaimer

В процессе разработки xReportPreview возникла идея отправки отчетов по почте. С другой стороны, я не хотел разбираться с SMTP. MAPI я не признаю, но это моя личная неприязнь. Встроенные шаблоны/классы...вообщем лень толкает на поиск чего-нибудь еще более простого. Таким образом, я пришел к выводу что VBS (Visual Basic Script) это то, что мне нужно. Т.е. моя цель – продемонстрировать саму возможность отправки отчета по почте. Если вам не нравится технология, то вы можете использовать свой способ.

Общие сведения
Те, кто использовал макросы в MS Word/Excel уже соприкасался с VBA (Visual Basic for Application), VBS практически та же песня. MS позволяют запускать скрипты VBS также, как это происходит, например, с bat-файлами. Т.е. вы создаете файл с расширением VBS, например, mytestfile.vbs, пишете в нем скрипт, и он будет выполняться в ОС. VBS также можно применять в html-файлах. VBS скрипт, по-моему, даже можно не оформлять тэгами SCRIPT как это делается для JavaScript, но здесь могу ошибаться.
 
Как по итогу оказалось, все использование VB скрипта заключалось в написании всего лишь одной строки, которая создает OLE-объект. Остальные строки – это работа уже непосредственно с объектом. Я знаю, что некоторые достаточно успешно работают с OLE в самом Кларионе, у меня же как-то не сложилось. По той причине, что использовать OLE команды приходится не совсем так, как описано в документации и эти фигурные скобки {}...
 
В качестве OLE-объекта выступает Collaboration Data Object (CDO) – это надстройка над MAPI. Ранее CDO называлось OLE Messaging. Как и любой объект, CDO должен быть установлен в ОС. С этим возникают некоторые проблемы, так как в MSDN все упоминания CDO связываются с Outlook-ом. Поэтому возникает чувство, что CDO устанавливается в систему при установке Outlook-а. В другом месте, я нашел описание, что, начиная с Win2K этот объект входит в поставку самой ОС. Естественно, что при отсутствии объекта вы не сможете отправить почту.
 
Не к месту, но для общего развития: CDO можно использовать в хранимых процедурах MS SQL-сервера вместо использования xp_sendmail etc. Подробнее об этом на sql.ru.

Реализация
Я думаю, что вы без труда создадите в Кларионе, текстовый файл с расширением vbs. Для запуска скрипта необходимо использовать API ShellExecute. Сам скрипт предельно прост и практически каждая строка является self documented. Поэтому просто привожу текст скрипта (файл send_mail.vbs):


Set  objMessage = CreateObject("CDO.Message")
objMessage.Subject = "E-mail testing"
objMessage.From = "your_name@your_domen.com" 
objMessage.To = "some_name@some_dome.com" 
objMessage.TextBody = ""
objMessage.AddAttachment "C:\Temp\CLA1CBF_prn.wmf"
objMessage.AddAttachment "C:\Temp\CLA1CC0_prn.wmf"
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 ‘метод отправки
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.your_domen.com"
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 ‘ способ аутенфикации
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = "your_name@your_domen.com"
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "your_password_here"
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
objMessage.Configuration.Fields.Update
objMessage.Send


Стоит заметить, что для отправки необходимо наличие соединения с интернетом и, естественно, разрешение хождения SMTP. В случае возникновения ошибок, появится стандартное окно оповещения о ошибках при выполнении сценария с описанием возникшей ошибки.
 
Полную реализацию смотрите в примере, поставляемом вместе с xReportPreview, начиная с версии 3.4.
 
Дополнительные сведения на англ. можно взять здесь.

комментариев

Only registered users can write comments.
Please login or register.

Powered by AkoComment 2.0!

Последнее обновление ( 17.11.2006 )
 
< Пред.   След. >

вверх страницы