Соединение удаленного доступа и отравка почты.

Использование бесплатных ActiveX для управления соединением удаленного доступа (передача пароля, логина, установка соединения, разрыв и т.д.) и отправки почты (также с разнообразными настройками).
Visual FoxPro CLUB-Соединение удаленного доступа и отравка почты.

Соединение удаленного доступа и отравка почты. Отправка почты с установкой dial-up соединения.

-------------------------------

Внимание! В связи с тем, что многие ссылки, указанные ниже, стали недоступны, все компоненты выложены в архиве ras.zip:
onlinecontrol.ocx - ULSETCH Online Control;
rascontrol.ocx - ULSETCH RasDial Control;
sasmtp.dll и sasmtp.chm - SoftArtisans mailer и документация к нему;
rasdial.ocx - Coll Stf RasDial Control.
Компоненты надо устанавливать вручную (если выкладывать с инсталяторами, то архив на порядок больше получается).

--------------------------------
Возникла задача: отправить клиенту еженедельный отчет почтой с вложением.

Решил разбить на 2 этапа:
1) Сделать отправку письма с вложением.
2) Добавить к первому пункту автоматическое соединение (dial-up) и разрыв его.

1) Посмотрев статью Журавлева, попробовал сделать через MAPI - получилось, но не совсем: на одной машине почта оказалась в Outlook-e, на другой - запросила настроить Exchange. Стал искать ActiveX. На www.activeserverpages.ru неплохая коллекция (хотя на www.vbip.com может и лучше, но я на него выбрался позже), в том числе несколько для отправки почты (что приятно - бесплатные). Скачав и установив их, я остановился на ActiveX SA-SMTPMail фирмы SoftArtisans (www.softartisans.com). Его можно скачать по адресу http://support.softartisans.com/eval/ (надо заполнить регистационную форму). Имеет свой инсталятор, так что руками ничего регистрировать не пришлось. Свойства и методы подробно описаны в help-е. Если коротко, то создаем объект: loMailer = createobject("SoftArtisans.SMTPMail"), устанавливаем свойства, вызываем метод SendMail(), который возвращает .T., если письмо отправлено и .F. - в противном случае.

