Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2014
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.55 KB | None | 0 0
  1. Imports System.IO
  2. Imports System.Threading
  3. Imports System.Net
  4. Imports System.Net.Sockets
  5. Imports System.Text
  6.  
  7. Public Class Form1
  8. 'Add a TEXTBOX1 to form
  9. 'Add a TEXTBOX1 to form
  10. 'Add a TEXTBOX1 to form
  11. 'Add a TEXTBOX1 to form
  12.  
  13. Private Server As Sockets.TcpListener
  14. Private Port As Integer = 25
  15. Private Thread As Thread
  16.  
  17. Delegate Sub LogCallback(S As String)
  18.  
  19. Sub Log(S As String)
  20.  
  21. If Me.TextBox1.InvokeRequired Then
  22. Dim d As LogCallback = AddressOf Log
  23. Me.Invoke(d, S)
  24. Else
  25. Me.TextBox1.AppendText(S.Replace("n", vbCrLf))
  26. End If
  27. End Sub
  28.  
  29. Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
  30. Me.Text = String.Format("Listening port {0} v{1}", Port, AppVersion)
  31.  
  32. Thread = New Thread(New ThreadStart(AddressOf Listening))
  33. Thread.Start()
  34. End Sub
  35.  
  36. Async Function Listening() As Task
  37. Server = New Sockets.TcpListener(Net.IPAddress.Any, Port)
  38. Server.Start()
  39.  
  40. Log("Starting listening on port 25nn")
  41.  
  42. Do
  43. Dim HandleThread As New Thread(New ParameterizedThreadStart(AddressOf HandleConnection))
  44. HandleThread.Start(Await Server.AcceptTcpClientAsync)
  45. Loop
  46.  
  47. End Function
  48.  
  49. Async Function HandleConnection(TcpClient As TcpClient) As Task
  50.  
  51. Dim Stream As NetworkStream = TcpClient.GetStream
  52.  
  53. Log(String.Format("nClient connected: {0}n", TcpClient.Client.RemoteEndPoint.ToString))
  54. Await R(Stream, String.Concat("220 your.mail.server.com Service ready", vbCrLf))
  55.  
  56. While True
  57.  
  58. Do
  59. Dim BuffSize As Integer = 4096
  60. Dim Buffer As Byte() = New Byte(BuffSize - 1) {}
  61. Dim BytesRead As Integer
  62.  
  63. BytesRead = Await Stream.ReadAsync(Buffer, 0, Buffer.Length)
  64.  
  65. If BytesRead = 0 Then Exit Function
  66.  
  67.  
  68. Dim Msg As String = Encoding.ASCII.GetString(Buffer.Take(BytesRead).ToArray)
  69.  
  70. Log(String.Concat("<<< ", Msg))
  71.  
  72. If Msg.StartsWith("EHLO") Then
  73. Await R(Stream, "502 Command not implemented")
  74. ElseIf Msg.StartsWith("HELO") Then
  75. Await R(Stream, "250 your.mail.server.com")
  76. ElseIf Msg.StartsWith("MAIL") Or Msg.StartsWith("RCPT") Or Msg.StartsWith("Date") Or Msg.StartsWith("From") Then
  77. Await R(Stream, "250 OK")
  78. ElseIf Msg.StartsWith("DATA") Then
  79. Await R(Stream, "354 Start mail input; end with <CRLF>.<CRLF>")
  80. ElseIf Msg.StartsWith("From") Or Msg.StartsWith("Received") Then
  81. Await R(Stream, "250 OK")
  82. ElseIf Msg = vbCrLf Then
  83. Await R(Stream, "250 OK")
  84. ElseIf Msg.StartsWith("QUIT") Then
  85. Await R(Stream, "221 BBN-UNIX.ARPA Service closing transmission channel")
  86. Stream.Close()
  87. TcpClient.Close()
  88. Exit Function
  89. Else
  90. Await R(Stream, "502 Command not implemented")
  91. End If
  92. Loop While Stream.DataAvailable
  93.  
  94. End While
  95.  
  96. End Function
  97.  
  98. Private AppVersion As Integer = 8
  99.  
  100. Async Function R(Stream As NetworkStream, Message As String) As Task
  101.  
  102. Dim ResponseBuffer As Byte() = Encoding.ASCII.GetBytes(String.Concat(Message, vbCrLf))
  103. Await Stream.WriteAsync(ResponseBuffer, 0, ResponseBuffer.Length)
  104.  
  105. Log(String.Concat(">>> ", Message, vbCrLf, vbCrLf))
  106. End Function
  107.  
  108. End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement