// static bool wordEncoder::isEncodingNeeded (const generationContext& ctx, const string& buffer, const charset& charset, const string& lang) { if (!ctx.getInternationalizedEmailSupport()) { // Charset-specific encoding encoding recEncoding; if (charset.getRecommendedEncoding(recEncoding)) return true; // No encoding is needed if the buffer only contains ASCII chars if (utility::stringUtils::findFirstNonASCIIchar(buffer.begin(), buffer.end()) != string::npos) return true; } // Force encoding when there are only ASCII chars, but there is // also at least one of '\n' or '\r' (header fields) if (buffer.find_first_of("\n\r") != string::npos) return true; // If any RFC-2047 sequence is found in the buffer, encode it if (buffer.find("=?") != string::npos || buffer.find("?=") != string::npos) return true; // If a language is specified, force encoding if (!lang.empty()) return true; return false; }
void emailAddress::generateImpl (const generationContext& ctx, utility::outputStream& os, const string::size_type curLinePos, string::size_type* newLinePos) const { string localPart, domainPart; if (ctx.getInternationalizedEmailSupport() && (!utility::stringUtils::is7bit(m_localName.getBuffer()) || !utility::stringUtils::is7bit(m_domainName.getBuffer()))) { // Local part string localPartUTF8(m_localName.getConvertedText(vmime::charsets::UTF_8)); word localPartWord(localPartUTF8, vmime::charsets::UTF_8); vmime::utility::outputStreamStringAdapter os(localPart); localPartWord.generate(ctx, os, 0, NULL, text::FORCE_NO_ENCODING | text::QUOTE_IF_NEEDED, NULL); // Domain part domainPart = m_domainName.getConvertedText(vmime::charsets::UTF_8); } else { // Local part vmime::utility::outputStreamStringAdapter os(localPart); m_localName.generate(ctx, os, 0, NULL, text::QUOTE_IF_NEEDED, NULL); // Domain part as IDNA domainPart = domainNameToIDNA(m_domainName.getConvertedText(vmime::charsets::UTF_8)); } os << localPart << "@" << domainPart; if (newLinePos) { *newLinePos = curLinePos + localPart.length() + 1 // @ + domainPart.length(); } }