Как импортировать адреса из WAB файлов?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
MagicMan
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 18.11.2004 (Чт) 11:03

Как импортировать адреса из WAB файлов?

Сообщение MagicMan » 05.12.2005 (Пн) 22:29

Всем при!

Может кто знает как импортировать адреса из WAB файлов? Пробовал через cdo.dll - там можно вызвать диалоговое окно через mapmess.show со списком адресов, но как потом их программно запулучить так и не смог понять.

Был бы очень признателен. Нужно это для улучшения моей программы против спама - Anti-Spammer. (http://www.anti-spammer.ru)

Надеюсь на помощь,
Юрий.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.12.2005 (Вт) 8:57

Зачем антиспаму доступ к адресной книжке?
Это нужно скорее массмайлерам или вирусам.
Lasciate ogni speranza, voi ch'entrate.

MagicMan
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 18.11.2004 (Чт) 11:03

Re:

Сообщение MagicMan » 06.12.2005 (Вт) 9:06

Это нужно для импорта всех адресов в антиспаммер, так как он работает со списками (белыми и черными).

Demonx
Бывалый
Бывалый
 
Сообщения: 237
Зарегистрирован: 25.06.2003 (Ср) 0:08
Откуда: Литва/Висагинас

Сообщение Demonx » 08.12.2005 (Чт) 16:16

Вот написал модуль для выдирания емэйлов с вабов:

Код: Выделить всё

Private WABData As String, WABEmail() As String

Public Sub WABLoad(wabFile As String)
WABData = Space(FileLen(wabFile))
Open wabFile For Binary As #1
    Get #1, , WABData
Close #1
End Sub

Public Function WABGetEmail() As String()
Dim Pos As Long, I As Long
Erase WABEmail
Pos = 1
Do
    Pos = WABFindEmail(Pos)
Loop Until Pos = 0
For I = 0 To UBound(WABEmail)
    MsgBox WABEmail(I)
Next I
End Function

Private Sub WABAddEmail(wabMail As String)
If WABExtArr = True Then
    ReDim Preserve WABEmail(UBound(WABEmail) + 1) As String
Else
    ReDim WABEmail(0) As String
End If
WABEmail(UBound(WABEmail)) = wabMail
End Sub

Private Function WABExtArr() As Boolean
On Error Resume Next
Dim Temp As String
Temp = WABEmail(0)
If Err.Number = 9 Then
    WABExtArr = False
Else
    WABExtArr = True
End If
End Function

Private Function WABFindEmail(Optional wabPos As Long = 1) As Long
On Error GoTo Error
Dim WABDog As Long, WABLeft As Long, WABRight As Long
Dim WABTemp As String
WABDog = InStr(wabPos, WABData, Chr(0) & Chr(64) & Chr(0))
WABLeft = InStrRev(WABData, Chr(0) & Chr(0), WABDog)
WABRight = InStr(WABDog, WABData, Chr(0) & Chr(0))
WABTemp = Replace(Mid$(WABData, WABLeft, WABRight - WABLeft), Chr(0), vbNullString)
If (WABCheckEmail(WABTemp) = True) And (WABExtEmail(WABTemp) = False) Then
    Call WABAddEmail(WABTemp)
End If
WABFindEmail = WABRight
Exit Function
Error:
WABFindEmail = 0
End Function

Private Function WABExtEmail(wabMail As String) As Boolean
Dim I As Long
If WABExtArr = True Then
    For I = 0 To UBound(WABEmail)
        If WABEmail(I) = wabMail Then
            WABExtEmail = True
            Exit Function
        End If
    Next I
    WABExtEmail = False
Else
    WABExtEmail = False
End If
End Function

Private Function WABCheckEmail(wabMail As String) As Boolean
Dim I As Integer
Dim Char As String
Dim C() As String
If Not wabMail Like "*@*.*" Then
    WABCheckEmail = False
    Exit Function
End If
C = Split(wabMail, ".", -1, vbBinaryCompare)
If Not Len(C(UBound(C))) = 3 And Not Len(C(UBound(C))) = 2 Then
    WABCheckEmail = False
    Exit Function
End If
For I = 1 To Len(C(UBound(C))) Step 1
    Char = Mid(C(UBound(C)), I, 1)
    If Not (LCase(Char) <= Chr(122)) Or Not (LCase(Char) >= Chr(97)) Then
        WABCheckEmail = False
        Exit Function
    End If
Next I
For I = 1 To Len(wabMail) Step 1
    Char = Mid(wabMail, I, 1)
    If (LCase(Char) <= Chr(122) And LCase(Char) >= Chr(97)) _
    Or (Char >= Chr(48) And Char <= Chr(57)) _
    Or (Char = ".") _
    Or (Char = "@") _
    Or (Char = "-") _
    Or (Char = "_") Then
        WABCheckEmail = True
    Else
        WABCheckEmail = False
        Exit Function
    End If
Next I
End Function


Использовать:
Код: Выделить всё

WABLoad "C:\Documents and Settings\xxx\Application Data\Microsoft\Address Book\xxx.wab"
WABGetEmail
Изображение

MagicMan
Новичок
Новичок
 
Сообщения: 48
Зарегистрирован: 18.11.2004 (Чт) 11:03

Re:

Сообщение MagicMan » 22.12.2005 (Чт) 11:30

СПАСИБО!

А из бата никто не знает как выдрать?

Надеюсь на помощь,
Юрий.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 88

    TopList