Forum Discussion
Nat_Thirasuttakorn
Aug 25, 2011Employee
Hi Mohamed,
I think you can use something like this...
when SERVER_CONNECTED {
clientside { TCP::collect }
}
when CLIENT_DATA {
set p [string tolower [TCP::payload]]
if { $p starts_with "rcpt to:" } {
put you condition here, for example, only apply if there is @example
if { $p contains "@example>" } {
use stream profile or string manipulation or regexp here...
}
TCP::release
} else {
something else, let it be released to server
TCP::release
TCP::collect
}
}
Hi Jon,
Try this...
Nat
when CLIENT_ACCEPTED {
set chelo ""
set cfrom ""
set crcpt ""
TCP::respond "220\r\n"
log local0. "client accepted"
TCP::collect
}
when CLIENT_DATA {
log local0. "payload: [TCP::payload]"
set cdata [TCP::payload]
if { [ string length $cdata ] <= 0 } {
TCP::collect
return
}
if { not ( $cdata contains "\r\n" ) } {
log local0. "get <$cdata> so far"
TCP::collect
return
}
if { $cdata starts_with "HELO" || $cdata starts_with "EHLO" } {
set chelo [TCP::payload]
log local0. "get helo \[$cdata\]"
TCP::respond "250 OK\r\n"
TCP::payload replace 0 [string length $chelo] ""
TCP::collect
return
}
if { $cdata starts_with "MAIL FROM:" } {
set cfrom [TCP::payload]
log local0. "get from \[$cfrom\]"
TCP::respond "250 OK\r\n"
TCP::payload replace 0 [string length $cfrom] ""
TCP::collect
return
}
if { $cdata starts_with "RCPT TO:" } {
set crcpt "$crcpt[TCP::payload]"
log local0. "get rcpt \[$crcpt\]"
TCP::respond "250 OK\r\n"
TCP::payload replace 0 [string length [TCP::payload]] ""
TCP::collect
return
}
if { $cdata starts_with "DATA" } {
log local0. "get data \[$cdata\]"
TCP::payload replace 0 0 $chelo$cfrom$crcpt
}
TCP::release
TCP::collect
}
when SERVER_CONNECTED {
log "server connected"
TCP::collect
}
when SERVER_DATA {
log local0. "payload: [TCP::payload]"
set sdata [TCP::payload]
if { $sdata contains "\r\n354 " ||
$sdata starts_with "354 " ||
$sdata contains "354\r\n" } {
log local0. "get resp \[$sdata\]"
TCP::payload replace 0 [string length $sdata] "354 go ahead\r\n"
TCP::release
} else {
TCP::collect
}
}
when CLIENT_CLOSED {
log local0. "client closed"
}