Какие варианты я должен написать SMTP-клиент в C ++ (кросс-платформенный) - PullRequest
0 голосов
/ 02 августа 2009

мне нужно добавить возможность в моем приложении отправлять электронные письма (с почтовым сервером / службой пользователя), для которых мне нужно создать или использовать smtp c ++ lib или код в котором я понятия не имею, где найти. Где я могу найти бесплатную библиотеку или исходный код, который я могу использовать или учиться.
не могли бы вы помочь мне в этом вопросе Спасибо

Ответы [ 6 ]

5 голосов
/ 02 августа 2009

Я бы предложил использовать библиотеки Poco C ++. Они выпущены под Boost Software License (одна из самых неограниченных лицензий с открытым исходным кодом) и включают в себя Mail-lib. Вот что говорит их документ:

Классы для отправки сообщений электронной почты через SMTP-серверы (Simple Mail Transfer Protocol, RFC 2821) с поддержкой вложений электронной почты, а также классы для загрузки сообщений электронной почты из POP3 (Post Office Protocol Version 3, RFC) 1939) серверов.

Сайт Poco

С уважением,
Ованес

P.S. Poco C ++ Libs - это многоплатформенная инфраструктура.

1 голос
/ 02 августа 2009

Используйте boost :: asio и следуйте спецификациям протокола, чтобы написать простой клиент.

0 голосов
/ 18 ноября 2017

Вот мой пример клиента c ++ smtp: https://github.com/breakermind/SslSMTPClient с вложениями и позволяет автоматически получать mx хосты из домена электронной почты получателя, и вам не нужен собственный сервер smtp:

// main - create SSL context and connect
int main(int count, char *strings[])
{ 
    cout << "C++ ssl smtp send email with STARTTLS\r\n";    

    // Add attachments to message if you want
    vector<string> files;
    // files.push_back("file9.jpg");
    // files.push_back("filek.pdf");

    // Initialize
    sslsmtpEx sm;
    sm.sslsmtpExSet("localhost", 25); 

    // EHLO hostname
    sm.heloHostname("domain.pl");

    // Display logs
    // sm.showLogs();

    // get MX records from dns for recipient
    vector<string> mx = sm.getMX("email@gmail.com",0,0);

    // Send email to each mx host from recipient domain DNS ( You need send only to one server !!! )
    for (int i = 0; i < mx.size(); i++){

        // Set hostname from mx dns
        sm.sslsmtpExSet(mx.at(i), 25);
        cout << "Mx host: " << mx.at(i) << endl;    

        // send email
        int ok = sm.Send("email@domain.pl", "nanomoow@gmail.com", "email@domain.pl", "Smtp client test", "<h1>Smtp test</h1>", "<h1>Smtp test</h1>", files);

        cout << "Email has been sent : " <<  ok << endl;

        if(ok){
            // if email has been sent, end loop with next mxhost
            break;
        }            
    }
    sleep(10);

return 0;    
}

Привет

0 голосов
/ 02 августа 2009

В зависимости от ваших требований ACE может быть вариантом. Это бесплатный фреймворк с открытым исходным кодом, который доступен для многих операционных систем.

Я не знаю, есть ли у них конкретная реализация для smtp, но, по крайней мере, они предоставляют абстракции C ++ для части подключения. Таким образом, только реализация протокола зависит от вас.

0 голосов
/ 02 августа 2009

В Unix обычным способом отправки почты из программы является передача содержимого (с помощью popen) в / usr / lib / sendmail. Другие MTA (postfix и т. Д.) Предоставляют программу совместимости с этим интерфейсом.

Преимущество в том, что вам не нужно настраивать каждую программу, отправляющую почту, чтобы они использовали правильный шлюз, могли использовать псевдонимы, ...

0 голосов
/ 02 августа 2009

Если вы не против лицензии GPL, вы можете попробовать VMime

и если вам нужна библиотека для окон, вы можете попробовать CPJNSMTPConnection

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...