Найти - Пользователи
Полная версия: Проверка на валидность email'a
Начало » Python для экспертов » Проверка на валидность email'a
1
guest01
Представьте есть список email'ов. И нужно проверить какой из них валидный (существующий), а какой уже списанный. При этом человек владеющий данным адресом почты не должен почувствовать этого (т.е. не нужно его беспокоить присылая всякий спам). Сейчас я смотрю в стандартные модули, а именно email. И так как я жуткий лентяй, то прошу поделиться Вас своим опытом (если есть).
Maximbo
Чёткого ответа не знаю, но сами посудите: если бы стандартными средствами можно было “пингануть” email, как быстро бы наполнялись спамерские базы, путём обычного словарного перебора. И роботов-пауков писать не пришлось бы.

Кстати, вы случаем не торговец адресными базами? Иной пользы от подобных шпионских проверок не видно.
guest01
Maximbo
Кстати, вы случаем не торговец адресными базами? Иной пользы от подобных шпионских проверок не видно.
Ну нет ). Просто у меня большой список email' ов и мне нужно удалять информацию с сервера о ненужных (невалидных). Честно ). У меня благородные цели (не вылететь с работы).
bialix
странная задача. а ваша база e-mail – это в принципе адреса на разных серверах, или на вашем собственном сервере?
guest01
bialix
странная задача. а ваша база e-mail – это в принципе адреса на разных серверах, или на вашем собственном сервере?
На нашем собственном. Только я не знаю как к нему достучаться. Может через Outlook как нибудь проверять … Там ведь есть записная книжка, где есть все адреса. Вообщем не понятно пока.
guest01
Вот такой вот скрипт отрыл. То что нужно, но говорит, что записей 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)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB