Ты, наверное, не раз ругался когда в твой почтовый ящик приходили письма с предложением купить десяти этажный коттедж на Канарах всего за 999999$ или приобрести супер-пупер новейший прибор для лечения геморроя. Да… такие письма мало сказать достают, они просто выводят из себя. Но теме не менее, рассылка подобных писем может принести немалые деньги тому человеку, который их присылает.
Так, например, например, существуют немало западных спонсоров, которые платят за привлечение новых людей в кампанию, за количество нажатий на ссылку с твоим личным идентификационным номером, за рекламу определенных товаров, в конце концов, таким способом можно самому продавать что угодно. Оказывается, что массовая рассылка - это весьма выгодное дело. Ну что глазки загорелись и захотелось сразу кучу денег? Казалось бы что может быть проще зарегистрироваться у Spedia, получить ссылку со своим личным номером и попросить ВСЕХ зарегистрироваться по этой ссылке, осталось теперь только получать процент от деятельности твоих рефералов (людей, которые зарегистрировались по твоей ссылке). В принципе так оно и есть, но есть одно "НО". Как ты попросишь ВСЕХ кликнуть по твоей ссылке? Правильно, самый простой способ, как называют его по-умному Direct Mail, - это отослать письмо челу с твоей ссылкой и желательно, чтобы отослать не одному, а 100 или 1000, а лучше 10000 человекам. А ты представил, что будет, если хотя бы 300 из 1000 зарегистрируются как твои рефералы? Да, тогда можно будет бегать каждый месяц в банк и обналичивать чек твоего спонсора, абсолютно ничего не делая.
Итак, теперь тебе понадобиться классный рассыльщик. Конечно, ты можешь юзать Bat и писать все адреса, через запятую, но во-первых тогда все адреса, которые ты доставал с огромным трудом станут известны всем получателям письма, во-вторых это считается плохим тоном. Но ведь у тебя же есть мозги и подключенный Интернет? Тогда ты можешь скачать готовый рассыльщик. Но, если ты скачаешь крутой фирменный рассыльщик, то тебе придется искать к нему кряк, если не хочешь, чтобы к каждому письму прибавлялся текст о том, что это письмо послано незарегистрированной версией SuperMailer'a, а сейчас кряк не ко всякой можно его найти. Да и к тому же где гарантия, тому что скачанный рассыльщик не отсылает не заметно для тебя письмо и все твои адреса на свой собственный секретный адрес, чтобы потом почитать что ты пишешь своим адресатам. Становится гораздо неприятнее, когда узнаешь, что твой любимый обыкновенный троян. Отсюда вывод - надо писать собственный mailer. На чем? Конечно на VB! Как назовем? Crazy Mailer! Круто? Круто…
Итак, прежде всего нужно научиться отсылать обычное письмо. Порыскаем по иНету и находим чудесный сайт Кирпичики VB, где есть пример отсылки письма по определенному адресу:
Dim Response As String, Reply As Integer, DateNow As String
Dim first As String, Second As String, Third As String
Dim Fourth As String, Fifth As String, Sixth As String
Dim Seventh As String, Eighth As String
Dim Start As Single, Tmr As Single
Sub SendEmail(MailServerName As String, FromName As String, _
FromEmailAddress As String, ToName As String, _
ToEmailAddress As String, EmailSubject As String, _
EmailBodyOfMessage As String)
Winsock1.LocalPort = 0 'Присваиваем нулю, чтобы можно было послать более одного письма
If Winsock1.State = sckClosed Then ' Проверяем закрыт ли сокет
DateNow = Format(Date, "Ddd") & ", " & Format(Date, "dd Mmm YYYY") _
& " " & Format(Time, "hh:mm:ss") & "" & " -0600"
'Адрес отправителя
first = "mail from:" + Chr(32) + FromEmailAddress + vbCrLf
'Адрес получателя
Second = "rcpt to:" + Chr(32) + ToEmailAddress + vbCrLf
'Дата отправления
Third = "Date:" + Chr(32) + DateNow + vbCrLf
'Имя отправителя
Fourth = "From:" + Chr(32) + FromName + vbCrLf
'Имя получателя
Fifth = "To:" + Chr(32) + ToNametxt + vbCrLf
'Тема письма
Sixth = "Subject:" + Chr(32) + EmailSubject + vbCrLf
'Текст письма
Seventh = EmailBodyOfMessage + vbCrLf
'Программа-рассыльщик писем
Ninth = "X-Mailer: EBT Reporter v 2.x" + vbCrLf
'Объединяем сформированные значения переменных в одну главную переменную
Eighth = Fourth + Third + Ninth + Fifth + Sixth
'Установка протокола
Winsock1.Protocol = sckTCPProtocol
'Установка SMTP сервера
Winsock1.RemoteHost = MailServerName
'Установка адреса сервера
Winsock1.RemotePort = 25
'Установление связи
Winsock1.Connect
WaitFor ("220")
StatusTxt.Caption = "Connecting...."
StatusTxt.Refresh
Winsock1.SendData ("HELO yourdomain.com" + vbCrLf)
WaitFor ("250")
StatusTxt.Caption = "Connected"
StatusTxt.Refresh
Winsock1.SendData (first)
StatusTxt.Caption = "Sending Message"
StatusTxt.Refresh
WaitFor ("250")
Winsock1.SendData (Second)
WaitFor ("250")
Winsock1.SendData ("data" + vbCrLf)
WaitFor ("354")
Winsock1.SendData (Eighth + vbCrLf)
Winsock1.SendData (Seventh + vbCrLf)
Winsock1.SendData ("." + vbCrLf)
WaitFor ("250")
Winsock1.SendData ("quit" + vbCrLf)
StatusTxt.Caption = "Disconnecting"
StatusTxt.Refresh
WaitFor ("221")
Winsock1.Close
Else
MsgBox (Str(Winsock1.State))
End If
End Sub
Sub WaitFor(ResponseCode As String)
Start = Timer ' Необходимо чтобы не зациклиться
While Len(Response) = 0
Tmr = Start - Timer
DoEvents 'Чтобы программа могла реагировать на другие события во время выполнения цикла
If Tmr > 50 Then ' Время в секундах для ожидания
MsgBox "Ошибка SMTP сервепа", 64, MsgTitle
Exit Sub
End If
Wend
While Left(Response, 3) <> ResponseCode
DoEvents'Чтобы программа могла реагировать на другие события во время выполнения цикла
If Tmr > 50 Then
MsgBox "Ошибка SMTP сервера: " + ResponseCode + " отклик " + Response, 64, MsgTitle
Exit Sub
End If
Wend
Response = "" 'отсылаем пустой отклик
End Sub
Private Sub Command1_Click()
SendEmail txtEmailServer.Text, txtFromName.Text, _
txtFromEmailAddress.Text, txtToEmailAddress.Text, _
txtToEmailAddress.Text, txtEmailSubject.Text, _
txtEmailBodyOfMessage.Text
'MsgBox ("Mail Sent")
StatusTxt.Caption = "Mail Sent"
StatusTxt.Refresh
Beep
Close
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Winsock1.GetData Response
End Sub
При внимательном рассмотрении кода становится ясно следующее:
- на форму потребуется кинуть Winsock контрол, именно с помощью, него осуществляется отсылка писем
- в данном коде есть весьма полезная функция SendEmail. Эту функцию требуется выполнить, указав ряд аргументов: SMTP сервер, имя отсылающего, адрес отсылающего, имя получателя, адрес получателя, тему сообщения и само сообщение.
Как видишь, все оказывается очень просто. Итак, кидаешь на форму текстовое поле для указания обратного адреса, кстати, его ты можешь не указывать
:), тогда твоё письмо будет анонимным, присваиваешь ему название (как следует из кода) txtFromEmailAddress, затем кидаешь на форму текст бокс для указания имени отправляющего, обзываешь его txtFromName, также необходимо установить текстовое поле для указания SMTP сервера (txtEmailServer), для заголовка письма (txtEmailSubject) и для самого письма (txtEmailBodyOfMessage). Теперь самое главное: нужно добавить LstBox, в котором будут храниться адреса твоих получателей, как раз из этого списка мы и будем брать адрес и использовать его в функции отсылки почты SendMail, причем всё это будет осуществляться в цикле. У меня также есть предложение выложить на форме еще один ListBox, в данный список будут помещаться адреса, уже отосланных писем, таким образом мы сможем обеспечить наглядность работы Mailer'a. Итак, кидаем на форму два ListBox'a: один для адресов, по которым будем отсылать, другой для отосланных адресов и обзываем соответственно lstEmail и lstEmailsSent. Ах, да чуть не забыли…Нужно же выложить на форму здоровую кнопку с надписью "Начать рассылку".