Ostatnio się trochę obraziłem na mojego dostawcę serwera mailowego i postanowiłem nieco podrążyć temat stawiania swojego serwera SMTP. Znalazłem ciekawą i ciągle rozwijaną bibliotekę C#: https://github.com/cosullivan/SmtpServer
Przetestowałem różne proponowane przykłady i do końca nie rozumiem jak skonfigurować serwer i co robię źle. Dla przykładu, podstawowa konfiguracja serwera wygląda następująco:
var options = new SmtpServerOptionsBuilder()
.ServerName("SmtpServer SampleApp trial")
.Port(25, 587, 9025)
.Build();
Mam też skonfigurowanego klienta:
var message = new MimeMessage();
message.From.Add(MailboxAddress.Parse(from ?? "[email protected]"));
message.To.Add(MailboxAddress.Parse(to ?? "[email protected]"));
message.Subject = subject ?? "Hello World";
message.Body = body ?? new TextPart("plain")
{
Text = "Email body of Hello World message"
};
using SmtpClient client = new SmtpClient();
client.Connect("localhost", port = 9025, useSsl = false);
Po wywołaniu .Send();
klienta otrzymuję
SessionCreated: 127.0.0.1:2156
Command Executing
EHLO: DomainOrAddress=bakunet
Command Executed
EHLO: DomainOrAddress=bakunet
Command Executing
MAIL: Address=[email protected] Parameters=
Command Executed
MAIL: Address=[email protected] Parameters=
Command Executing
RCPT: Address=[email protected]
Command Executed
RCPT: Address=[email protected]
Command Executing
DATA
Command Executed
DATA
Command Executing
QUIT
Command Executed
QUIT
SessionCompleted: 127.0.0.1:2156
Niestety, email nie dochodzi do odbiorcy. Do końca nie rozumiem kilku rzeczy, wynika to trochę z nieznajomości protokołu:
- czy serwer SMTP może wysłać wiadomość bez skonfigurowanego DNS?
- jeśli nie może, jak można skonfigurować pod niego DNS?
- czy firewall mojego komputera (dla
localhost
) może blokować port9025
i pozostałe skonfigurowane? - czemu po wysłaniu wiadomości jest tworzona sesja z losowym portem?
SessionCreated: 127.0.0.1:2156
- jakie mogą być inne przyczyny tego, że wiadomość nie jest dostarczona?