Newsgroup: it.comp.lang.vo-clipper
Titolo: Spedire un e-mail da VO !!!

Eh si cari amici !!!   non ci riesco !!!  :-))))
Non si può mica sapere tutto !!!
Allora chiedo un aiuto a chi ha già avuto questa esperienza.
Io devo fare in modo che premendo un bottone in una finestra :
1)   venga connesso il modem  (riconoscimento di utente e pasw autom.)
2)   venga spedito il messaggio
3) disconnessione
semplice no ?
ebbene ... tutti gli esempi che ho ha disposizione non fanno questo !!!
le cose sono due
Sono davvero ebete !!!     oppure questi esempi non prendono in
considerazione che si deve fare la connessione a Internet e poi spedire il
messaggio ecc...
Non voglio usare l'interfaccia di outlook  (altrimenti lo avrei già fatto
!!!)
Grazie a chi mi volesse dare qualche dritta !!!
Ciao
Enio


Io faccio così ed a parte la disconnessione (mi pare che si debba usare una
funzione della libreria wininetapi ) funziona.
Ciao.
Roberto Cordini
METHOD PBINVIAEMAIL() CLASS MIACLASSE
LOCAL oInviaEmail AS InviaEmail
LOCAL aDestinatari  AS ARRAY
LOCAL aAllegati   AS ARRAY
LOCAL sOggetto   AS STRING
LOCAL sCorpoMessaggio   AS STRING
sOggetto:="Invio messaggio di prova con allegati"
sCorpoMessaggio := "Spett.le/Egr.Sig." +CR+LF
sCorpoMessaggio += "Nome, Cognome e quello che ti pare"
*
aDestinatari:={}
AAdd(aDestinatari,"
pi...@pippo.it
)
*
aAllegati:={}
AAdd(aAllegati,"C:\File.txt")
oInviaEmail:=InviaEmail{Gl_SmtpRemoteHost,sOggetto,aDestinatari,"indirizzo-m
itt...@pippo.it
",sCorpoMessaggio,aAllegati}
RETURN NIL
CLASS InviaEmail INHERIT ChildAppWindow
PROTECT sSmtpHostRemoto AS STRING
PROTECT sOggetto        AS STRING
PROTECT aDestinatari    AS ARRAY
PROTECT sMittente       AS STRING
PROTECT sCorpoMessaggio AS STRING
PROTECT aError          AS ARRAY
METHOD
Init(sSmtpHostRemoto,sOggetto,aDestinatari,sMittente,sCorpoMessaggio,aAllega
ti) CLASS InviaEmail
LOCAL oCeMail AS OBJECT
LOCAL oCsmtp AS OBJECT
aError := {}
IF Empty(sSmtpHostRemoto)
 AAdd(aError,"Errore: Il server remoto SMTP non è stato definito nei
parametri di NOME PROCEDURA")
ENDIF
IF Len(aDestinatari)==0
   AAdd(aError,"Errore: Indirizzi e-mail dei destinatari non presenti")
ENDIF
IF Empty(sMittente)
 AAdd(aError,"Errore: Indirizzo e-mail del mittente non specificato")
ENDIF
oCeMAil := CEmail{}
oCemail:Subject    := sOggetto
oCeMAil:DestList   := aDestinatari
oCEmail:MailBody   := sCorpoMessaggio
oCEmail:FromAddress   := sMittente
oCEmail:ReplyTo    := sMittente
oCEmail:FromName   := "NOME DEL MITTENTE"
oCEmail:AttachmentFileList  := aAllegati
oCsmtp:=CSmtp{oCeMAil}
oCSmtp:RemoteHost := sSmtpHostRemoto
IF !oCsmtp:connect(sSmtpHostRemoto)
 AAdd(aError,"Errore: Non si è collegati ad Internet oppure il server SMTP
non risponde")
ELSE
 oCsmtp:Disconnect()
ENDIF
IF !oCsmtp:SendMail()
 AAdd(aError,"Errore: Impossibile inviare la e-mail")
ENDIF
RETURN SELF

 3) disconnessione
L'analoga della RasDial() č la RasHangUp().
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

in maniera molto meno elegante ma è la stessa procedura che uso io.
In ogni caso, caro Enio, un mio maestro replica sempre che negli esempi di
vo esistentono degli esempi chiari, concisi e scritti in inglese!!!!
Francesco D'Aquila
"Robby" <roberto...@NOXSPAMiol.it> ha scritto nel messaggio
news:adavbm$6ac$1...@zamboni.dsnet.it...


Vi ringrazio per le risposte :
Ho trovato la soluzione :
si devono creare i prototipi di due funzioni delle API di Windows adatte
allo scopo e poi, con gli opportuni parametri, utilizzare quelle.   Io ho
fatto cosě e funziona bene senza problemi.
_DLL FUNCTION InternetDial(hwndParent AS PTR,lpszConnectoid AS PSZ,dwFlags
AS DWORD,lpdwConnection AS PSZ,dwReserved AS DWORD) AS DWORD
PASCAL:WININET.InternetDial
_DLL FUNCTION InternetHangUp(dwConnection AS DWORD,dwReserved AS DWORD) AS
DWORD PASCAL:WININET.InternetHangUp
(attenzione queste definizioni dei prototipi sono tutti su una sola riga
!!!!)
Queste derivano dalla WININET.DLL
per utilizzarle quindi :
METHOD SpedisceEMail() CLASS MiaCLasse
    LOCAL nConnessione as INT
 InternetDial(SELF:Handle(),String2Psz("tin"),1,@nConnessione,0)      <---
inizia una connessione
        .....Programma per spedire una EMail
 InternetHangUp(nConnection,0)                        <----   termina a e
stacca la linea del modem !!!
Ciao a tutti
Enio

Ciao Enio. Visto che si parla della wininet.dll non è che potresti dirmi
dove trovare il file di help relativo (presumo wininet.hlp)? L'ho cercato
sul sito della Microsoft ma senza successo.
Ciao.
Roberto Cordini

Visto che hai trovato le funzioni della wininet.dll da usare per connettersi
e disconnetersi da Internet, sai come fare per controllare che il
collegamento non sia già attivato prima di effettuare l'eventuale
connessione?
Ciao e grazie.
Roberto Cordini

C'è un sito nato e dedicato per vo, dove puoi trovare di tutto e che
sicuramente conosci:
www.knowvo.com
 , basta ricercare la parola "internet", vedrai che troverai
una libreria dedicata ai prototipi di wininet correlato di spiegazioni.
Ciao Luigi De Palma
"Robby" <roberto...@NOXSPAMiol.it> ha scritto nel messaggio
news:adf9f2$jrm$1...@zamboni.dsnet.it...



Fatto. Come sempre chi sa cercare trova (e non è neanche tanto difficile).


 fatto cosě e funziona bene senza problemi.
Solo una piccola nota: le API della WININET.DLL non funzionano sotto
W95. Anche se questa č una versione di Windows ormai ultra-obsoleta č
bene sapere che utilizzando quelle la si sta escludendo dal proprio
supporto (e ci sono tanti utenti che la usano ancora...). Invece le API
della serie RASDIAL() funzionano su qualunque versione dalla 95 in poi.


 sul sito della Microsoft ma senza successo.
Nella MSDN c'è tutta la documentazione.


Buona Notizia !!!
Grazie Enrico ... sempre gentile e prodigo di suggerimenti
Enio

 ha scritto nel messaggio
news:adffm9$10hft1$1...@ID-83678.news.dfncis.de...


devi usare queste funzioni della libreria WININET.DLL :
LOCAL nConnection AS INT
InternetDial(SELF:Handle(),String2Psz("nomeConnessionediAccessoRemoto"),1,@n
Connection,0)
 SMTP:SendMail(...............)    // o relativa funzione per spedire email
 InternetHangUp(nConnection,0)
Ciao
Enio

 ha scritto nel messaggio
news:b27N8.21572$TS.6...@news1.tin.it...


Noo no è molto più semplice (in VO !!!)
copiati pari pari questo codice e richiama le funzioni come ti ho
descritto... vedrai che tutto funzionerà :
_DLL FUNCTION InternetDial(hwndParent AS PTR,lpszConnectoid AS PSZ,dwFlags
AS DWORD,lpdwConnection AS PSZ,dwReserved AS DWORD) AS DWORD
PASCAL:WININET.InternetDial
_DLL FUNCTION InternetHangUp(dwConnection AS DWORD,dwReserved AS DWORD) AS
DWORD PASCAL:WININET.InternetHangUp
Questi sono i "prototipi" delle funzioni che risiedono nella WININTE.DLL.
Anche se non le trovi nelle librerie Win32 API nel repository di VO  (al
modulo WININET)
Esse possono essere richiamate direttamente dalla libreria di windows nel
modo che ti ho descritto sopra.
E questo (ricorda) che lo potrai fare ogni volta che ti serve una funzione
che non è nelle librerie (GUI System Classes ecc..) di VO
Semplice No ?
purtroppo vengono spezzate ma ogni funzione la devi scrivere in un unica
riga o separare le righe contihue da un ; come tu ben sai
Ciao
Enio

 ha scritto nel messaggio
news:mqiO8.33373$TS.9...@news1.tin.it...

Ho seguito il tuo consiglio, ho tolto il caricamento in PreInit della
libreria e il metodo Axit, ho aggiunto le righe contenute nel tuo
suggerimento e alla compilazione non ho avuto alcun problema.
L'attivazione della connessione di accesso remoto selezionata la esegue
correttamente ma la disattivazione non la esegue e mi da il seguente errore:
----------------------------------------------------------------------------
----
Error Code: 4 [OVERFLOW NUMERICO]
Subsystem: VO-CODE
Function: =>
CallStack:
nella riga della funzione InternetHangUp(nConnection, 0)
----------------------------------------------------------------------------
----
Definizione variabili
 LOCAL nConnection AS INT
----------------------------------------------------------------------------
----
Collegamento
IF ! FFirst(AsPsz(sSede), FA_VOLUME)     && Controllo Connessione
  SELF:oDCInforma:Value := "Collegamento in attesa di attivazione..."
  lGiaColl := FALSE
  IF InternetDial(SELF:Handle(),String2Psz("Sede Virlinzi
CT"),1,@nConnection, 0) <> 0
    ErrorBox{SELF, "Errore nel collegamento con la sede. Riprova !"}:Show()
    BREAK
  ENDIF
 ELSE
  lGiaColl := TRUE
ENDIF
----------------------------------------------------------------------------
----
Scollegamento
InternetHangUp(nConnection, 0)
Sleep(2000)
IF  FFirst(AsPsz(sSede), FA_VOLUME)     && Controllo Connessione
  WarningBox{SELF, "Collegamento ancora attivo", ;
    "CONTROLLA LA CORRETTA DISATTIVAZIONE DEL COLLEGAMENTO MODEM"}:Show()
ENDIF
----------------------------------------------------------------------------
----
Se ti viene in mente qualcosa che possa aiutarmi ...
Ciao Claudio

Non saprei ..a me funziona benissimo (uso w2000 prof e outlook express !!).
Mah probabilmente nConnection assume un valore scorretto, guarda con il
debug  e attento a mettere
@nConnection

Caro robby 
Ho visto il tuo esempio relativo all'invio di email da vo ma ci sono
alcune cose che non mi sono chiare
innanzitutto non ho capito da dove proviene la classe CEmail{} e la
classe CSmtp
ti risulta che debbo linkare qualche libreria particolare o posso usare
quelle standard di VO?
Grazie in anticipo per la risposta.
 
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Certo !!!    sono normali classi di VO (2.5) per creare applicazioni verso
il mondo Internet !!!
Sono nell'help, nei manuali, negli esempi (cavo25\samples), nell'application
gallery ecc...
se vai nel sito 
www.knowVo.com
 e scrivi nella casella di ricerca "internet"
troverai anche molti esempi tra i quali alcuni molto interessanti
provenienti dalle sessioni dell'ultimo CAWORLD (DEVxxxxx)
Ciao
Enio

Scusa ma ci stavo provando con la versione 2.0! :)
Antonio!
