Duru — высылаю мыло

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:TempCLA1CBF_prn.wmf"
objMessage.AddAttachment "C:TempCLA1CC0_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.

Дополнительные сведения на англ. можно взять здесь.