|
Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook |
|
Разное - Проверка достоверности адреса исходящего письма в скрипте MS Outlook
|
Новый участник Сообщения: 15 |
Привет чесной компании!
Вообще - то меня недавно жисть заставила заняться MS Outlook (у меня основная специализация - VisualFox), но понадобился модуль приема-отправки почты через Инет, из под Fox_а, и использование MS Outlook выглядит предпочтительно. Хотя лично мне он не сильно нравится и это ещё мягко сказано (отправленные письма доставляются в папку "Исходящие", а не "Отправленные"; при работе с почтой нужно, чтобы MS Outlook был открыт и.т.д.). На данный момент модуль программы приема - отправки, по крайней мере в тестовом режиме работает (используется VBA), но возникла проблема проверки достоверности адреса ИСХОДЯЩИХ писем (это вроде бы должно быть ДО выполнения метода ....Send()?). Попытки поиска подходящих методов и событий Объектной модели MS Outlook в Инете ничего не дала, хотя копал долго. В Help_е русского Outlook, стоящего у меня - нет ничего (это прерогатива VBA). Help VBA под Outlook_ом - на аглицком ну и как сформулировать строку запроса?. Нашел и скачал отдельный русифицированный Help VBA (версия. 1.0.1.0, 1,65Мб) -> ни черта по объектам, методам и событиям для скриптов для Объектной модели MS Outlook. Единственный сайт на котором можно было кое-что найти по Объектной модели на русском (с контекстным поиском) - <<http://msdn.microsoft.com/ru-ru/library/ms268893.aspx>> - уже почти неделю не работает. Короче, пока - тупик. А начальство - то жаждет результата. В общем - может ли кто - нибудь подсказать, какие методы или свойства VBA для Объектной модели надоть для проверки достоверности адреса исходящего письма использовать и в каком месте скрипта? Было бы также неплохо получить ссылку на приличный русский справочник по описанию объектов, методов и событий для скриптов под VBA Объектной модели MS Outlook (обязательно с поиском!). Буду очень благодарен. Е. Шапиро |
|
Отправлено: 23:22, 16-09-2011 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Jean55:
Цитата Jean55:
Вы можете использовать блокирование по спискам серверов и ключевым словам в адресе/теме/содержимом письма. Т.е., обычная фильтрация. Но суть в том, что тогда Вы не узнаете, что Ваше письмо на данный почтовый адрес не дошло. Вам бы следовало попробовать то, что предлагал сделать выше Delirium, и в #7, и в #9 — Вам многое стало бы понятней. |
||
Отправлено: 22:50, 20-09-2011 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать Ребята, извините ну не могу да и буду я ипользовать программы на РНР, С .... - это обязательная инсталляция программ, и их совмесное использование, много копания, чтобы понять что и как, (ведь я их, не знаю), обеспечение отсутствия конфликтов с Фоксом. Ну да что я Вам рассказываю - сами представляете, что значить хоть чуть-чуть освоить новый язык. Простым дёром чужих примеров, увы не обойтись. Насчет Telnet - покопал пару часов в Инете, ну кое-что конечно понял, но в результате вопросов больше, чем ответов - то есть опять же копать - спрашивать - копать. Хотя конечно интересно, чесное слово - это насчет #7, и наверное #8 (а не #9 в предыдущем письме). Без всяких обид, правда.
Повторюсь: лично мне решение надо искать под Объектной моделью MS Outlook и VBA - он более-менее прост, и как известно инсталлируется автоматом, при установке MS Office. Да и все они (VFP, Outlook, VBA) - продукты одной фирмы, т.е. меньше конфликтов. А решение, похоже есть и довольно простое - отследить уход письма из папки "Исходящие", затем проверить во "Входящих" появление служебного письма о неверном адресе (надеюсь, конечно, что удаление из "Исходящих", идет только после получения по SMTP подтверждения о доставке письма получателю, т.е. появления письма в папке "Входящие") , а затем его (служебное письмо) чесно грохнуть, сделав в Фоксе запись о неработоспособности этого мэйла. Поэтому, если можно подскажите, как пишутся строки методов: - "удалить письмо" (по моему - ????????.Remove.????????) -> кое что накопал, но все равно не все ясно - "выделить месяц" и "выделить год" (из даты письма) это нужно для поиска письма в другом месте программы-> вааще ничо не нашел (а по логике должны быть - к примеру в Фоксе это часто используемые функции) - "найти письмо" (по моему - ????????.Find.????????) -> кое что накопал, но все равно не все ясно Т.е. опять та же самая промблема - отсуствие толкового сайта, где Объектная модель нормально расписана желательно по русски (естественно с функцией поиска). Обычное лазанье по Инету - это собирание информации по крохам и как обычно, проблемы с составлением строки поиска. Так что еще раз прошу прощения и если можно подскажите по этим методам или с ссылкой на толковый сайт. Е. Шапиро |
Отправлено: 02:21, 22-09-2011 | #12 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Jean55, ты столкнешься с одной проблемой, причем сразу - да, по RFC почтовые серверы ОБЯЗАНЫ отправлять NDR (non-delivery report), если адресата не существует, но в реальности часто это отключают. К примеру, у меня отключено, т.к. 98% спама (а это около 350 000 писем/мес) не имеет верного SMTP адреса, и рассылать тонны сообщений о недоставке - лишний трафик и нагрузка. Да, это неверно, а что делать.
Именно поэтому ты можешь и не получить ответа о том, что адресат не существует. Я не могу понять, чем тебе не понравился совет в #9. Смотри: Ты ОДИН раз формируешь список своих адресатов. Загружаешь его на сайт проверки адресов. Получаешь результат, и потом в фоксе делаешь как хочешь - или удаляешь неработающий мейл, или ставишь пометку, что он рабочий. И ВСЕ. После этого перед отправкой достаточно будет проверить флаг напротив ящика и предпринять дальнейшие действия. Все, что мы писали в #7 и #8 - есть по сути, ручная обработка того, что я написал в #9. Не бейся в стену с одним решением, рассмотри и другие варианты. |
------- Отправлено: 02:35, 22-09-2011 | #13 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Jean55, я не понял при чём тут PHP или С. Я предлагал Вам попробовать отправить несколько писем посредством telnet, «ручками» набирая команды протокола SMTP, дабы Вы получили некоторое представление о том, из чего состоит и как именно работает протокол SMTP, не более.
Реализуйте рассылку через CDO непосредственно из-под Visual FoxPro — головной боли втрое меньше будет, изучать лишнего ничего не потребуется, кроме объектной модели самого CDO, где многие интерфейсы похожи на аналогичные из Microsoft Outlook. Можно даже непосредственно работать с протоколами через сокеты. Впрочем, решать Вам. Цитата Jean55:
Microsoft Outlook 2003: Outlook Object Model; Microsoft Outlook 2007: Outlook Object Model Reference Я сомневаюсь, чтобы кто-нибудь переводил полностью всю документацию: объектная модель Microsoft Outlook. |
|
Последний раз редактировалось Iska, 22-09-2011 в 03:05. Отправлено: 02:57, 22-09-2011 | #14 |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать PHP или Си - потому что команды под telnet написаны на PHP, а Си - просто так за компанию, я просто видел и примеры написания скриптов для OUTLOOK и на Си. А нужна ли инсталляция PHP для telnet - это тот вопрос, который я не стал задавать, да похоже и не надо уже и так ясно.
Цитата Delirium:
Фокс - это чистый файл-сервер и модуль отправки будет только на одном компе (у начхальника - остальные обойдутся), т.е. входящий мэйл всегда только один и на него же приходит аттачем почты общее письмо, которое надо поделить и отправить дальше. Теперь кусок из -под Фокса: ****************************************************************** **** MailItem — представляет собой сообщение электронной почты. **** LOCAL loMailItem As OUTLOOK.MailItem objMail = loOutlook.CreateItem(olMailItem) && новое письмо из под Outlook objMail.To = "bla_bla_bla@mail.ru" && адрес куды -> заранее неверный * и * т. * д. objMail.Send && посылаю письмо подальше ****************************************************************** Письмо попадает в "Исходящие", а затем OUTLOOK сам пытается спихнуть его дальше, без моего участия. Потом, если письмо прошло, то запись в Исходящих" ликвидируется, а в "Отправленных" появляется - все это и так, понятно. А вот ежели адреса мэйла не существует, то запись в Исходящих" также ликвидируется, а появляется служебное письмо в МОЕЙ почте "Входящие", что нэт такой партии. Текст письма формирует OUTLOOK и мой адрес наверняка берется из него же, родимого (при формировании данных исходящего письма мэйл моей почты не используется). Я тут экспериментировал со всяческими настойками OUTLOOK, при неверном адресе мэйла получателя, пытаясь отправить почту не в Исходящие", а в "Отправленные" - это позволило бы получить сообщанс об ошибке прямо в Фокс, обработать который было бы делом техники, но увы, похоже дело дохлое. А вот служебных писем об неверном адресе мэйла получателя на мою почту "Входящие получил по полной программе, что задрался удалять. Кстати, вопрос: через сколько времени, после удаления письма из Исходящих" может появиться служебное сообщение в моей почте "Входящие"?. По логике, вроде бы удаление из Исходящих" дожно происходить именно после окончания загрузки служебного сообщения в мою почту "Входящие"?. А если нет, то 10-20 сек достатосно? Цитата Delirium:
За ссылки - спасибо русская MSDN у меня была, но посление две недели не работала, выдавала ошибку (не ты ли ее включил? - шютка). А вот аглицких - не было. И не такой уж большой промблем с их чтением (к примеру, я же не идиот работать с переведенным Фоксом), хотя разобраться в деталях, при чтении документации бывает сложновато, просто по русски это получается быстрее. Е.Шапиро |
||
Отправлено: 19:17, 22-09-2011 | #15 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Цитата Jean55:
Цитата Jean55:
Цитата Jean55:
И ты пытаешься сделать операцию на клиенте, хотя это в корне неверно. Проверка существования адреса, отчеты о недоставке и прочее - это все таки больше серверные вопросы, и перекладывать их на клиента = создавать костыль. Вообще, конечно, основная проблема в том, что для работы используется устаревший язык программирования. Да, фокс гибок и удобен, прост в использовании(сам много лет писал на нем), но для современных технологий надо что то более приближенное к реальности. |
|||
------- Отправлено: 01:12, 23-09-2011 | #16 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Да нет, дело тут не в языке. Просто коллега Jean55 пока плохо представляет себе всю эту механику изнутри, потому больше шаманством занимается.
Я бы вовсе отказался от Outlook и работал бы прямо через CDO. Сама библиотека «Collaboration Data Objects 1.2.1» бесплатна, доступна и легко распространяется посредством групповой политики. Проверку существования почтового адреса можно прикрутить либо непосредственно на этапе вводе адреса (если есть оттуда доступ к сети), либо перед рассылкой. В первом случае для этого будет вполне достаточно заполнить по указанному выше адресу http://verify-email.org/ и отослать форму в том же IE, а затем распарсить полученный результат (или просто проверить наличие «Result: Ok»/«Result: Bad»). Для второго — аналогично по второму вышеприведённому адресу — http://tools.email-checker.com/. 2Delirium: я тут ещё раз посмотрел на http://verify-email.org/ — для любого адреса на ***@mail.ru даёт результат, согласно ответа сервера — «Result: Ok». Выходит, что некоторые и так борются?! |
Отправлено: 05:15, 23-09-2011 | #17 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Угу, есть и такое дело ![]() Да, на указанных адресах есть утилита Email Verifier - http://www.email-unlimited.com/email_verifier.html Там есть очень интересная опция: Цитата:
И еще там есть Email Verifying Script - тоже очень полезная в твоем случае вещь. |
||
------- Отправлено: 06:01, 23-09-2011 | #18 |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать Да понял я люди понял, точнее начинаю понимать - недаром же почти месяц стенку лбом прошибаю.
Сначала, чтобы закрыть тему проверки через "Исходящие" и "Отправленные" - в свойствах письма есть и "From:" и "To:", так что примут его за спам - не знаю. На моем домашнем компе - проходит без промблем. Кстати чем у Вас отсекается спам?. Было бы интересно поэкспериментировать со служебным сообщением. Насчет почтового сервера: у меня, так он то как раз пропускает, а вок какой установлен у клиента - пока просто не знаю, не хоцца показываться без хоть какого - либо результата. Кстати , это тоже важно (почтовый сервер), но отложу на потом. А все остальные возражения и разъяснения вполне логичны и похоже понятны. Цитата Delirium:
Насчет Фокса: для файл-серверных систем малых предприятий еще очень даже... (имел возможность сравнить с наработками на других языках, кстати довольно свежими), мне уже не 30 да и коней на переправе не меняют. В общем, подожду, что там получится с Sedna, а там видно будет. В любом случае - помощь хорошая (да! - кстати не пойму как отправить благодарности на форуме, а надо бы). Да и с CDO думаю теперь можно попробовать (есть примеры с ним для Фокса, но тогда я там мало что понял). Спасибо, думаю еще обращусь с вопросами. Е.Шапиро |
|
Отправлено: 13:34, 23-09-2011 | #19 |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать И ишшо вопрос - думаю попроще. При использовании метода Find:
loOutlook = CREATEOBJECT("outlook.application") loMapi = loOutLook.GetNameSpace("MAPI") loFldr = loMapi.GetDefaultFolder(6) olFind = loFldr.Items.Find('[Subject] = "Налоги_июнь_2011"') -> заголовок входящего письма не находит, т.е. olFind = .NULL. (письмо где-то месячной давности) а вот поиск того же самого olFind с другой текстовой строкой olFind = loFldr.Items.Find('[Subject] = "Delivery Status Notification (Failure)"') где строка - это заголовок служебного сообщения об ошибке (письмо самое свежее в списке) -> находит!!!. Результат - объект. Наименования драл копированием из свойств письма в Outlook - так что без ошибок в строке. Совершено не понятно, в чем причина?. И как с объекта выцыганить нумер письма? А вот Email Verifier и проч. можно и нужно использовать в другом месте - на стадии записи мэйла в данные сотрудника, где запрос с использованием внешних программ вполне уместен (кстати, я эту программу находил, когда искал утилиту с проверкой мэйла из командной строки - одну нашел, но так и не понял, куды она ответ отсылает). Е.Шапиро |
Отправлено: 23:14, 23-09-2011 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Проверка отправки письма с файлом абоненту | dark-------13 | Скриптовые языки администрирования Windows | 1 | 05-05-2011 18:02 | |
Интернет - Outlook Express не открывает письма | Palomnik | Microsoft Windows 2000/XP | 1 | 14-11-2010 16:05 | |
Проверка внешнего IP адреса | Vanilla Dragon | AutoIt | 2 | 18-03-2009 18:55 | |
Не отправляются письма из Outlook Express | miikki | Хочу все знать | 3 | 22-12-2006 14:16 | |
Outlook Express обрезает письма! | grifius | Хочу все знать | 1 | 17-02-2005 07:13 |
|