Newsgroup: it.comp.lang.visual-basic
Titolo: Winsock

Ciew
grazie in anticipo a chi puo' darmi una mano.
Avrei bisogno di sapere come funziona l'oggetto winsock e le sue proprietą.
Ho provato a cercare sulla bibbia Balena ma non ho trovato nulla :(

 Ho provato a cercare sulla bibbia Balena ma non ho trovato nulla :(
Ma non lo sai che nelle balene ci sono solo i pinocchi? ;)
Scherzi a parte, cosa vuoi sapere: email, ftp, irc?
a dopo!

 ha scritto nel messaggio
news:9fqjoo$5f6ng$1...@ID-52601.news.dfncis.de...


Ciao Manu,
vediamo, prova a studiarTi queste 3 sub per l'invio delle email, le ho
estrapolate al volo da un mio programma, le metto sul NG perchè molti utenti
chiedono spesso come si fa a spedire una mail con allegato.
E' comunque necessario codificare il file da inviare in modo Unicode, la
funzione UUEncodeFile serve a questo scopo, mi sembra che sia sul sito
comune.
Saluti,
'
TIPI -----------------------------------------------------------------------
Private Enum SMTP_State
    MAIL_CONNECT
    MAIL_HELO
    MAIL_FROM
    MAIL_RCPTTO
    MAIL_DATA
    MAIL_DOT
    MAIL_QUIT
End Enum
'
VARIABILI ------------------------------------------------------------------
Private m_State             As SMTP_State
Private m_strEncodedFiles   As String
Private Sub fnSendMail()
    Screen.MousePointer = vbHourglass
    lstLog.Clear
    Let m_strEncodedFiles = UUEncodeFile(txtAllegati.Text) & vbCrLf
    wskMailer.Connect sOptSMTP, 25
' cambio lo stato corrente della sessione
    Let m_State = MAIL_CONNECT
End Sub
Private Sub wskMailer_DataArrival(ByVal bytesTotal As Long)
'
VARIABILI ------------------------------------------------------------------
    Dim A                   As Integer
    Dim sDest()             As String
    Dim strServerResponse   As String
    Dim strResponseCode     As String
    Dim strDataToSend       As String
    Dim varLines            As Variant
    Dim varLine             As Variant
    Dim strMessage          As String
'
INIZIO ---------------------------------------------------------------------
' riceve i dati dal buffer del controllo Winsock
    wskMailer.GetData strServerResponse
    lstLog.AddItem strServerResponse
' riceve i primi 3 simboli dalla risposta del server
    Let strResponseCode = left(strServerResponse, 3)
' solo 3 di questi codici possono significare che l'opeazione è stata
accettata
' e si può proseguire nell'operazione
    If ((strResponseCode = "250") Or (strResponseCode = "220") Or
(strResponseCode = "354")) Then
        Select Case m_State
            Case MAIL_CONNECT
' cambio lo stato corrente della sessione
                Let m_State = MAIL_HELO
' assegno l'email di uscita
                Let strDataToSend = sOptEMail
' rercupero il nome della mailbox all'indirizzo e-mail
                Let strDataToSend = left$(strDataToSend, InStr(1,
strDataToSend, "@") - 1)
' invio il comando HELO al server
                wskMailer.SendData "HELO " & strDataToSend & vbCrLf
                lstLog.AddItem "HELO " & strDataToSend
            Case MAIL_HELO
' cambio lo stato corrente della sessione
                Let m_State = MAIL_FROM
' invio il comando MAIL FROM al server
                wskMailer.SendData "MAIL FROM:" & sOptIntestazione & " <" &
sOptEMail & ">" & vbCrLf
                lstLog.AddItem "MAIL FROM:" & sOptIntestazione & " <" &
sOptEMail & ">" & vbCrLf
            Case MAIL_FROM
' cambio lo stato corrente della sessione
                Let m_State = MAIL_RCPTTO
' invio il comando RCPT al server
' TO
                Let sDest() = Split(txtDestinatari.Text, ";")
                For A = 0 To UBound(sDest)
                    wskMailer.SendData "RCPT TO:" & Trim(sDest(A)) & vbCrLf
                    lstLog.AddItem "RCPT TO:" & Trim(sDest(A))
                Next A
            Case MAIL_RCPTTO
' cambio lo stato corrente della sessione
                Let m_State = MAIL_DATA
' invio il comando DATA al server
                wskMailer.SendData "DATA" & vbCrLf
                lstLog.AddItem "DATA"
            Case MAIL_DATA
' cambio lo stato corrente della sessione
                Let m_State = MAIL_DOT
' invio il corpo del messaggio al server
' ogni linea di testo deve essere terminata con il simbolo di
' fine riga + ritorno a capo (Chr(10) o vbLf) e non on vbCrLf
' invio l'oggetto del messaggio
                wskMailer.SendData "Subject:" & txtOggetto.Text & vbLf &
vbCrLf
                lstLog.AddItem "Subject:" & txtOggetto.Text
' aggiungo l'allegato o gli allegati codificati precedentemente
                Let strMessage = txtCorpo.Text & vbCrLf & vbCrLf &
m_strEncodedFiles
' svuolo la memoria associata agli allegati codificati
                Let m_strEncodedFiles = ""
' eseguo il parsing del messaggio per recuperare le singole linee (solo su
VB6)
                varLines = Split(strMessage, vbCrLf)
