Newsgroup: it.comp.lang.visual-basic
Titolo: Aprire il mail Client con address, subject e attachment pre-impostati

Ciao a tutti,
dopo una giornata intera spesa a brancolare nel buio, vi giro il mio
quesito:
Devo inserire una funzione in un mio prg in VB6 che mi permetta di aprire il
Client email predefinito, pre-caricare i campi: [TO:] [SUBJECT:] [BODY
TEXT:] e inserire un file in attachment.
Ma SENZA inviare l'email, il client di posta deve attendere che l'utente
modifichi eventualmente qualcosa e poi prema il tasto Invia.
In pratica devo ottenere l'effetto tipo mailto:
pi...@pluto.com
 ma completo
di indirizzo, oggetto, corpo-testo e allegato.
In pratica, con l'allegato, dovrei scatenare lo stesso evento che avviene
quando premi col destro sull'icona di un qualsiasi file e scegli la voce
"Invia a =>Destinatario posta".
P.S. Mi piacerebbe che funzionasse con qualunque client di posta (come è
d'altra parte con mailto: ), quindi senza adoperare controlli specifici di
outlook express.
Chi mi sà dare la dritta giusta?
Grazie a tutti.
Riccardo Bennati
r.bennati_sega...@bennati.it

 wrote in message
ad5ikq$2el$1...@fe2.cs.interbusiness.it...



Sono proprio i primi che ho scartato, perchè secondo me, non fanno al mio
caso.
Salvo smentita, l'interfaccia MAPI di VB presume di sostituirsi al client di
posta, ma non di 'risvegliarlo' aprendo la finestra "Invia messaggio" con i
campi già impostati, come voglio fare io...
Vi prego, ditemi che mi sbaglio e che invece si puù fare con i controlli
MAPI....

 ha scritto nel messaggio
news:ad7i3p$jnn$1...@fe1.cs.interbusiness.it...

Provato e funziona. Preso da un sito web. Buon Lavoro.
'----------------------
Option Explicit
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_SHOW = 5
'metti un command nel form
Private Sub Command1_Click()
  OpenEmail "
feed...@freevbcode.com
", "Hello", "We really like your web
site."
End Sub
'funzione che serve a te.
Public Function OpenEmail(ByVal EmailAddress As String, _
    Optional Subject As String, Optional Body As String) _
    As Boolean
    Dim lWindow As Long
    Dim lRet As Long
    Dim sParams As String
    sParams = EmailAddress
    If LCase(Left(sParams, 7)) <> "mailto:" Then _
        sParams = "mailto:" & sParams
 If Subject <> "" Then sParams = sParams & "?subject=" & Subject
    If Body <> "" Then
        sParams = sParams & IIf(Subject = "", "?", "&")
        sParams = sParams & "body=" & Body
    End If
   lRet = ShellExecute(lWindow, "open", sParams, _
    vbNullString, vbNullString, SW_SHOW)
   OpenEmail = lRet = 0
End Function

 Provato e funziona. Preso da un sito web. Buon Lavoro.
funziona anche con l'allegato ?
ne sarei felice.
j.
--
From: "Francesco Balena"
Subject: Re: sending mail from vb
Date: Fri, 25 Feb 2000 01:37:41 +0100
On effetti c'è un errore sul codice nel sito, e il parametro attachment non
è supportato. Stiamo per aggiornare il tip in questione.
Saluti, e grazie per aver portato il problema a nostra conoscenza
.... e la prossima volta scrivi in italiano!
Francesco


[SNIP]
ROTFL =)
Lokar

Grazie. Era la strada che avevo intrapreso da subito, prima di scoprire che
il fantomatico parametro attach= della shellextention
"mailto:
x...@yyy.com
?subject..........&attach=filename " NON é supportato.
Microsoft lo dice espressamente in un articolo della Knowledgebase e rimanda
ad una RFC a riguardo, da qualche parte ho anche il link.
Però, con la funzione "Send To => Email Recipient" (Invia a=>Destinatario di
Posta) invece funziona.... Io non a questo punto non ci capisco più granché.
Non c'è qualcuno che mi sa dire se con i controlli MAPI di VB posso aprire
la finestra d'invio di un client generico, precaricare i campi MA NON
MANDARE l'email lasciando che a farlo sia l'utente cliccando su Invia?
Se la risposta è SI con certezza, mi metto a studiare le MAPI, sennò cerco
altre strade.
Ri-grazie a tutti.

 MANDARE l'email lasciando che a farlo sia l'utente cliccando su Invia?
