message: implement rfc2047-encoding addresses

For address names with commas, quotes etc.
This commit is contained in:
Dirk-Jan C. Binnema 2022-05-06 22:09:50 +03:00
parent da8489d0f6
commit 4fc05261ce
3 changed files with 34 additions and 3 deletions

View File

@ -64,6 +64,23 @@ Mu::init_gmime(void)
}
std::string
Mu::address_rfc2047(const Contact& contact)
{
init_gmime();
InternetAddress *addr =
internet_address_mailbox_new(contact.name.c_str(),
contact.email.c_str());
std::string encoded = to_string_gchar(
internet_address_to_string(addr, {}, true));
g_object_unref(addr);
return encoded;
}
/*
* MimeObject
@ -602,8 +619,8 @@ MimeMultipartSigned::verify(const MimeCryptoContext& ctx, VerifyFlags vflags) co
std::vector<MimeSignature> sigs;
for (auto i = 0;
i != g_mime_signature_list_length(siglist); ++i) {
GMimeSignature *sig = g_mime_signature_list_get_signature(siglist, i);
sigs.emplace_back(MimeSignature(sig));
GMimeSignature *msig = g_mime_signature_list_get_signature(siglist, i);
sigs.emplace_back(MimeSignature(msig));
}
g_object_unref(siglist);

View File

@ -45,6 +45,16 @@ using MimeFormatOptions = deletable_unique_ptr<GMimeFormatOptions, g_mime_format
*/
void init_gmime(void);
/**
* Get a RFC2047-compatible address for the given contact
*
* @param contact a contact
*
* @return an address string
*/
std::string address_rfc2047(const Contact& contact);
class Object {
public:
/**
@ -160,6 +170,10 @@ private:
mutable GObject *self_{};
};
/**
* Thin wrapper around a GMimeContentType

View File

@ -322,7 +322,7 @@ each_contact(const Mu::Contact& ci, ECData& ecdata)
"\tlast-seen: %s\n",
ci.email.c_str(),
ci.name.empty() ? "<none>" : ci.name.c_str(),
ci.display_name().c_str(),
ci.display_name(true).c_str(),
ci.personal ? "yes" : "no",
ci.frequency,
datebuf);