ich Mails mit Poco/Net/POP3ClientSession heruntergeladen haben, wollte ich E-Mail-Betreff in für Menschen lesbaren konvertieren, so dass ich versuchte neagoegab's Lösung von hier zu verwenden: https://stackoverflow.com/a/8104496/1350091 leider es doesn‘ t Arbeit:C++ dekodieren E-Mail des Subjektes
#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;
}
die Ausgabe lautet:
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?=
Das interessante daran ist, dass, wenn ich versuche, das Thema mit POCO zu konvertieren es fehlschlägt:
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?=
Aber das Thema, das ich erhalten möchte, ist: „Re: Mój sen o JP II“ Die einzige erfolgreiche Art, wie ich das Thema konvertieren gefunden ist: https://docs.python.org/2/library/email.header.html#email.header.decode_header
Also meine Frage ist -wie den E-Mail-Betreff in C++ in ein Format wie UTF-8 zu konvertieren?
Finden Sie den entsprechenden RFC, Code it up. Wenn ich mich erinnere Mail und NNTP Nachrichten verwenden etwas andere Konventionen. –
@Alf, bevor Sie selbst einen Code schreiben, suchen Sie nach, ob jemand die Arbeit für Sie erledigt hat. Insbesondere bei etablierten RFCs gibt es viele bestehende Implementierungen. –
Ich habe gerade https://github.com/pocoproject/poco/issues/1543 eingereicht. –