Newsgroup: it.comp.lang.visual-basic
Titolo: Aiuto:programma per comunicazione tra due server di posta


From: "Paolo Ferrari" 
aba...@tiscali.it
Una riga di spazio e tutto quello che ho inserito prima.
Allego sorgente in VB con il quale implemento la spedizione della email:
Dim Dati As String
Dim Invia As String
Dim Cont As Integer
Private Sub cdmINVIA_Click()
WS.Connect "172.16.1.64", 25
RisposteServer
Open "C:\parte0.txt" For Input As #1
Input #1, Invia
Close #1
WS.SendData Invia & vbCrLf
RisposteServer
Open "C:\parte1.txt" For Input As #1
Input #1, Invia
Close #1
WS.SendData Invia & vbCrLf
RisposteServer
Open "C:\parte2.txt" For Input As #1
Input #1, Invia
Close #1
WS.SendData Invia & vbCrLf
RisposteServer
Open "C:\parte3.txt" For Input As #1
Input #1, Invia
Close #1
WS.SendData Invia & vbCrLf
RisposteServer
Open "C:\parte4.txt" For Input As #1
Do While Not EOF(1)
Input #1, Invia
WS.SendData Invia & vbCrLf
Loop
Close #1
Open "C:\parte5.txt" For Input As #1
Input #1, Invia
WS.SendData Invia & vbCrLf
Close #1
RisposteServer
WS.SendData ("QUIT" & vbCrLf)
RisposteServer
WS.Close
End Sub
Private Sub Form_Load()
WS.Protocol = sckTCPProtocol
End Sub
Private Sub RisposteServer()
Do While Dati = ""
DoEvents
Loop
MsgBox Dati
Dati = ""
End Sub
Private Sub WS_DataArrival(ByVal bytesTotal As Long)
WS.GetData Dati, vbString
End Sub
Grazie ancora...

 quel testo qui, per favore dammi una mano, sapete dove sbaglio?Grazie.
Quello è un header generato da un client, non mi sembra fatto dal server.
Probabilmente fa parte del messaggio originale che dici di ricevere e poi
rispedire.
Comunque, su che RFC ti basi?
Alberto

Comunque, su che RFC ti basi?
Ciao mi baso sul RFC 821.
il percorso normale delle email č
client->mioserver->destinatarioserver->destinatarioclient
il mio percorso č:
mioclient->mioserver->programma->destinatarioserver->destinatarioclient
l'header che ho messo č quello generato dal client finale, il problema č che
nel corpo del testo nel client finale non compare solo la parola test ma
tutta quella sfilza di codice in piů, quando io faccio il 4-5 passaggio
salvo in un file txt la parte testuale che mi invia il server ed č la stessa
parte che poi io rinvio come testo e mi ritrovo nel testo della mail finale
č come se il server destinatario non utilizzasse gli header presenti nel
testo e lo considerasse tutto testo, hai qualche idea?

 testo e lo considerasse tutto testo, hai qualche idea?
Mmmmhhh...
Dovrei andare a vedere la RFC, per vedere come debbano essere inseriti i
vecchi header in rapporto ai nuovi, ma sinceramente non ne ho voglia.
Nel tuo codice (che, come ho postato in un thread analogo non piů di due
giorni fa, non mi piace neanche un po' perchč non valuta gli errori e le
attese del server), non trovo il punto del 6° invio (ossia il fine messaggio
VbCrLf & "." & VbCrLf), ma credo non sia quello il problema.
Ciao
Alberto


Subject: test
Date: Wed 2 Oct 2002 11:01:49 +0200
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_000_0031_01C26A03.1B845A20"
X-Mailer: Microsoft Outlook Express 6.00.2600.0000
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
Status:
e sotto Status: il resto del messaggio. A questo punto il messaggio e'
riformattato per l'invio.
beppe