2) В разделе решения лежит пример кода из книги А.Горева. Его основной недостаток - отсутствие возможности из программы разорвать связь. В конференции говорится про функцию HangUp, но подробных объяснений я не нашел (м.б. плохо искал). Найти подробное описание RAS (Remote Access Service) и, конкретно, функции HangUp() можно в msdn (http://msdn.microsoft.com), но я снова решил поискать ActiveX. И снова нашел бесплатный! На сайте www.vbip.com (Visual Basic) раздел Take&Use, подраздел Components, установить поиск по категории RAS/Connect (http://www.vbip.com/components/). Я установил компонент RasDial от COOLSTF (видимо www.coolstf.com) и RasControl и Online Control от ULSETCH Software (www.ulsetch.cjb.net). Компоненты от ULSETCH имеют инсталятор и, опять же, руками ничего регистрировать не пришлось. Online Control имеет только одно свойство и позвляет определить, находится ли пользователь в сети или нет. RasControl позволяет устанавливать соединение, НО только из уже имеющихся на машине. Если Вы не боитесь, что украдут пароли, то просто создаете соединение, устанавливаете все атрибуты (Имя пользователя, пароль, флажок "запомнить пароль"), затем в программе указываете в свойстве EntryName имя вашего соединения, вызываете метод Connect(), а потом, когда надо Disconnect(). Мне хотелось поэкспериментировать дальше, поэтому я поставил еще и RASDial от CoolStf. Этот коспонент требует ручной установки, но все довольно просто: копируем .ocx в каталог WINDOWSSYSTEM (для Windows 9x) и запускаем REGSVR32 WindowsSystemRASDIAL.OCX (Windows 9x), для NT - WinNTSYSTEM32. Всё. Компонент позволяет установить из программы пароль, имя пользователя, телефон дозвона и т.д. (в файле rasdial.txt полное описание) При указании телефона дозвона, набор номера велся в тональном режиме, победить это я не смог. Еще один важный параметр AsyncMode - определяет поведение компонента ( возвращает управление программе сразу или после результата дозвона). Надо ставить .F. (по крайней мере, у меня иначе не работало). Интересно, что в описании компонента есть замечание для VFP программистов: Установить _vfp.AutoYield = .F. в процессе работы компонента. Набор параметров, который позволил мне дозвониться и установить связь приведен в программе.

Важное отличие между пунктами: все компоненты из второго пункта нужно положить на форму (Cоздать новую немодальную форму, щелкнуть на OLE Control Container, выбрать на форме место, установить в появившемся окне Insert Control и выбрать из списка нужный ActivX, сохранить форму) У меня на форме лежат Online Control (oleOnlineTest) и RASDial Control (oleRasDialer)

Собственно текст программы :

************************************************************************************
* Программа автоматической отправки почты *
************************************************************************************

set console off
set talk off
set escape off
set date german
set century on
set hours to 24

_vfp.AutoYield = .F. && это советуют сделать разработчики RasDial Control

local lcFormFolder
lcFormFolder = "" && путь к каталогу, где лежит форма с ActiveX компонентами
set path to &lcFormFolder

*
* Производим необходимые действия, например, готовим отчет в файл c:demo.txt
*

local loMailer

loMailer = createobject("SoftArtisans.SMTPMail")

loMailer.FromName = "Ivan Ivanov"
loMailer.FromAddress = "vanya@ivanov.ru"
loMailer.bodytext = "First E-mail"
loMailer.replyto = "vanya@ivanov.ru"
loMailer.subject = "Test"
loMailer.smtplog = "c:mysmtplog.txt" && файл, в который сбрасывается информация о процессе отправки
loMailer.RemoteHost = " " && надо указать адрес сервера, через который будет отправляться почта
loMailer.addrecipient("First Recipientr", "semen@semenov.ru")
loMailer.addattachment("c:demo.txt")
wait window 'Данные подготовлены. Сейчас попытаемся отправить!' nowait

public goRasForm
do form <имя формы с ActiveX компонентами> name goRasForm

local loRasDial, lnStatus, llMailSent, loOnlineTest

loOnlineTest = goRasForm.oleOnlineTest
wait window 'Проверяем в сети или нет...' nowait

if loOnlineTest.Connected
wait window 'Уже в сети ...' nowait
llMailSent = loMailer.SendMail()
else

wait window 'Дозваниваемся ...' nowait

loRasDial = goRasForm.oleRasDialer
loRasDial.AsyncMode = .F.
loRasDial.EntryName = "AUTOSEND" && Необходимо завести соединение с таким именем (или с другим, но тогда изменить здесь)
loRasDial.UserName = "" && Заменить на реальное имя пользователя
loRasDial.Password = "" && и пароль
lnStatus = loRasDial.Dial()

if lnStatus < 600
llIsOnline = .T.
wait window 'Соединились, пытаемся отправить...' nowait
llMailSent = loMailer.SendMail()
endif
loRasDial.HangUp()
wait window 'Разорвали соединение...' nowait

endif

goRasForm.Release()

if llMailSent
wait window 'Письмо отправлено...' nowait
else
wait window "Ошибки при отправке письма:"+loMailer.Response nowait
endif

wait clear

release all

_vfp.AutoYield = .T.

return

* В config.fpw пишем screen = off, создаем .exe,
* устанавливаем в каком-нибудь планировщике его еженедельный запуск,
* и отчет автоматически отправляется клиенту. Задача решена.

Если есть вопросы или замечания пишите lf@newmail.ru
Леонид Фишкис

P.S. Если будете искать информацию по соединению удаленного доступа, то ключевые слова на "Remote Access" на английском и "Удаленное соединение" на русском. Я долго искал по "Connect" и "Удаленный доступ"!

Автор: Леонид Фишкис
0

Автор публикации

не в сети 1 год

Joys

2
Комментарии: 5Публикации: 200Регистрация: 25-06-2000
Вложенные файлы
#
Тип файла
Размер
Название
1 .zip 173,96 КБ 128ras
Оставить комментарий
Авторизация
*
*
Генерация пароля