Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [VB6] Utilizzo di Telnet all'interno di VB6

    Ciao a tutti!

    Vengo al punto, vorrei integrare alcune funzionalità di Telnet all'interno di un mio programma scritto in VB6.
    In pratica vorrei dare la possibilità di spedire una mail e per fare ciò, ho tentato questo:

    1) Mi sono connesso ad un server di posta tramite Winsock con questa sintassi:

    codice:
    Winsock.Connect "smtp.libero.it", 25
    La connessione ha dato esito positivo.

    2) Una volta connesso ho iniziato ad inviare dati:

    codice:
    Winsock.SendData "HELO Libero" & vbCrLf
    Winsock.SendData "MAIL FROM:<" & mittente & ">" & vbCrLf
    Winsock.SendData "RCPT TO:<" & destinatario & ">" & vbCrLf
    Winsock.SendData "DATA" & vbCrLf
    Winsock.SendData vbCrLf & "Testo:" & vbCrLf
    Winsock.SendData testo_mail
    Winsock.SendData vbCrLf
    Winsock.SendData "."
    Winsock.SendData vbCrLf
    Winsock.SendData "QUIT"
    Però, alla prima "SendData" mi è stato segnalato il seguente errore:

    Errore '40006'
    Protocollo o stato della connessione errato per la transazione richiesta o la richiesta'
    Con ogni probabilità ho saltato uno o più passaggi fondamentali, qualcuno può consigliarmi?
    Grazie!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E che c'entra Telnet?

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da SkyNET290897
    Con ogni probabilità ho saltato uno o più passaggi fondamentali, qualcuno può consigliarmi?
    Sei certo di essere effettivamente riuscito a collegarti al server prima di inviare dati e che tale server abbia davvero accettato la tua connessione?

    In effetti, Telnet c'entra poco...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Parlo di Telnet perchè i comandi sono quelli, mi sono collegato al server di posta di Libero con il Telnet di Windows e la connessione è stata accettata senza problemi, dal programma invece segnala errore.

    Nel frattempo ho anche letto diversi post di questo forum in proposito (e-mail com VB6) e mi sembra che la sintassi sia giusta.

    Correggetemi se sbaglio, se io risco a mandare una mail ad un determinato server di posta con il Telnet di Windows, il server può rifiutare la connessione effettuando la medesima operazione da codice?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da SkyNET290897
    Parlo di Telnet perchè i comandi sono quelli, mi sono collegato al server di posta di Libero con il Telnet di Windows e la connessione è stata accettata senza problemi, dal programma invece segnala errore.
    Il Telnet e' uno "strumento" (oltre che un protocollo), tra i tanti, che puoi utilizzare per contattare il server SMTP. Ma quelli che dai sono comandi SMTP e non hanno nulla a che fare con Telnet.

    Originariamente inviato da SkyNET290897
    Correggetemi se sbaglio, se io risco a mandare una mail ad un determinato server di posta con il Telnet di Windows, il server può rifiutare la connessione effettuando la medesima operazione da codice?
    No. Appunto perche' Telnet e' solo uno degli strumenti utilizzabili, tu puoi usare qualsiasi altro programma, anche se lo scrivi tu.

    Il problema e' il tuo codice ... se invii tutti i comandi uno dietro l'altro cosi' come hai mostrato, senza attendere la risposta del server (codice e messaggio), il "sincronismo" del dialogo si perde e il server ti indica che si e' verificato un errore.

    Il dialogo con un server SMTP da codice e' un "tantino" piu' complesso.

    Se proprio vuoi farlo da codice, dai un'occhiata al sorgente della DLL vbSendMail che e' disponibile in rete.

    P.S. Ovviamente le prove con il client Telnet e con il tuo programma le hai fatto nelle stesse condizioni ... collegato da Libero con un mittente di Libero ...

  6. #6
    Allora, ho implementato il codice con un ritardo tra una istruzione e l'altra.

    codice:
    Private Sub Form_Load()
     Winsock1.Close
     Winsock1.Connect "smtp.libero.it", 25
    End Sub
    
    Private Sub Command1_Click()
     Winsock1.SendData "RSET" & vbCrLf
     Delay
     Winsock1.SendData "HELO Libero" & vbCrLf
     Delay
     Winsock1.SendData "MAIL FROM:<server@server.it>" & vbCrLf
     Delay
     Winsock1.SendData "RCPT TO:<skynet290897@libero.it>" & vbCrLf
     Delay
     Winsock1.SendData "DATA" & vbCrLf
     Delay
     Winsock1.SendData "Prova"
     Winsock1.SendData vbCrLf
     Delay
     Winsock1.SendData "."
     Winsock1.SendData vbCrLf
     MsgBox ("Inviato!")
    End Sub
    
    Sub Delay()
     For iCount = 1 To 70000000
     Next iCount
    End Sub
    Gli stessi comandi SMTP inviati con il Telnet di Windows funzionano perfettamente, quindi escludo che sia il server SMTP a dare problemi o i comandi errati.

    Ho provato vari tipi di ritardo, aumentando e diminuendo il limite del contatore.

    Ho eseguito il programma con il debug, istruzione per istruzione.

    Niente, la mail non viene spedita.

    Qualche idea?

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da SkyNET290897
    Allora, ho implementato il codice con un ritardo tra una istruzione e l'altra.
    Non è un ritardo che devi inserire, ma la lettura del responso da parte del server e la sua corretta interpretazione.

    Se si verifica un qualsivoglia errore, come fai ad intercettarlo?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Come ti avevo detto, e ti ha detto Alka, non e' una questione di ritardo ma di leggere i messaggi e interpretarli.

    Fra l'altro io sapevo che libero *non* dovrebbe permettere l'invio di posta tramite server SMTP se lo fai mentre non sei connesso a libero ...

    Puoi postare un esempio di sessione SMTP che hai completato con successo tramite Telnet ? Compresi i comandi e le risposte ...

  9. #9
    Ho inviato una mail tramite Telnet di Windows collegandomi al server di posta di Libero mentre sono connesso con NGI. Di seguito riporto la sessione di Telnet.



    La mail è arriva a destinazione istantaneamente.


    Sto implementanto delle "GetData" per ricevere le risposte del server SMTP, all'atto della connessione, il server risponde in modo corretto, ma prima della "GetData" ho dovuto inserire un "ritardo", le successive istruzioni (dalla "Helo" in poi) non hanno ricevuto risposta . . .

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Fai una prova a spedire ad utenti che non siano di libero ... inviami un messaggio ... oregon001 AT hotmail.com

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.