Форум сайта python.su
Представьте есть список email'ов. И нужно проверить какой из них валидный (существующий), а какой уже списанный. При этом человек владеющий данным адресом почты не должен почувствовать этого (т.е. не нужно его беспокоить присылая всякий спам). Сейчас я смотрю в стандартные модули, а именно email. И так как я жуткий лентяй, то прошу поделиться Вас своим опытом (если есть).
Офлайн
Чёткого ответа не знаю, но сами посудите: если бы стандартными средствами можно было “пингануть” email, как быстро бы наполнялись спамерские базы, путём обычного словарного перебора. И роботов-пауков писать не пришлось бы.
Кстати, вы случаем не торговец адресными базами? Иной пользы от подобных шпионских проверок не видно.
Офлайн
MaximboНу нет ). Просто у меня большой список email' ов и мне нужно удалять информацию с сервера о ненужных (невалидных). Честно ). У меня благородные цели (не вылететь с работы).
Кстати, вы случаем не торговец адресными базами? Иной пользы от подобных шпионских проверок не видно.
Офлайн
странная задача. а ваша база e-mail – это в принципе адреса на разных серверах, или на вашем собственном сервере?
Офлайн
bialixНа нашем собственном. Только я не знаю как к нему достучаться. Может через Outlook как нибудь проверять … Там ведь есть записная книжка, где есть все адреса. Вообщем не понятно пока.
странная задача. а ваша база e-mail – это в принципе адреса на разных серверах, или на вашем собственном сервере?
Офлайн
Вот такой вот скрипт отрыл. То что нужно, но говорит, что записей 0. И правда! Кстати Outlook 2003 SP 2 у меня. Контактов у меня действительно 0. Мне нужно в Address Book залезть. Ищу в MSDN.
import win32com.client
DEBUG = 0
class MSOutlook:
def __init__(self):
self.outlookFound = 0
try:
self.oOutlookApp = \
win32com.client.Dispatch("Outlook.Application")
self.outlookFound = 1
except:
print "MSOutlook: unable to load Outlook"
self.records = []
def loadContacts(self, keys=None):
if not self.outlookFound:
return
# this should use more try/except blocks or nested blocks
onMAPI = self.oOutlookApp.GetNamespace("MAPI")
ofContacts = \
onMAPI.GetDefaultFolder(win32com.client.constants.olFolderContacts)
if DEBUG:
print "number of contacts:", len(ofContacts.Items)
for oc in range(len(ofContacts.Items)):
contact = ofContacts.Items.Item(oc + 1)
if contact.Class == win32com.client.constants.olContact:
if keys is None:
# if we were't give a set of keys to use
# then build up a list of keys that we will be
# able to process
# I didn't include fields of type time, though
# those could probably be interpreted
keys = []
for key in contact._prop_map_get_:
if isinstance(getattr(contact, key), (int, str, unicode)):
keys.append(key)
if DEBUG:
keys.sort()
print "Fields\n======================================"
for key in keys:
print key
record = {}
for key in keys:
record[key] = getattr(contact, key)
if DEBUG:
print oc, record['FullName']
self.records.append(record)
if __name__ == '__main__':
if DEBUG:
print "attempting to load Outlook"
oOutlook = MSOutlook()
# delayed check for Outlook on win32 box
if not oOutlook.outlookFound:
print "Outlook not found"
sys.exit(1)
fields = ['FullName',
'CompanyName',
'MailingAddressStreet',
'MailingAddressCity',
'MailingAddressState',
'MailingAddressPostalCode',
'HomeTelephoneNumber',
'BusinessTelephoneNumber',
'MobileTelephoneNumber',
'Email1Address',
'Body'
]
if DEBUG:
import time
print "loading records..."
startTime = time.time()
# you can either get all of the data fields
# or just a specific set of fields which is much faster
oOutlook.loadContacts()
#oOutlook.loadContacts(fields)
if DEBUG:
print "loading took %f seconds" % (time.time() - startTime)
print "Number of contacts: %d" % len(oOutlook.records)
Отредактировано (Июнь 13, 2007 15:30:10)
Офлайн