' svuoto l'area di memoria associata al messaggio
                Let strMessage = ""
' invio le singole linee del messaggio
                For Each varLine In varLines
                    wskMailer.SendData CStr(varLine) & vbLf
                    lstLog.AddItem CStr(varLine)
                Next
' invio il simbolo "." per avvisare il server che l'invio del messaggio è
stato completato
                wskMailer.SendData "." & vbCrLf
                lstLog.AddItem "."
            Case MAIL_DOT
' cambio lo stato corrente della sessione
                Let m_State = MAIL_QUIT
' invio il comando QUIT al server
                wskMailer.SendData "QUIT" & vbCrLf
                lstLog.AddItem "QUIT"
            Case MAIL_QUIT
' chiudo la sessione di Winsock
                wskMailer.Close
        End Select
    Else
' in questo caso il server non ha accettato i comandi inviati e
' sarà necessario chiudere la sessione corrente ed informare l'utente
' se l'operazione è andata a buon fine
        wskMailer.Close
        If Not m_State = MAIL_QUIT Then
            lstLog.AddItem sLngERRNonRiuscita & ":" & strServerResponse
            Screen.MousePointer = vbDefault
            Call fnMenu
        Else
            lstLog.AddItem sLngMSGRiuscita
            Screen.MousePointer = vbDefault
            Call fnMenu
        End If
    End If
End Sub
Private Sub wskMailer_Error(ByVal Number As Integer, Description As String,
ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal
HelpContext As Long, CancelDisplay As Boolean)
    On Local Error Resume Next
    Screen.MousePointer = vbDefault
    lstLog.AddItem "[! " & Number & " ]-> " & Description
    If wskMailer.State Then wskMailer.Close
    Call fnMenu
End Sub

 ha scritto nel messaggio
news:9fqm4o$5j073$1...@ID-52601.news.dfncis.de...


 E' comunque necessario codificare il file da inviare in modo Unicode, la
UUEncode, non Unicode :)
E cmq e' meglio il base64 che (se la memoria  non mi inganna) spreca un po'
meno spazio ed e' lo standard per il MIME.
Pero' non so se  ci sia sul SC... A suo tempo ne avevo fatta una versione ma
e' codice che avevo scritto per una societa' quindi e' (C).
Cmq non dovrebbe essere difficile riscriverla, l'RFC suggeriva anche un
ottimo algoritmo.
Ciaotutti,
Asterix