int QuotedPrintableEncoderBuf::writeToDevice(char c) { if (_pending != -1) { if (_pending == '\r' && c == '\n') writeRaw((char) _pending); else if (c == '\r' || c == '\n') writeEncoded((char) _pending); else writeRaw((char) _pending); _pending = -1; } if (c == '\t' || c == ' ') { _pending = charToInt(c); return _pending; } else if (c == '\r' || c == '\n' || c > 32 && c < 127 && c != '=') { writeRaw(c); } else { writeEncoded(c); } return charToInt(c); }
void MailMessage::write(std::ostream& ostr) const { MessageHeader header(*this); setRecipientHeaders(header); if (isMultipart()) { writeMultipart(header, ostr); } else { writeHeader(header, ostr); std::istringstream istr(_content); writeEncoded(istr, ostr, _encoding); } }
void MailMessage::writePart(MultipartWriter& writer, const Part& part) const { MessageHeader partHeader(part.pSource->headers()); MediaType mediaType(part.pSource->mediaType()); if (!part.name.empty()) mediaType.setParameter("name", part.name); partHeader.set(HEADER_CONTENT_TYPE, mediaType.toString()); partHeader.set(HEADER_CONTENT_TRANSFER_ENCODING, contentTransferEncodingToString(part.encoding)); std::string disposition; if (part.disposition == CONTENT_ATTACHMENT) { disposition = "attachment"; const std::string& filename = part.pSource->filename(); if (!filename.empty()) { disposition.append("; filename="); quote(filename, disposition); } } else disposition = "inline"; partHeader.set(HEADER_CONTENT_DISPOSITION, disposition); writer.nextPart(partHeader); writeEncoded(part.pSource->stream(), writer.stream(), part.encoding); }