Я хотел бы построить свой собственный (простой) почтовый сервер на машине Windows (в VB. NET) для получения писем от одного отправителя. Мой адрес электронной почты будет что-то вроде "myname@myserver.com".
Что мне нужно построить? ... SMTP-сервер с классом SMTPServer? ... как нижеприведенный код.
Как я могу проверить это локально на моей машине, не покупая домен myserver.com. Я знаю, как отправить электронное письмо через VB. NET, но что я должен использовать в качестве исходящего smtp-сервера?
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace FakeSMTP
{
public class SMTPServer
{
TcpClient client;
NetworkStream stream;
System.IO.StreamReader reader;
System.IO.StreamWriter writer;
public SMTPServer(TcpClient client)
{
this.client = client;
this.client.ReceiveTimeout = 5000;
stream = client.GetStream();
reader = new System.IO.StreamReader(stream);
writer = new System.IO.StreamWriter(stream);
writer.NewLine = "\r\n";
writer.AutoFlush = true;
}
static void Main(string[] args)
{
TcpListener listener = new TcpListener(IPAddress.Loopback,25);
listener.Start();
while (true)
{
SMTPServer handler = new SMTPServer(listener.AcceptTcpClient());
Thread thread = new System.Threading.Thread(new ThreadStart(handler.Run));
thread.Start();
}
}
public void Run()
{
writer.WriteLine("220 localhost -- Fake proxy server");
for (string line = reader.ReadLine(); line != null; line = reader.ReadLine())
{
Console.Error.WriteLine("Read line {0}", line);
switch (line)
{
case "DATA":
writer.WriteLine("354 Start input, end data with <CRLF>.<CRLF>");
StringBuilder data = new StringBuilder();
String subject = "";
line = reader.ReadLine();
if (line != null && line != ".")
{
const string SUBJECT = "Subject: ";
if (line.StartsWith(SUBJECT))
subject = line.Substring(SUBJECT.Length);
else data.AppendLine(line);
for (line = reader.ReadLine();
line != null && line != ".";
line = reader.ReadLine())
{
data.AppendLine(line);
}
}
String message = data.ToString();
Console.Error.WriteLine("Received email with subject: {0} and message: {1}",
subject, message);
writer.WriteLine("250 OK");
client.Close();
return;
default:
writer.WriteLine("250 OK");
break;
}
}
}
}
}