Newsgroup: it.comp.lang.visual-basic
Titolo: mail e OE per l'ennesima volta

Ciao a tutti, è un argomento stra-discusso ma mi sembra che nessuno l'abbia
mai chiarito...
è possibile creare una mail CON ALLEGATO da codice e trovarla nella cartella
posta in uscitra di outlook EXPRESS?
Se si, come?
ciao, AEOM

 posta in uscitra di outlook EXPRESS?
Hai provato a dare un'occhiata agli oggetti MAPISession e MAPIMessage?
Salutoni
Sergio

 ha scritto

veramente, fino a prova contraria, e' stato stra-discusso e
stra-chiarito.
NO
qualcuno ha detto nei giorni scorsi che c'e' riuscito.
non e' per sfiducia, servirebbe a parecchi, ma aspetto di vedere e
testare il codice.

 ciao, AEOM
Ciao, Giorgio.

Questo è una porzione del codice che utilizzo io
Private Function SendMessage() As Boolean
    'avvio una sessione di mail
    Session.NewSession = True
    Session.DownLoadMail = False
    Session.LogonUI = False
    Session.SignOn
 
    With Messages
    'associo la sessione al controllo MAPI messages
    .SessionID = Session.SessionID
    .MsgIndex = -1
    'allego il file con la descrizione degli errori
    .AttachmentIndex = 0
    .AttachmentPathName = percorso
    'oggetto e messaggio
    .MsgSubject = soggetto
    .MsgNoteText = testo
    'destinatario
    .RecipDisplayName = mittente_visualizzato
    .RecipAddress = indirizzo_di_posta
    'invio del messaggio
    .Send
    End With
 
    Session.SignOff
    SendMessage = True
End Function
ciao

 testare il codice.
Precisiamo: Con VB+MAPI si puň (anche con piů allegati), in altro modo,
passo...

 passo...
ok, cerbero (altro canide) conferma. io pensavo a mailto.
allora, situazione:
-con mailto, no
-con mapi, si'
altre risposte ?

 altre risposte ?
Sě, anzi, domande:
Perchč, tu che ami abbreviare (ma senza usare le k) e non ami il maiuscolo,
scrivi si' e non sě (che ti costa meno)? ;-PP

 ha scritto nel messaggio
news:ecoeuu0ogh27u8ahb...@4ax.com...
Questo č una porzione del codice che utilizzo io
Private Function SendMessage() As Boolean
    'avvio una sessione di mail
    Session.NewSession = True
    Session.DownLoadMail = False
    Session.LogonUI = False
    Session.SignOn
cut
Forse non mi sono spiegato, vorrei trovarmi con la mail con allegato
inserita nella casella posta in uscita di outlook express.
Ho visto software che lo fanno ma non ho mai trovato il codice.
Ciao

 ha scritto nel messaggio
news:hqIF9.6728$fa.2...@news1.tin.it...

Il problema non č l'invio č che vorrei, come vedo in alcuni software,
trovarmi la mail pronta con allegato dentro la cartella posta in uscita di
OE.
Ciao, AEOM

 scrivi si' e non sě (che ti costa meno)? ;-PP
i accentata e' un carattere alto.
in posta non si usano. almeno, io non li uso.
tant'e' che ormai anche in word scrivo verita' pero' cioe', e
vigliacco se mi ricordo di fare la regolina di corr. aut.  ...
(
nb che gli apostrofi sarebbero corretti, etimologici:
verita(tem), per ho(c), hoc e(st), pensa solo a "i.e." inglese = id
est = cioe' :)
)

javalab ha scritto:

