FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9207
Вход
Соединение удаленного доступа и отравка почты.

Использование бесплатных 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" и "Удаленный доступ"!

 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (4.996) Вложение [173.96]kb
Дополнения пользователей
Соединение удаленного доступа и отравка почты.
[+][?]
Гончаров Н.А.
27.08.01 11:19:50

На счет тонового и пульсового дозвона.
"p9999999" пульсовый.
Кто будет скачивать эту компоненту, рекомендую версию 1.2. Она не вешает рекламу и набор свойств и
методов почти такойже как и в 2.0.
Белюкова Е.В.
21.02.02 13:35:11

Про ActiveX SA-SMTPMailЖ

А как при создании дистрибутива, включать в него smtpmailV201E.exe? 
Или можно как-то включить в него лишь сам компонент?
(или уже старая стала, но никак его не найду). 
Белюкова Е.В.
21.02.02 14:27:45

Добавчик:

Извиняюсь за оплошность - наша библиотеку SASMTP.dll.

Кстати, пыталась найти RasDial от COOLSTF и RasControl и Online Control от ULSETCH Software. По
указанным адресам сейчас одни ошибки 404!
Александр Рублев
21.12.02 19:20:32

SASMTP.DLL установил и зарегистрировал в Windows\System. После пытаюсь поместить на форму Online
Control и RASDial Control через Ole control, но... не могу никак обнаружить упомянутые ActiveX в
списке установленных компонентов (регистрацию проверял также в Tools\Options). Каковы же
заголовоки компонент? Или не там смотрю?..
Леонид
28.12.02 19:07:25

sasmtp.dll дает возможность  использовать объект SoftArtisans.SMTPMail, для установки компонент
ULSETCH, необходимо проверить регистрацию соответствующих .ocx файлов. Или я не понял вопроса?
Иосиф Виллер
13.03.03 10:20:52

Работа с e-mail из VFP
При попытке установить "OnLine Control.OCX" на форму
возникает сообщение '... appropriate license '
в смысле требует лицензию на использование этого
ActiveX. Как это можно обойти?
Может еще подскажете как принимать e-mail из
VisualFoxpro
     Заранее благодарен Иосиф Виллер.
         Украина г.Хмельницкий
VNAU
10.10.05 18:22:46

В данном примере отправка почты возможна лишь при указании в методе AddRecipient непосредственно
адреса электр. почты (who@host.ru). Но есть необходимость отправки почты по псевдониму адресной
книги на сервере Exchange. Как это можно сделать?

Заранее благодарен
Вячеслав
Москва
VNAU
10.10.05 18:27:50

В данном примере отправка почты возможна лишь при указании в методе AddRecipient непосредственно
адреса электр. почты (who@host.ru). Но есть необходимость отправки почты по псевдониму адресной
книги на сервере Exchange. Как это можно сделать?

Заранее благодарен
Вячеслав
Москва
Леонид
11.10.05 08:22:29

К сожалению, я не работал с Exchange, поэтому не могу подсказать, что нужно сделать. Я, наверное,
попробовал бы сначала подключиться к Exchange по OLE и вытащить реальный почтовый адрес по
псевдониму.

С уважением, Леонид
boris_a1
15.05.06 16:50:42

Пример замечательный, но к сожалению я не понял как в данном случае быть с принудительной SMTP
авторизацией. Дело в том что приходиться использовать сервер mail.ru. В протоколе пишет " 503
Administrative prohibition -- authorization required.  Users in your domain are not allowed to
send email without authorization.  " Происходит эт по причине дополнительной авторизации на
сервере. Забирать почту таким образом нет необходимости, поэтому POP3 авторизация мне без нужды.
Нужна только отправка письма с прикрепленным файлом. Подскажите как сделать авторизацию с помощью
этих компонент, уж больно подходит под мои потребности.
[Дополнить]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика