Я скачал почту с Poco/Net/POP3ClientSession, я хотел бы преобразовать тему сообщения электронной почты в читаемый человеке, поэтому я попытался использовать neagoegab's решения здесь: https://stackoverflow.com/a/8104496/1350091 , к сожалению, это Безразлично» т работы:C++ при условии Decode электронной почты в
#include <Poco/Net/POP3ClientSession.h>
#include <Poco/Net/MailMessage.h>
#include <iostream>
#include <string>
using namespace std;
using namespace Poco::Net;
#include <iconv.h>
const size_t BUF_SIZE=1024;
class IConv {
iconv_t ic_;
public:
IConv(const char* to, const char* from)
: ic_(iconv_open(to,from)) { }
~IConv() { iconv_close(ic_); }
bool convert(char* input, char* output, size_t& out_size) {
size_t inbufsize = strlen(input)+1;
return iconv(ic_, &input, &inbufsize, &output, &out_size);
}
};
int main()
{
POP3ClientSession session("poczta.o2.pl");
session.login("my mail", "my password");
POP3ClientSession::MessageInfoVec messages;
session.listMessages(messages);
cout << "id: " << messages[0].id << " size: " << messages[0].size << endl;
MailMessage message;
session.retrieveMessage(messages[0].id, message);
const string subject = message.getSubject();
cout << "Original subject: " << subject << endl;
IConv iconv_("UTF8","ISO-8859-2");
char from[BUF_SIZE];// "=?ISO-8859-2?Q?Re: M=F3j sen o JP II?=";
subject.copy(from, sizeof(from));
char to[BUF_SIZE] = "bye";
size_t outsize = BUF_SIZE;//you will need it
iconv_.convert(from, to, outsize);
cout << "converted: " << to << endl;
}
выход:
id: 1 size: 2792
Original subject: =?ISO-8859-2?Q?Re: M=F3j sen o JP II?=
converted: =?ISO-8859-2?Q?Re: M=F3j sen o JP II?=
самое интересное, что когда я пытаюсь преобразовать объект с POCO он не:
cout << "Encoded with POCO: " << MailMessage::encodeWord("Re: Mój sen o JP II", "ISO-8859-2") << endl; // output: Encoded with POCO: =?ISO-8859-2?q?Re=3A_M=C3=B3j_sen_o_JP_II?=
Но тема, которую я хочу получить это: «Re: Mój сеном о JP II» Единственный способ, которым я успешным нашел, чтобы преобразовать объект является: https://docs.python.org/2/library/email.header.html#email.header.decode_header
Так что мой вопрос -как преобразовать тему электронной почты в C++ в какой-то формат, например UTF-8?
Найти соответствующий RFC, код его. Как я помню, почта и сообщения NNTP используют несколько разные соглашения. –
@Alf перед тем, как написать какой-либо код самостоятельно, исследовать, сделал ли кто-то работу за вас. Особенно с установленными RFC, существует множество существующих реализаций. –
Я только что отправил https://github.com/pocoproject/poco/issues/1543. –