Func __smtpsend($v_socket, $s_send, $s_replycode, $b_trace, $s_intreply = "", $s_first = "")
Local $s_receive, $i, $timer
If $b_trace Then __smtptrace($s_send)
If $s_intreply <> "" Then
If $s_first <> -1 Then
If TCPSend($v_socket, $s_first) = 0 Then
TCPCloseSocket($v_socket)
TCPShutdown()
Return 1
EndIf
EndIf
$s_receive = ""
$timer = TimerInit()
While StringLeft($s_receive, StringLen($s_intreply)) <> $s_intreply AND TimerDiff($timer) < 45000
$s_receive = TCPRecv($v_socket, 1000)
If $b_trace AND $s_receive <> "" Then __smtptrace("intermediate->" & $s_receive)
WEnd
EndIf
If TCPSend($v_socket, $s_send) = 0 Then
TCPCloseSocket($v_socket)
TCPShutdown()
Return 1
EndIf
$timer = TimerInit()
$s_receive = ""
While $s_receive = "" AND TimerDiff($timer) < 45000
$i += 1
$s_receive = TCPRecv($v_socket, 1000)
If $s_replycode = "" Then ExitLoop
WEnd
If $s_replycode <> "" Then
If $b_trace Then __smtptrace($i & " <- " & $s_receive)
If StringLeft($s_receive, StringLen($s_replycode)) <> $s_replycode Then
TCPCloseSocket($v_socket)
TCPShutdown()
If $b_trace Then __smtptrace("<-> " & $s_replycode, 5)
Return 2
EndIf
EndIf
Return 0
EndFunc