Con Outlook e Outlook Express funzionano benissimo.
Quello che io faccio è:
a) Al completamento di una procedura operatore, viene generato un file Pdf
b) Durante la procedura, era stato indicato quale fornitore è interessato
dal documento
c) Se in anagrafica fornitore c'è l'indirizzo e-mail, si apre un messaggio
di posta, con destinatario, subject, parte del messaggio, e allegato Pdf,
già impostati
d) L'utente completa il messaggio e preme 'Invia'
e) il messaggio va in posta in uscita (l'invia e ricevi lo fa poi il client
quando ritiene giusto)
Mai provato con altri client.
Ciao
Alberto

......


 d'esempio... tanto per non iniziare a studiare le MAPI da zero?
Public Function Invia_Mail(ByRef Sessione As Object, ByRef Messaggi As
Object, Optional ByVal Prompt As Boolean = True, Optional ByVal Mittente As
String = "", Optional ByVal Nome_Destinatario As String = "", Optional ByVal
Destinatario As String = "", Optional ByVal Soggetto As String = "",
Optional ByVal Testo As String = "", Optional ByVal Allegato1 As String =
"", Optional ByVal Allegato2 As String = "", Optional ByVal Allegato3 As
String = "") As Integer
'Funzione di Invio e-Mail - Vers. 1.02 - 22/05/2001
'Richiede la presenza di un oggetto MAPISESSION e MAPIMESSAGES sulla form
chiamante.
'Gli oggetti devono essere passati alla funzione.
'Vers. 1.02:    Modificato ordine di inserimento allegati per risolvere bug
con Outlook
'*******   Parametri
'Sessione           Oggetto MAPISession
'Messaggi           Oggetto MAPIMessages
'Prompt             Boolean: TRUE=L'utente avrà una finestra per indicare i
dati del messaggio; FALSE=Il messaggio va direttamente in Outlook
'Mittente           String: Nome del mittente
'Nome_Destinatario  String: Nome del destinatario
'Destinatario       String: Indirizzo internet del destinatario
'Soggetto           String: Subject del messaggio
'Testo              String: Testo del messaggio
'Allegato1          String: Percorso e Nome del file allegato 1
'Allegato2          String: Percorso e Nome del file allegato 2
'Allegato3          String: Percorso e Nome del file allegato 3
'Ritorno: INTEGER
'Ritorno=99     Nessun Errore
'Ritorno=1      Errore Generico
On Error GoTo Errore_generico
Invia_Mail = 99
Sessione.SignOn
Messaggi.SessionID = Sessione.SessionID
Messaggi.Compose
If Mittente <> vbNullString Then
    Messaggi.MsgOrigDisplayName = Mittente
End If
If Soggetto <> vbNullString Then
    Messaggi.MsgSubject = Soggetto
End If
If Testo <> vbNullString Then
    Messaggi.MsgNoteText = Testo
Else
    Messaggi.MsgNoteText = "File Allegati..."
End If
If Nome_Destinatario <> vbNullString Then
    Messaggi.RecipDisplayName = Nome_Destinatario
End If
If Destinatario <> vbNullString Then
    If Messaggi.RecipDisplayName = "" Then
        Messaggi.RecipDisplayName = "---"
    End If
    Messaggi.RecipAddress = Destinatario
End If
If Allegato1 <> vbNullString Then
    Messaggi.AttachmentIndex = 0
    Messaggi.AttachmentPosition = 1
    Messaggi.AttachmentPathName = Allegato1
End If
If Allegato2 <> vbNullString Then
    Messaggi.AttachmentIndex = 1
    Messaggi.AttachmentPosition = 2
    Messaggi.AttachmentPathName = Allegato2
End If
If Allegato3 <> vbNullString Then
    Messaggi.AttachmentIndex = 2
    Messaggi.AttachmentPosition = 3
    Messaggi.AttachmentPathName = Allegato3
End If
If Prompt Then
    Messaggi.Send True
Else
    Messaggi.Send False
End If
Sessione.SignOff
Exit Function
Errore_generico:
Invia_Mail = 1
End Function

 MANDARE l'email lasciando che a farlo sia l'utente cliccando su Invia?
Si, si può fare, l'unico requisito è che il client di posta che usi sia
un server MAPI (la maggior parte lo sono).
Ad esempio il mio newsreader (vedi firma) permette di inviare mail
richiamando tramite MAPI il client di posta. Nel mio caso non faccio uso
di allegati, ma si possono usare.
-- 
Samuele Battarra
prova il mio newsreader:
http://digilander.iol.it/battarsa/programmi/news/