Послать email из VB

tortilla
Уже с Приветом
Posts: 1204
Joined: 28 May 2002 05:23
Location: California

Послать email из VB

Post by tortilla »

Мне надо автоматически посылать репорты клиенту. В VB , когда я использую MAPI контрол, прежде чем послать email , Outlook присылает мне 2 messages с просьбой подтвердить мойе желание to email. То же самое проискходит, когда я посылаю репорт из Crystal Reports. Я прочитала, что ето security update к Outlook создает такие трудности для 3rd party controls. Но почему йето проискходит с MAPI?
Как обойти етi messages и спокойно автоматически создавать репорты и посылать их email?

Spasibo
Mout
Уже с Приветом
Posts: 345
Joined: 23 Dec 1999 10:01
Location: Rostov-on-Don->LA

Re: Послать email из VB

Post by Mout »

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
Как удивительно извилист и тернист бывает ход человеческой мысли...
tortilla
Уже с Приветом
Posts: 1204
Joined: 28 May 2002 05:23
Location: California

Post by tortilla »

Большое спасибо, пойду разбираться 8O
User avatar
Andrewsha
Новичок
Posts: 75
Joined: 24 Aug 2000 09:01
Location: Ufa->Moscow

Post by Andrewsha »

все возможно с МАПИ!
читать и качать отсюда:
http://www.microsoft.com/office/ork/upd ... Update.htm
tortilla
Уже с Приветом
Posts: 1204
Joined: 28 May 2002 05:23
Location: California

Post by tortilla »

Спасибо за ссылку, очень полезное чтение. Но боюсь что в мойем случае етот вариант не проходит:

[/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, совершенно нечитаемый :pain1:
User avatar
VovaK98
Уже с Приветом
Posts: 1830
Joined: 04 Mar 2002 10:01
Location: Tampa

Post by VovaK98 »

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)

успехов.
Несите чушь бережно, стараясь не расплескать. Чушь хороша, когда она полная.
User avatar
Andrewsha
Новичок
Posts: 75
Joined: 24 Aug 2000 09:01
Location: Ufa->Moscow

Post by Andrewsha »

VovaK98 wrote:(...)А что- CDO уже отменили?(...)

Нет, не отменили, но предупреждающего сообщения не избежать.
При использовании CDO, Simple MAPI, Outlook Object Model - будет выдаваться предупреждающее сообщение.
Чтобы сообщение не выдавалось, нужно использовать Extended MAPI, тока не знаю можно ли его юзать из VB. Из под Делфей и С++ все нормально.
User avatar
Andrewsha
Новичок
Posts: 75
Joined: 24 Aug 2000 09:01
Location: Ufa->Moscow

Post by Andrewsha »

tortilla wrote:Но боюсь что в мойем случае етот вариант не проходит:

Что именно не нравится? То что в результате изменения политики все приложения получают возможность отправки ссобщений без предупреждающего сообщения?
Мне не нравится то, что нельзя разрешить только определенным приложениям.
User avatar
VovaK98
Уже с Приветом
Posts: 1830
Joined: 04 Mar 2002 10:01
Location: Tampa

Post by VovaK98 »

Andrewsha wrote:
VovaK98 wrote:(...)А что- CDO уже отменили?(...)

Нет, не отменили, но предупреждающего сообщения не избежать.
При использовании CDO, Simple MAPI, Outlook Object Model - будет выдаваться предупреждающее сообщение.
Чтобы сообщение не выдавалось, нужно использовать Extended MAPI, тока не знаю можно ли его юзать из VB. Из под Делфей и С++ все нормально.


Абсолютно никаких сообщений не появляется. У меня это работает на Win2K сервере, на моем лаптопе WinXPPro, и на NT4 (CDONTS, правда).
Несите чушь бережно, стараясь не расплескать. Чушь хороша, когда она полная.
tortilla
Уже с Приветом
Posts: 1204
Joined: 28 May 2002 05:23
Location: California

Post by tortilla »

VovaK98 wrote:
Andrewsha wrote:
VovaK98 wrote:(...)А что- CDO уже отменили?(...)

Абсолютно никаких сообщений не появляется. У меня это работает на Win2K сервере, на моем лаптопе WinXPPro, и на NT4 (CDONTS, правда).


А Вы проверьте, может быть у Вас нет SP- 2 or 3 к Outlook, который и вызывает ети messages.
tortilla
Уже с Приветом
Posts: 1204
Joined: 28 May 2002 05:23
Location: California

