Option Explicit
Type MAPIRecip
Reserved As Long
RecipClass As Long
Name As String
Address As String
EIDSize As Long
EntryID As String
End Type
Type MAPIFileTag
Reserved As Long
TagLength As Long
Tag() As Byte
EncodingLength As Long
Encoding() As Byte
End Type
Type MAPIFile
Reserved As Long
Flags As Long
Position As Long
PathName As String
FileName As String
FileType As Long
End Type
Type MAPIMessage
Reserved As Long
Subject As String
NoteText As String
MessageType As String
DateReceived As String
ConversationID As String
Originator As Long
Flags As Long
RecipCount As Long
Recipients As Long
Files As Long
FileCount As Long
End Type
Declare Function MAPILogoff Lib "MAPI32.DLL" (ByVal Session&, ByVal UIParam&, ByVal Flags&, _
ByVal Reserved&) As Long
Declare Function MAPILogon Lib "MAPI32.DLL" (ByVal UIParam&, ByVal User$, ByVal Password$, _
ByVal Flags&, ByVal Reserved&, Session&) As Long
Declare Function MAPISendMail Lib "MAPI32.DLL" (ByVal Session As Long, ByVal _
UIParam As Long, Message As MAPIMessage, ByVal Flags As Long, ByVal _
Reserved As Long) As Long
Private Const MAPI_E_NO_LIBRARY = 999
Private Const MAPI_E_INVALID_PARAMETER = 998
Private Const MAPI_ORIG = 0
Private Const MAPI_TO = 1
Private Const MAPI_CC = 2
Private Const MAPI_BCC = 3
Private Const MAPI_UNREAD = 1
Private Const MAPI_RECEIPT_REQUESTED = 2
Private Const MAPI_SENT = 4
Private Const MAPI_LOGON_UI = &H1
Private Const MAPI_NEW_SESSION = &H2
Private Const MAPI_DIALOG = &H8
Private Const MAPI_UNREAD_ONLY = &H20
Private Const MAPI_ENVELOPE_ONLY = &H40
Private Const MAPI_PEEK = &H80
Private Const MAPI_GUARANTEE_FIFO = &H100
Private Const MAPI_BODY_AS_FILE = &H200
Private Const MAPI_AB_NOMODIFY = &H400
Private Const MAPI_SUPPRESS_ATTAch = &H800
Private Const MAPI_FORCE_DOWNLOAD = &H1000
Private Const MAPI_OLE = &H1
Private Const MAPI_OLE_STATIC = &H2
Sub api_SendMail2(ByRef aRecips As Variant, ByVal strSubject As String, ByVal strMessage As String)
Dim recips() As MAPIRecip
Dim Message As MAPIMessage
Dim Rtn As Long '-- return value For api calls
Dim hMAPI As Long '-- session handle
Dim z As Long
ReDim recips(LBound(aRecips) To UBound(aRecips))
For z = LBound(aRecips) To UBound(aRecips)
With recips(z)
.RecipClass = 1
If InStr(aRecips(z), "@") < 0 Then
.Address = StrConv(aRecips(z), vbFromUnicode)
Else
.Name = StrConv(aRecips(z), vbFromUnicode)
End If
End With
Next z
With Message
.NoteText = strMessage
.Subject = strSubject
.Files = 0
.RecipCount = UBound(recips) - LBound(aRecips) + 1
.Recipients = VarPtr(recips(LBound(recips)))
End With
Rtn = MAPILogon(0, "", "", MAPI_LOGON_UI, 0, hMAPI)
MAPISendMail hMAPI, 0, Message, MAPI_DIALOG, 0
'-- logoff MAPI application
Rtn = MAPILogoff(hMAPI, 0, 0, 0)
End Sub
Sub TestSendMail()
Dim aRecips(0 To 0) As String
aRecips(0) = "smtp:test@hotmail.com"
api_SendMail2 "Посылаем через MAPI", "test", aRecips, "c:\test.pdf"
End Sub
Отправка через Standard EXE (Form1) кнопкой на Е-майл
Я новичок, у меня из-за не полного знания языка Visual Basic возникла одна проблема, так вот я создавал такую программу, которая очень похожа на Outlook Express, только функции немного, создал только те которые считаю нужными, вот осталось сделать-написать код , функцией которого должно быть отправка сообщений со строки TextBox - «место для написания сообщения» переименованной кнопкой «CommandButton» в кнопку «Отправить» , т.е. при нажатии кнопки «Отправить» написанное в строке TextBox-«место для написания сообщения» отправлялось сразу например на один и тот же Эл.ящик на Mail.ru/ заметьте прогу я делал в программе Micorosoft Visual Basic 6.0 далее в Standard EXE, прошу пришлите код… дайте человеку закончить начатое :) С уважением Termosis.
Цитата: Termosis
заметьте прогу я делал в программе Micorosoft Visual Basic 6.0 далее в Standard EXE, прошу пришлите код… дайте человеку закончить начатое :) С уважением Termosis.
То есть - пришлите? А разве тут служба рассылки? А заканчивать мы вам не мешаем - пожалуйста, - заканчивайте.
А по теме, то задача не ясна, что именно вам нужно сделать.
Помоему, человеку нужен сам механизм отправки сообщения. Тоесть посыл команд серверу и т.д. и т.п.
я думал здесь помогают друг другу:confused: разве не так, короче нужна помощь, я никогда не думал конечно что этот форум считался или считаеться как служба рассылки, поэтому просто напросто решил написать сюда. Вдруг помогут, короче нужен код, который можно вписать в кнопку в так переименованый "Отправить" хочу чтобы при нажатии на него со строки TextBox - «место для написания сообщения» отправлялось на определенное мыло, кода конечно я незнаю поэтому прошу помощи. А закончить немогу потомучто немогу найти кода:( прошу вас помогите.
Zbyszek вы правы, только команды для посыла нажатием определенной кнопки, и отправкой написанного в строке TextBox на мыло именно на мыло. Кто-нибудь вышлите код-команду для Visual Basic 6.0
Увы, могу только "подтолкнуть" - работа с сокетами, rfc smtp-протокола.
Zbyszek, писать т.е. придумывать неумею исходники, а так по одной учебной статейке сделал прогу, вот только осталось найти исходник для отправки сообщения на мыло путем нажатия кнопки на проге вот и все, а исходник нигде немогу найти в той же уч.статейке написано совсем про другое, мне просто нужен исходник, функция которого отправка на мыло сообщения со строки TextBox. плз., напишите кто-нибудь.. очень нужно. С уважением Termosis
Zbyszek любыми вариантами лижбы моя прога могла отправлять данные со строк TextBox на мыла прога прошла компиляцию EXE, но можно конечно перередактировать короче отправка сообщений на мыло с файла exe/
Ладно, держи:
Последняя просьба, если Вам не трудно напишите «код» т.е. то что находиться между Private Sub кнопка«отправить»_Сlick () и Sub, я точно знаю что он есть в той проге высланного Вами, но я никак немогу разобраться, постоянно ошибки какие-то, вышлите только такой, чтобы он высылал на указанное мыло одним кликом мыши на кнопку «отправить» содержимое нескольких строк TextBox’са и все больше ничего, а Ваша прога очень даже неплохая.
И работает у меня без ошибок, смотри скриншот.:)
я тут никак с TextBox разобраться немогу чтобы именно с этих TextBox Строк отправлялись вписанные в нег данные, неполучаеться почему-то, отправить хочу кнопкой Command1 переименнованная как кнопка "Отправить" Можно еще чуть-чуть по подбробней написать...
Как я понимаю, за неделю ты не удасужился найти и почитать учебник по VB для чайников. Так вот, мне тоже лень писать тебе готовую программу, удовлетворяющую всем твоим пожеланиям, бесплатно. Готов сделать это за 10WM$, обращайся если че.
b0m хочешь капусты срубить, а не получиться, как допишу, согласен :) А че тебе сложно написюкать уже знакомые строчки? Я же ведь прошу не целую прогу, а все каких-то там неизвестных мне строк, знал бы написал бы конечно. а насчет учебников, уже набрал, но там про Актив X и HTTP клиент-сервер и т.п. короче то что мне не очень нужно, а проги для отправок я уже нашел, разобраться не могу т.е. списать нужные коды и куда конкретно их вписать не соображу, ошибки постоянно.
Run-time error '424':
Object reguired
а затeм я нажимаю на кнопку "правка", и выходит т.е. там выделяеться желтой строкой эта строка
Winsock1.LocalPort = 0 незнаю что дальше? писал и 250, 220, 25, какие будут советы?
Английский учите...
Цитата:
а затeм я нажимаю на кнопку "правка", и выходит т.е. там выделяеться желтой строкой эта строка
Winsock1.LocalPort = 0
Winsock1.LocalPort = 0
Видимо такого объекта Winsock1 нет.
Tever неподскажете как его создать...
Меню Project - Components. Ищешь строку Microsoft Winsock Control в списке, отмечаешь, добавляешь. Дальше сам разберешься :)
Compile error:
Argument not optional
Я нажимал конечно же и на кнопку справка, но его у меня на компе не существует, короче не могу загрузить, поэтому там выскакивает сообщее о просьбе перезагрузить программку, а этого не выходит :(
Далее, выделяется желтой полосой ниже:
Sub SendEmail(txtEmailServer As String, txtFromName As String, txtFromEmailAddress As String, ToNametxt As String, txtToEmailAddress As String, txtEmailSubject As String, txtEmailBodyOfMessage As String)
Все по видимому записано правильно, но что? добавил Microsoft Winsock Control 6.0 (SP4) его значок налепил на пустое пространство на окне изготовляемой проги.
И еще синей полосой выделяеться слово «Second» пока что я его подчеркнул и сделал жирным т.к. их ниже две, но выделяется лишь подчеркнутый, жирного шрифа из всего этого:
Sub SendEmail(txtEmailServer As String, txtFromName As String, txtFromEmailAddress As String, ToNametxt As String, txtToEmailAddress As String, txtEmailSubject As String, txtEmailBodyOfMessage 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 = "Maximuz for Dial-up line v1.0.0" + vbCrLf
Eighth = Fourth + Third + Ninth + Fifth + Sixth
Winsock1.Protocol = sckTCPProtocol
Winsock1.RemoteHost = MailServerName
Winsock1.RemotePort = 25
Winsock1.Connect
WaitFor ("220")
Winsock1.SendData ("HELO " + vbCrLf)
WaitFor ("250")
Winsock1.SendData (First)
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)
WaitFor ("221")
Winsock1.Close
Else
MsgBox (Str(Winsock1.State))
End If
End Sub
И еще в кнопке «отправить»_click
Записано вот так:
Private Sub Отправить_Click()
SendEmail txtEmailServer.Text, txtFromName.Text, txtFromEmailAddress.Text, txtToEmailAddress.Text, txtToEmailAddress.Text, txtEmailSubject.Text, txtEmailBodyOfMessage.Text
'MsgBox ("Mail Sent")
Beep
Close
End Sub
Я не веду заочные курсы програмирования. Купите книгу и занимайтесь. Хотя бы освойте азы и учите технический английский
Извините конечно, но книгу купить я в данное время не в состоянии, а нглийского нет, учу китайский, хорошо вы не ведете курсы програмирования, но хотя бы помощь еще немножко можете? Еще совсем чуть-чуть, и все. Плз., очень при очень прошу помогите, решить эту проблему в письме #19 и больше ничего.
"Run-time error "40020":
Invalid operation at current state"
Вот эта фигня постоянно выскакивает
Вот код, который работает не только а стандартном ЕХЕ, но и в ВБА:
Код:
Как видно из кода тестовой процедуры, можно приаттачивать еще и файлы.
Цитата: Tever
Я не веду заочные курсы програмирования. Купите книгу и занимайтесь. Хотя бы освойте азы и учите технический английский
А разве это только к вам вопрос?
2Termosis: Научитесь оформлять код.
Цитата: SkyM@n
А разве это только к вам вопрос?
Я ответил только за себя
Сорри за офтоп
блин, а может у кого есть книжка по этой теме имеется ввиду по обучению отправки почты? Понять немогу что к чему по MAPI немогу, а в Winsock почти разобрался только чуть-чуть осталось, но это не считаеться.
Цитата: Termosis
Понять немогу что к чему по MAPI немогу,
А что именно не получается. Предлагаю разобраться по-порядку.
куда вписать мои названия строк? Т.е. заполненные в эти строки данные отправлялись на мыло. Куда конкретно вставить этот код? Вы можете привести пример - прогу? чтобы было понятно что к чему. Например строка называется Label1 вот а в коде нужно написать так что бы именно с этого Label1 отправлялось сообщение.
SkyM@n ну....
Что, "ну"? TestSendMail() отправляет мессагу, в самой процедуре - пример. Следовательно, можно подставить smtp:test@hotmail.com в лейбл. Или {до|при}думать что-то свое.
mail.ru писать smtp.mail.ru или smtp:mymail@mail.ru?
например если на мыло которое находится на
А в кнопку Command1 что за код вписать?
Цитата: Termosis
например если на мыло которое находится на www.mail.ru писать smtp.mail.ru или smtp:mymail@mail.ru?
А эти адреса надо уточнять у самого мэйл.ру. Там вроде smtp.mail.ru.
В обработчик нажатия кнопки пишешь название той процедуры.