Projekt poczty elektronicznej [C++]

1

Witam, chciałbym napisać, prosty klient poczty elektronicznej z obsługą wysyłania oraz odbierania wiadomości.
Chciałem napisać to od zera, bez wykorzystania dodatkowych bibliotek.

I tutaj moje pytanie na co zwrócić uwagę? Na jakich funkcjach się skupić? Może jakieś dodatkowe uwagi od was? Oraz jaki wy mielibyście pomysł na napisane tego.

Za wszystkie odpowiedzi, dziękuję oraz pozdrawiam :)

0

Pewnie powinieneś zacząć od specyfikacji protokołów POP3 (przypuszczam, że jest prostszy od IMAP) i SMTP i obsługi TCP/IP (tzw. sockety, są częścią API systemowego, więc musisz poszukać w zależności od systemu). Chociaż, jeśli chcesz żeby był funkcjonalny, do obsługi szyfrowania jednak chyba będziesz potrzebować biblioteki, kryptografia to trochę inny poziom. :)

1
ArAs2 napisał(a):

Chciałem napisać to od zera, bez wykorzystania dodatkowych bibliotek.

To jest ogrom. Swoje GUI napiszesz, bo nie chcesz bibliotek, swoje protokoły sieciowe napiszesz, bo nie chcesz bibliotek, napiszesz ambitną strukturę danych pod maile od operacji na pojedynczych znakach/bajtach, bo nie chcesz bibliotek. itd...

Tego założenia nie da się utrzymać, jest TOTALNIE nierealne.
Zwłaszcza, że jesteś ciągle na etapie (zaledwie) zebrania wiedzy i doświadczenia - pewnie stąd tez brak spojrzenia z szerokom horyzontem.

Zadanie jest tak ambitne, że nawet myśl o zmianie języka ze względu na cel (hipotetycznie) nie byłaby czymś nierealnym.

1

Tak jak napisał @elwis zacznij od ogarnięcia SMTP i POP3, możesz nawet olać programowanie i używać netcata/telneta i w ten sposób sprawdzać czy rozumiesz protokoły. Oczywiście pod warunkiem, że to tylko w celach dydaktycznych, bo żaden inny sensowny powód do implementacji tego nie istnieje.

https://beej.us/guide/bgnet/
To jest dobre, ale bardziej do C.

0

Dziękuję za odpowiedzi oraz rady :)
Mam kolejne pytanie jeśli chciałbym skorzystać z gotowej biblioteki używającej SMTP oraz POP3, czy dobrym wyborem będzie użycie POCO C++: https://pocoproject.org/index.html, czy może innej planuję stworzenie do tego jakiegoś prostego GUI, lecz głównie chodzi mi o wysyłanie oraz odbieranie wiadomości.

Pozdrawiam serdecznie.

1

W c# używam do wysyłania / odbierania poczty e-mail System.Net.Mail
np.

public async Task SendEmailAsync(string email, string subject, string htmlMessage)
        {
            using (var client = new SmtpClient(_smtpSettings.MailServer, _smtpSettings.MailPort))
            {
                client.UseDefaultCredentials = false;
                client.EnableSsl = true;
                client.Credentials = new NetworkCredential(_smtpSettings.UserName, _smtpSettings.Password);
                client.Timeout = 20;

                MailMessage msg = new MailMessage(_smtpSettings.SenderEmail, email, subject, htmlMessage);
                msg.IsBodyHtml = true;
                try
                {
                    await client.SendMailAsync(msg);
                }
                catch(Exception e)
                {
                    _logger.LogInformation("Exception (EmailSender.SendEmailAsync): " + e.Message);
                }
                
            }
        }

W c++ jest alternatywa z tego co widzę:
https://pocoproject.org/docs/package-NetSSL_OpenSSL.Mail.html

0

@Grzegorz Świdwa:
Tak jak myślałem, żeby wykorzystać tą bibliotekę POCO z tym, dzięki za odpowiedź :D

0

No a POCO trudno używać, nie stykając się z boost'em 1) ... i tak się dalej kręci rozwój projektu "bez bibliotek"

NIESTETY w odróżnieniu od C# .NET w C++ bardzo mało jest w standardowej bibliotece. Brodaci panowie w kratach nie chcieli "ograniczać wolności programisty":

W każdym innym języku, co pośrednio wskazał @Grzegorz Świdwa to jest 5x łatwiejsze. Mi akurat przychodzi do głowy Python, ale C#, Java,(i Kotlin) i znalazł by kilka innych języków o współczesnej idei.

  1. co nie jest krytyką bezwzględną, tylko wzmianką o złożoności. Mozna trafić w gorsze dependencje, pod sztandarami C++ jest tego pełno.

1 użytkowników online, w tym zalogowanych: 0, gości: 1