Ciao Giuseppe innanzitutto grazie per l'aiuto, quello che volevo capire è:
ma quando un email passa da una server all'altro tramite porta 25 su
protocollo SMTP, viene riformattata dal server ricevente?
La parte testuale che io prelevo dal server  mittente contiene una parte
iniziale con il recived, quando la mail passa per il mio programma prima di
essere rigirate al server destinatario, devo lasciare traccia del passaggio
introducendo altri recived oppure posso far credere al server destinatario
di essere io il server mittente (ossia quello da cui ho prelevato l'email?
Gli header presenti nel testo ossia quelli che trovo dopo che il server
mittente mi invia il comando DATA ed io ho risposto con il 354 (che
oltretutto io salvo in uno stesso file considerendo tutto come testo visto
che mi viene inviato dopo DATA) sono utilizzati dal server destinatario o
no? Secondo te è giusto che io riinvii tutto ciò che il server mittente mi
passa dopo DATA al server destinatario dopo che io ho lanciato il comando
DATA?
Con status riesco a risolvere i problemi ho secondo tè è un po più
complicato?
Grazie ancora

Ho provato da diversi server a ricevere email, ma in nessuna compariva
l'identificatore status, ho provato a inserirlo e me lo considera come testo
e lo ritrovo nel corpo testuale della email.

Ciao,
[alone] scrive:

allora, provare per credere:
vai su una macchina win98, in win2000 non me ne intendo;
avvia il telnet e ti connetti alla porta 25 del tuo server smtp.
digita
rset+<invio>
helo <un indirizzo ip interno>+<invio>
mail from: <un indirizzo a caso>+<invio>
rcpt to: <il tuo indirizzo>+<invio>
data+<invio>
from: <un indirizzo a caso>+<invio>
to: <il tuo indirizzo>+<invio>
subject: invio di prova+<invio>
status:+<invio>
questo e' il mio messaggio di prova+<invio>
.+<invio>
quit+<invio>
da rset a data ad ogni comando ti da una riga di risposta e lo stesso dopo
l'invio del . .
I comandi potrebbero variare da server a server, ma piu' o meno quelli che
ho scritto sono quelli standard.
poi vai a controllare se hai ricevuto qualcosa, e se si vedi un po' se il
messaggio ti viene visualizzato bene.
poi fammi sapere, che eventualmente si ridiscute.
ps: se digiti help ti dovrebbe visualizzare il comandi accettati e la
sintassi.
beppe

 sessione telnet, per questo il testo me lo riscrive cosě comč io glielo do
bene, ricominciamo da capo.
Se tu vuoi fare un server di posta effettivo (tipo demone Linux MailServer
per intenderci), il VB non e' esattamente la piattaforma ideale su cui
svilupparlo ed inoltre qui finirebbe il mio aiuto perche' non saprei neppure
da che parte cominciare a spiegarmi.
Se invece vuoi emulare un server tramite un programma che intercetti i
messaggi di posta da un server Pop effettivo per poi inoltrarli ad altro
server Smtp dopo averli modificati, tipo modificando l'indirizzo del
destinatario, questo e' un altro discorso.
Se e' questa ultima ipotesi quella giusta rispondi se no no! ;o)
beppe



Ok la seconda č quello che voglio fare io ossia l'idea č quella di
intercettare i messaggi, analizzarli e rinviarli a destinazione senza
cambiare niente, l'intercettazione deve avvenire tra i due server mail, non
tra server e client, quindi tutto deve avvenire passando per la porta 25 sia
in ricezione che in invio, puoi aiutarmi per favore?


da come ti sei espresso direi che ... snif ... snif snif ... sniiffferrr?
... SNIIIIFFEEEERRRRR!!!!!
No, non sono in grado di aiutarti.
In ogni caso, per chiarirti un po' le idee, sulla 25 tu, come utente, puoi
solo inviare messaggi, mentre per accedere agli stessi dovrai collegarti
alla 110 (al signor server pop), che, sapendo lui che il mondo e' pieno di
curiosi che non si fanno mai i cazzi loro, ti chiede: "chi sei?" (account) e
poi: "hai la chiave di casa?" (password).
Se sai le risposte vinci la bambolina e ti trastulli , altrimenti resti
fuori e ritenti.
Quindi, se tu hai l'account e la password ti puoi collegare al server pop
sulla 110, scarichi i messaggi che a questo punto puoi ben dire che sono
tuoi, li modifichi a tuo piacimento, ti ricolleghi al smtp sulla 25 e
inoltri a chi ti pare.
Il demone smtp non mantiene la custodia del messaggio, si incarica
semplicemente di inoltrarlo al dominio del destinatario, dove verra'
custodito dal pop che svolge l'attivita' di cui ho detto.
Se tu invece intendi costruire un servizio che vada a ranare nei cazzi della
gente, beh, auguri, e spero per te che non ti becchino.
beppe



 forse devo aggiungere un recived per avere una catena corretta?
scusami se te lo dico, ma piu' scrivi e piu' sembra che tu non abbia le idee
molto chiare.
L'attivita' di spedizione di una mail avviene in due momenti ben distinti e
per mezzo di due unita' ben precise.
Il primo momento e' quello in cui lo UA (User Agent [molto piu' banalmente
il tuo client di posta]) si connette con lo MTA (Message Transfer Agent [il
server smtp che potrebbe essere SendMail o SMail o quant'altro]) e tramite i
vari comandi rset, helo, mail from, ecc. trasmette il tuo maledetto
messaggio.
Il secondo momento, totalmente trasparente per l'utente, viene gestito
direttamente dal MTA sender con l'MTA receiver tramite l'apertura di un
canale full-duplex, dove cio' non e' possibile viene attivato un ponte per
mezzo di MTA intermedi.
L'MTA sender si incarica di:
- risolvere l'indirizzo dei vari destinatari con interrogazioni al DNS
- il DNS ritorna una serie di record dei percorsi host a cui puo' essere
inviata la mail per essere inoltrata
- l'MTA prova di collegarsi ai vari host in base al criterio di gerarchia
segnalato dal DNS
- nel caso non ottenga un successo dai tentativi di trasmissione parcheggia
il messaggio in un'area spool, trascorso un periodo definito e/o un numero
di tentativi ritorna il messaggio di errore.
L'MTA receiver invece si occupa di rispondere ai comandi del sender e di
archiviare i messaggi ricevuti nelle rispettive cartelle o file degli user
destinatari.
Chiaramente tutto cio' e' semplificato al massimo.
Ora senza addentrarci in ulteriori disquisizioni e quisquiglie, permettimi,
mi pare, leggendo fra le righe, che le tue conoscenze di questo protocollo
non siano tali da permetterti di riscrivere un servizio MTA.
Quindi, cio' che ti riproponi di fare e' un po' arduo da gestire.
Ora la mia perplessita' (oppure veramente non ho capito cosa vuoi fare):
supponiamo che il tuo indirizzo sia 
pi...@pluto.org
, e' lecito pensare che
il demone dell'mta ricevitore giri sulla macchina che ha dominio 
pluto.org
.
Come pensi di riuscire a ricevere al suo posto le mail a lui destinate e a
reinviargliele?
beppe

 Effettivamente hai ragione non ho le idee molto chiare altrimenti non
chiederei aiuto, cercherò per quanto mi è possibile di farti capire quello
che voglio fare.
Voglio realizzare un filtro antispam, per questo devo filtrare le email, il
come possa ricevere le email io al posto del mta receiver è semplice, lmta
receiver è mio o meglio dell'azienda, quindi pensa a questo filtro antispam
come a un firewell che sta in ascolto sulla porta 25 e filtra.
l'idea è questa:
mta sender-->interroga il dns per raggiungere 
mail.pluto.org
 il dns
restituirà l'ip di 
mail.pluto.org
 mettiamo 195.165.5.25 questo indirizzo ip
è quello della macchina dove io ho il mio antispam, in seguito l'antispam
dopo aver filtrato l'email la passera alla macchina dove è contenuto il vero
mta receiver che avrà un altro ip per permettergli di immagazzinarla nella
cartella dell'user corrispondente.
Questà è l'idea scusa se non sono stato fino adesso abbastanza chiaro, pensi
sia possibile fare qualcosa?


Scusa la domanda, ma non e' piu' semplice, visto che hai piu' macchine
disponibili, se su una fai girare esclusivamente l'smtp e il tuo programma
filtro, quindi se vanno bene i messaggi li passi pari pari sull'altra
macchina dove gira il pop?
beppe

 wrote in message
news:anmfdm$fa5vh$1...@ID-96007.news.dfncis.de...

Si è possibile ma se metto sulla stessa macchina l'smtp e il programma , il
programma comunica con l'esterno sulla 25 e l'smtp devo farlo comunicare con
il mio programma su un'altra porta , è corretto?