Tu mi freghi sempre. :-(

 uscita di OE.
Basta che stai disconnesso.

 Tu mi freghi sempre. :-(
e' che, prova e riprova, tu ormai ti sei contamin ado :)

 altre risposte ?
con mapi sicuramente.
con mailto: la faccenda è particolare.
in _teoria_ la mailto: supporta il parametro attachment=
ma ho il "sospetto" che in realtà windows faccia una
chiamata mapi.
per es. se il seguente codice viene usato avendo "guardafuori" full
come gestore di posta funziona, con "Guardafuori In Fretta" no:
Private Declare Function ShellExecute Lib "shell32.dll" Alias
"ShellExecuteA" (ByVal HWnd As Long, ByVal lpOperation As String, ByVal
lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String,
ByVal nShowCmd As Long) As Long
Private Sub Command1_Click()
    Dim iRet As Long
    Dim str As String
    str =
"mailto:
pippo@pluto
?subject=ciao&body=ciao%20a%20tutti&attachment=" & """" &
"c:\pippo.txt" & """"
    iRet = ShellExecute(Me.HWnd, vbNullString, str, vbNullString, "c:\", 1)
End Sub
Tempo fa avevo trovato un'idea interessante in rete:
Visto che mailto: ( o Guardafuori) non vanno, perchè non scrivere
direttamente il file .eml e aprirlo con una "open"...?
L'idea mi pare carina!
Posto tutto il codice:
' Send email using Outlook Express (IE4 required)
' Created by: Bruno Paris, ameba @
zg.tel.hr
Option Explicit
' API declarations
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function ShellExecute Lib "shell32.dll" Alias
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal
lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String,
ByVal nShowCmd As Long) As Long
Private Const SW_SHOWNORMAL = 1
'
Private Const bnd = "_NextPart_001_"     ' boundary
Private Const charset = "iso-8859-2"     ' or windows-1250
Private Sub cmCancel_Click()
   Unload Me
End Sub
Private Sub cmSend_Click()
'    Send email
   Dim i As Integer
   Dim iRet As Long, numfile%, FileName$
   Dim recips As String  ' recipients
   On Error GoTo SendErr ' enable error handling
'------------------------------------------------
'    Create string for field "To:"
   recips = txtRecip.Text
'    or:
'    RecipArray() holds email addresses, List1 holds names
'    For i = 0 To List1.ListCount - 1
'        If List1.Selected(i) = True Then
'            If Len(recips) > 0 Then recips = recips & ", "
'            recips = recips & "<" & RecipArray(List1.ItemData(i)) & ">"
'        End If
'    Next
'------------------------------------------------
   numfile% = FreeFile
   ' Open temporary file
   FileName$ = getapppath() & "~temp.eml"
   Open FileName$ For Output As #numfile%
   ' display hourglass
   Screen.MousePointer = vbHourglass
   DoEvents
   ' start writing to temporary file
'------------------------------------------------
' "Blind carbon copy" or "To"
   If chkBcc.Value = 1 Then
       Print #numfile%, "Bcc: " & recips
   Else
       Print #numfile%, "To: " & recips
   End If
'------------------------------------------------
' subject
   Print #numfile%, "Subject: " & txtSubject.Text
'------------------------------------------------
   Print #numfile%, "MIME-Version: 1.0" & vbCrLf & "Content-Type:
multipart/mixed;"
   Print #numfile%, vbTab & "boundary=""" & bnd & """"
   Print #numfile%, "X-Unsent: 1"
   Print #numfile%,
   Print #numfile%,
   Print #numfile%, "--" & bnd
   Print #numfile%, "Content-Type: text/plain;"
   Print #numfile%, vbTab & "charset=""" & charset & """"
   Print #numfile%, "Content-Transfer-Encoding: 7bit"
   Print #numfile%,
'------------------------------------------------
' msg body
   Print #numfile%, txtMsg.Text
'------------------------------------------------
   ' simple text file, max 60 characters per line
   If chkInvoice > 0 Then ' attach file1
       Dim att As String
       att = "invoice.txt"
       Print #numfile%, "--" & bnd
       Print #numfile%, "Content-Type: text/plain;"
       Print #numfile%, vbTab & "name=""" & att & """"
       Print #numfile%, "Content-Transfer-Encoding: 7bit"
       Print #numfile%, "Content-Disposition: attachment;"
       Print #numfile%, vbTab & "filename=""" & att & """"
       Print #numfile%,
       ' write invoice data to file
       Print #numfile%, "Invoice"
       Print #numfile%,
       Print #numfile%,
       Print #numfile%, "No: " & vbTab & "101/99"
       Print #numfile%, "Date:" & vbTab & Format$(Now, "Short Date")
       Print #numfile%,
       Print #numfile%, "QUANTITY    DESCRIPTION UNIT PRICE  AMOUNT"
       Print #numfile%, "5           PC                $890  $4450"
       Print #numfile%,
       Print #numfile%, "SUBTOTAL:"
       Print #numfile%, "SALES TAX:"
       Print #numfile%, "TOTAL DUE:"
       Print #numfile%,
       Print #numfile%,
       Print #numfile%, "SALESPERSON:"
       Print #numfile%,
       Print #numfile%, "Make all checks payable to: Your Company Name"
       Print #numfile%, "If you have any questions concerning this invoice,
call: Contact Name, Phone Number"
       Print #numfile%,
       Print #numfile%,
       Print #numfile%, "THANK YOU FOR YOUR BUSINESS!"
       Print #numfile%,
   End If
   ' simple text file, max 60 characters per line
   If chkOffer.Value Then ' attach file2
       att = "offer.txt"
       Print #numfile%, "--" & bnd
       Print #numfile%, "Content-Type: text/plain;"
       Print #numfile%, vbTab & "name=""" & att & """"
       Print #numfile%, "Content-Transfer-Encoding: 7bit"
       Print #numfile%, "Content-Disposition: attachment;"
       Print #numfile%, vbTab & "filename=""" & att & """"
       Print #numfile%,
       ' write offer data to file
       Print #numfile%, "Offer"
       Print #numfile%,
       Print #numfile%, "Created: " & Format$(Now, "Short Date")
       Print #numfile%, "etc."
       Print #numfile%,
       Print #numfile%, "Thank you for considering our offer!"
       Print #numfile%,
   End If
'------------------------------------------------
   Print #numfile%, "--" & bnd & "--"
' close temporary file
   Close #numfile%
   Reset ' flush all file buffers
   ' wait 1-2 seconds
   For i = 1 To 10
       Sleep (100)
       DoEvents
   Next
'------------------------------------------------
   ' now, open created file with default e-mail program
   iRet = ShellExecute(Me.hwnd, "Open", _
      FileName$, _
      "", "c:\", SW_SHOWNORMAL)
   ' if default e-mail program is Outlook Express,
   ' this will show "New Message" window
'------------------------------------------------
   DoEvents
   Sleep (200)
   On Error Resume Next
   Dim numrtr As Integer
rtr:
   numrtr = numrtr + 1
   DoEvents
   Sleep (100)
   ' set focus to "Outlook Express" window with new msg
   AppActivate txtSubject.Text
   If Err <> 0 Then
       Err = 0
       ' if set focus was not succesfull, wait a while and retry
       If numrtr < 100 Then GoTo rtr
   Else
       ' now, press Ctrl-Enter to send to outbox
       If chkSendEnter.Value Then SendKeys "^~"
   End If
   ' After mail is in Outbox, we might want to connect if needed:
'    If IsConnected() = False Then
'        StartConnection
'    End If
   Screen.MousePointer = vbNormal
   Exit Sub
SendErr:
   Screen.MousePointer = vbNormal
   MsgBox Err.Description
   Exit Sub
End Sub
Function getapppath() As String
' returns path
   Dim sTemp As String
   sTemp = App.Path
   If Right$(sTemp, 1) <> "\" Then sTemp = sTemp & "\"
   getapppath = sTemp
End Function
Private Sub Form_Load()
   txtMsg.Text = "My dear customer," & vbCrLf & _
       "This is the offer you cannot refuse." & vbCrLf & vbCrLf & _
       "Salesperson"
End Sub
ciao
ugo

 con mailto: la faccenda è particolare.


 che sia li' ?
No, Outlook non viene comunque chiamato via ole, ma
semplicemente gli vengono forniti dei parametri dalla mailto:
Ma la mia impressione è che win esegua una chiamata mapi.
dai un'occhiata nella
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mailto\shell\open\command
con Oe come predefinito trovi:
"%ProgramFiles%\Outlook Express\msimn.exe" /mailurl:%1
con Outlook:
"C:\PROGRA~1\MICROS~2\Office\OUTLOOK.EXE" -c IPM.Note /m "%1"
(o simili)
ciao
ugo

 "C:\PROGRA~1\MICROS~2\Office\OUTLOOK.EXE" -c IPM.Note /m "%1"
con oe la var d'ambiente, con o il l'hardpath dos...
coerenza...

 coerenza...
a beh, quanto a questo credo che tutti abbiamo avuto
a che fare con la coerenza delle logiche/direttive ms...
A volte riescono persino a darsi torto a vicenda
tra un ufficio e l'altro!
ciao
ugo