Послать email из VB
-
- Уже с Приветом
- Posts: 1204
- Joined: 28 May 2002 05:23
- Location: California
Послать email из VB
Мне надо автоматически посылать репорты клиенту. В VB , когда я использую MAPI контрол, прежде чем послать email , Outlook присылает мне 2 messages с просьбой подтвердить мойе желание to email. То же самое проискходит, когда я посылаю репорт из Crystal Reports. Я прочитала, что ето security update к Outlook создает такие трудности для 3rd party controls. Но почему йето проискходит с MAPI?
Как обойти етi messages и спокойно автоматически создавать репорты и посылать их email?
Spasibo
Как обойти етi messages и спокойно автоматически создавать репорты и посылать их email?
Spasibo
-
- Уже с Приветом
- Posts: 345
- Joined: 23 Dec 1999 10:01
- Location: Rostov-on-Don->LA
Re: Послать email из VB
tortilla wrote:Мне надо автоматически посылать репорты клиенту. В VB , когда я использую MAPI контрол, прежде чем послать email , Outlook присылает мне 2 messages с просьбой подтвердить мойе желание to email. То же самое проискходит, когда я посылаю репорт из Crystal Reports. Я прочитала, что ето security update к Outlook создает такие трудности для 3rd party controls. Но почему йето проискходит с MAPI?
Как обойти етi messages и спокойно автоматически создавать репорты и посылать их email?
Spasibo
По моему опыту с MAPI у тебя ничего не выйдет - ибо секьюрити, спамеры, вирусы...
Я делал с винсоком. Дабы не нарушать копирайты даю исходник:
' Name: SMTP: Simple Mail Testing Program
' Description:Allows sending of e- mail (SMTP) directly from a VB
' app using Winsock, WITH OUT having to buy an expensive add on component
' By: Brian Anderson
'
'
' Inputs:Requires: Server Address (Name or IP), Senders & Recipei
' ent's Names, Sender & Recipient E-Mail address, Body of message
'
' Returns:Nothing really, does give status on sending operation
'
'Assumes:Very straight forward. Makes sending mail from a VB prog
' ram EASY!
'
'Side Effects:NONE!
'
'Code provided by Planet Source Code™ (http://www.PlanetSource
' Code.com) 'as is', without warranties as to performance, fitness,
' merchantability,and any other warranty (whether expressed or impl
' ied).
'***************************************************************
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 ' Must set local port to 0 (Zero) or you can _
only send 1 e-mail per program start
If Winsock1.State = sckClosed Then ' Check to see if socet is closed
DateNow = Format(Date, "Ddd") & ", " & Format(Date, "dd Mmm YYYY") _
& " " & Format(Time, "hh:mm:ss") & "" & " -0600"
first = "mail from:" + Chr(32) + FromEmailAddress + vbCrLf
' Get who's sending E-Mail address
Second = "rcpt to:" + Chr(32) + ToEmailAddress + vbCrLf
' Get who mail is going to
Third = "Date:" + Chr(32) + DateNow + vbCrLf
' Date when being sent
Fourth = "From:" + Chr(32) + FromName + vbCrLf
' Who's Sending
Fifth = "To:" + Chr(32) + ToNametxt + vbCrLf
' Who it going to
Sixth = "Subject:" + Chr(32) + EmailSubject + vbCrLf
' Subject of E-Mail
Seventh = EmailBodyOfMessage + vbCrLf
' E-mail message body
Ninth = "X-Mailer: EBT Reporter v 2.x" + vbCrLf
' What program sent the e-mail, customize this
Eighth = Fourth + Third + Ninth + Fifth + Sixth
' Combine For proper SMTP sending
Winsock1.Protocol = sckTCPProtocol
' Set protocol For sending
Winsock1.RemoteHost = MailServerName
' Set the server address
Winsock1.RemotePort = 25
' Set the SMTP Port
Winsock1.Connect
' Start connection
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 ' Time Event so won't Get stuck in Loop
While Len(Response) = 0
Tmr = Start - Timer
DoEvents ' Let System keep checking For incoming response
' **IMPORTANT**
If Tmr > 50 Then ' Time in seconds to wait
MsgBox "SMTP service error, _
timed out While waiting For response", 64, MsgTitle
Exit Sub
End If
Wend
While Left(Response, 3) <> ResponseCode
DoEvents
If Tmr > 50 Then
MsgBox "SMTP service error, impromper response code. _
Code should have been: " + ResponseCode + " Code recieved: " + Response, _
64, MsgTitle
Exit Sub
End If
Wend
Response = "" ' Sent response code to blank **IMPORTANT**
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 Command2_Click()
End
End Sub
Private Sub Form_Load()
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Winsock1.GetData Response ' Check For incoming response *IMPORTANT*
End Sub
Как удивительно извилист и тернист бывает ход человеческой мысли...
-
- Уже с Приветом
- Posts: 1204
- Joined: 28 May 2002 05:23
- Location: California
-
- Уже с Приветом
- Posts: 1204
- Joined: 28 May 2002 05:23
- Location: California
Спасибо за ссылку, очень полезное чтение. Но боюсь что в мойем случае етот вариант не проходит:
[/quote] You cannot modify the settings if a client is using a local .Pst file for a mailbox, or if you are using Outlook with a third-party e-mail service. Microsoft has been working with other third-party e-mail services to provide them with the appropriate documentation that would enable them to offer this level of customization.- MS
[/quote] You cannot modify the settings if a client is using a local .Pst file for a mailbox, or if you are using Outlook with a third-party e-mail service. Microsoft has been working with other third-party e-mail services to provide them with the appropriate documentation that would enable them to offer this level of customization.- MS
Я пытаюсь использовать Winsock1. Я уже могу послать email s attachment на наш server, но когда я посылаю на Yahoo, или Google, attachment получается в виде набора characters, совершенно нечитаемый
-
- Уже с Приветом
- Posts: 1830
- Joined: 04 Mar 2002 10:01
- Location: Tampa
tortilla wrote:Спасибо за ссылку, очень полезное чтение. Но боюсь что в мойем случае етот вариант не проходит:
приветствую.
А что- CDO уже отменили?
Private Sub Command1_Click()
Dim myMail As Object
On Error GoTo ErrHand
Set myMail = CreateObject("CDO.message")
myMail.From = "myemail@email.com"
myMail.Subject = "hello"
myMail.textbody = "message body"
myMail.to = "bgates@microsoft.com"
Call myMail.AddAttachment("c:\command.com")
Call myMail.Send
MsgBox "Message sent"
ErrHand:
Set myMail = Nothing
If Err Then
MsgBox Err.Description, vbExclamation
Err.Clear
End If
End Sub
(SMTP service must be running)
успехов.
Несите чушь бережно, стараясь не расплескать. Чушь хороша, когда она полная.
-
- Новичок
- Posts: 75
- Joined: 24 Aug 2000 09:01
- Location: Ufa->Moscow
VovaK98 wrote:(...)А что- CDO уже отменили?(...)
Нет, не отменили, но предупреждающего сообщения не избежать.
При использовании CDO, Simple MAPI, Outlook Object Model - будет выдаваться предупреждающее сообщение.
Чтобы сообщение не выдавалось, нужно использовать Extended MAPI, тока не знаю можно ли его юзать из VB. Из под Делфей и С++ все нормально.
-
- Новичок
- Posts: 75
- Joined: 24 Aug 2000 09:01
- Location: Ufa->Moscow
-
- Уже с Приветом
- Posts: 1830
- Joined: 04 Mar 2002 10:01
- Location: Tampa
Andrewsha wrote:VovaK98 wrote:(...)А что- CDO уже отменили?(...)
Нет, не отменили, но предупреждающего сообщения не избежать.
При использовании CDO, Simple MAPI, Outlook Object Model - будет выдаваться предупреждающее сообщение.
Чтобы сообщение не выдавалось, нужно использовать Extended MAPI, тока не знаю можно ли его юзать из VB. Из под Делфей и С++ все нормально.
Абсолютно никаких сообщений не появляется. У меня это работает на Win2K сервере, на моем лаптопе WinXPPro, и на NT4 (CDONTS, правда).
Несите чушь бережно, стараясь не расплескать. Чушь хороша, когда она полная.
-
- Уже с Приветом
- Posts: 1204
- Joined: 28 May 2002 05:23
- Location: California
VovaK98 wrote:Andrewsha wrote:VovaK98 wrote:(...)А что- CDO уже отменили?(...)
Абсолютно никаких сообщений не появляется. У меня это работает на Win2K сервере, на моем лаптопе WinXPPro, и на NT4 (CDONTS, правда).
А Вы проверьте, может быть у Вас нет SP- 2 or 3 к Outlook, который и вызывает ети messages.
-
- Уже с Приветом
- Posts: 1204
- Joined: 28 May 2002 05:23
- Location: California
вот как мы ето делаем- никаких messages не возникает !!!!!
'/****************************/
Public Sub Mailer()
Dim objOl As Outlook.Application
Dim objMail As MailItem
Set objOl = New Outlook.Application
Set objMail = objOl.CreateItem(olMailItem)
With objMail
.To = "name@mymail.com"
.CC = "Name1@hismail.com"
.Subject = "test mail"
.Body = "This is the Body of the message"
.NoAging = True
.Attachments.Add ("AttName.txt")
.Display
End With
Set objMail = Nothing
Set objOl = Nothing
SendKeys "%{s}", True
End Sub
'/*********************************/
'/****************************/
Public Sub Mailer()
Dim objOl As Outlook.Application
Dim objMail As MailItem
Set objOl = New Outlook.Application
Set objMail = objOl.CreateItem(olMailItem)
With objMail
.To = "name@mymail.com"
.CC = "Name1@hismail.com"
.Subject = "test mail"
.Body = "This is the Body of the message"
.NoAging = True
.Attachments.Add ("AttName.txt")
.Display
End With
Set objMail = Nothing
Set objOl = Nothing
SendKeys "%{s}", True
End Sub
'/*********************************/
-
- Новичок
- Posts: 75
- Joined: 24 Aug 2000 09:01
- Location: Ufa->Moscow
-
- Уже с Приветом
- Posts: 1204
- Joined: 28 May 2002 05:23
- Location: California
-
- Новичок
- Posts: 75
- Joined: 24 Aug 2000 09:01
- Location: Ufa->Moscow
tortilla wrote:Andrewsha wrote:tortilla wrote:вот как мы ето делаем- никаких messages не возникает !!!!! (...)
ну, и что это за пример!? А кто будет вызывать .Send ? Тогда окошечки и возникнут...
Никакие окошечки не возникают. Все прекрасно посылается. VB6 вызывает .Send.
Что-то я в вашем коде не вижу .Send
Если я добавляю .Send , то при вызове метода возникают предупреждающие окна.
Да к тому же если окошки не вылазят, то зачем было создавать тему про то как от них избавиться?
-
- Уже с Приветом
- Posts: 1204
- Joined: 28 May 2002 05:23
- Location: California
Andrewsha wrote:tortilla wrote:Andrewsha wrote:tortilla wrote:вот как мы ето делаем- никаких messages не возникает !!!!! (...)
ну, и что это за пример!? А кто будет вызывать .Send ? Тогда окошечки и возникнут...
Никакие окошечки не возникают. Все прекрасно посылается. VB6 вызывает .Send.
Что-то я в вашем коде не вижу .Send
Если я добавляю .Send , то при вызове метода возникают предупреждающие окна.
Да к тому же если окошки не вылазят, то зачем было создавать тему про то как от них избавиться?
Andrewsha,
я показала код, который прекрасно работает. При етом не надо использовать Winsock, который несколько более сложные . Я благодарна за Ваш input с MAPI, но к сожалению ето не работает по причине Outlook security. Если Вы считаете, что тот пример, который я posted, не работает, и Вам лень его проверить- Ваше право, но не надо спорить с таком неуважительном тоне.
А тема была вызвана по вполне уважительным причинам, которые я указала в начале пост.
Всем большое спасибо за помощь
-
- Новичок
- Posts: 75
- Joined: 24 Aug 2000 09:01
- Location: Ufa->Moscow
tortilla wrote:Andrewsha wrote:Что-то я в вашем коде не вижу .Send
Если я добавляю .Send , то при вызове метода возникают предупреждающие окна.
Да к тому же если окошки не вылазят, то зачем было создавать тему про то как от них избавиться?
Andrewsha,
я показала код, который прекрасно работает. При етом не надо использовать Winsock, который несколько более сложные . Я благодарна за Ваш input с MAPI, но к сожалению ето не работает по причине Outlook security. Если Вы считаете, что тот пример, который я posted, не работает, и Вам лень его проверить- Ваше право, но не надо спорить с таком неуважительном тоне.
А тема была вызвана по вполне уважительным причинам, которые я указала в начале пост.
Всем большое спасибо за помощь
Во-первых с чего Вы взяли, что я спорю в ТАКОМ неуважительном тоне? По-моему, я обращаюсь на ВЫ и без личностных выпадов. Просто пытался действительно разорбраться в проблеме!
И с чего Вы взяли, что мне лень проверить Ваш пример? Я его очень даже проверил, потому и написал, что в нем нет непосредственно отправки сообщения, метод Send то не вызывается, вызывается только отображение письма. А если я его добавляю, то ничего не работает.
Насчет уважительных причин, оно понятно, просто непонятно, то что Вы изначально обратились за помощью, а в результате остановились на способе, который например у меня не работает. Вот и пытался понять где истина, а Вы про неуважительный тон зачем-то...