Post by tortilla »

вот как мы ето делаем- никаких 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

'/*********************************/
User avatar
Andrewsha
Новичок
Posts: 75
Joined: 24 Aug 2000 09:01
Location: Ufa->Moscow

Post by Andrewsha »

tortilla wrote:вот как мы ето делаем- никаких messages не возникает !!!!! (...)

ну, и что это за пример!? А кто будет вызывать .Send ? :) Тогда окошечки и возникнут...
tortilla
Уже с Приветом
Posts: 1204
Joined: 28 May 2002 05:23
Location: California

Post by tortilla »

Andrewsha wrote:
tortilla wrote:вот как мы ето делаем- никаких messages не возникает !!!!! (...)

ну, и что это за пример!? А кто будет вызывать .Send ? :) Тогда окошечки и возникнут...


Никакие окошечки не возникают. Все прекрасно посылается. VB6 вызывает .Send.
User avatar
Andrewsha
Новичок
Posts: 75
Joined: 24 Aug 2000 09:01
Location: Ufa->Moscow

Post by Andrewsha »

tortilla wrote:
Andrewsha wrote:
tortilla wrote:вот как мы ето делаем- никаких messages не возникает !!!!! (...)

ну, и что это за пример!? А кто будет вызывать .Send ? :) Тогда окошечки и возникнут...


Никакие окошечки не возникают. Все прекрасно посылается. VB6 вызывает .Send.

Что-то я в вашем коде не вижу .Send
Если я добавляю .Send , то при вызове метода возникают предупреждающие окна.
Да к тому же если окошки не вылазят, то зачем было создавать тему про то как от них избавиться?
tortilla
Уже с Приветом
Posts: 1204
Joined: 28 May 2002 05:23
Location: California

Post by tortilla »

Andrewsha wrote:
tortilla wrote:
Andrewsha wrote:
tortilla wrote:вот как мы ето делаем- никаких messages не возникает !!!!! (...)

ну, и что это за пример!? А кто будет вызывать .Send ? :) Тогда окошечки и возникнут...


Никакие окошечки не возникают. Все прекрасно посылается. VB6 вызывает .Send.

Что-то я в вашем коде не вижу .Send
Если я добавляю .Send , то при вызове метода возникают предупреждающие окна.
Да к тому же если окошки не вылазят, то зачем было создавать тему про то как от них избавиться?


Andrewsha,
я показала код, который прекрасно работает. При етом не надо использовать Winsock, который несколько более сложные . Я благодарна за Ваш input с MAPI, но к сожалению ето не работает по причине Outlook security. Если Вы считаете, что тот пример, который я posted, не работает, и Вам лень его проверить- Ваше право, но не надо спорить с таком неуважительном тоне.
А тема была вызвана по вполне уважительным причинам, которые я указала в начале пост.
Всем большое спасибо за помощь
User avatar
Andrewsha
Новичок
Posts: 75
Joined: 24 Aug 2000 09:01
Location: Ufa->Moscow

Post by Andrewsha »

tortilla wrote:
Andrewsha wrote:Что-то я в вашем коде не вижу .Send
Если я добавляю .Send , то при вызове метода возникают предупреждающие окна.
Да к тому же если окошки не вылазят, то зачем было создавать тему про то как от них избавиться?


Andrewsha,
я показала код, который прекрасно работает. При етом не надо использовать Winsock, который несколько более сложные . Я благодарна за Ваш input с MAPI, но к сожалению ето не работает по причине Outlook security. Если Вы считаете, что тот пример, который я posted, не работает, и Вам лень его проверить- Ваше право, но не надо спорить с таком неуважительном тоне.
А тема была вызвана по вполне уважительным причинам, которые я указала в начале пост.
Всем большое спасибо за помощь

Во-первых с чего Вы взяли, что я спорю в ТАКОМ неуважительном тоне? По-моему, я обращаюсь на ВЫ и без личностных выпадов. Просто пытался действительно разорбраться в проблеме!
И с чего Вы взяли, что мне лень проверить Ваш пример? Я его очень даже проверил, потому и написал, что в нем нет непосредственно отправки сообщения, метод Send то не вызывается, вызывается только отображение письма. А если я его добавляю, то ничего не работает.
Насчет уважительных причин, оно понятно, просто непонятно, то что Вы изначально обратились за помощью, а в результате остановились на способе, который например у меня не работает. Вот и пытался понять где истина, а Вы про неуважительный тон зачем-то...

Return to “Вопросы и новости IT”