|
|
|
@ -56,11 +56,11 @@ std::string longmsg_mimetype(const message* msg)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void generate_body(std::string& smsg, sv mime_type, sv body, bool transport_encode)
|
|
|
|
|
void generate_body(std::string& smsg, sv mime_type, sv body)
|
|
|
|
|
{
|
|
|
|
|
smsg += "Content-Type: "s + mime_type + "; charset=UTF-8;\r\n"s;
|
|
|
|
|
|
|
|
|
|
if(transport_encode==false || need_transport_encoding(body)==false)
|
|
|
|
|
if(need_transport_encoding(body)==false)
|
|
|
|
|
{
|
|
|
|
|
smsg += "\r\n"; // end of header section
|
|
|
|
|
smsg += body;
|
|
|
|
@ -72,10 +72,10 @@ void generate_body(std::string& smsg, sv mime_type, sv body, bool transport_enco
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void generate_ma_body(std::string& smsg, sv plain_mimetype, sv plain, sv html, bool transport_encode)
|
|
|
|
|
void generate_ma_body(std::string& smsg, sv plain_mimetype, sv plain, sv html)
|
|
|
|
|
{
|
|
|
|
|
const bool encode_plain = transport_encode && need_transport_encoding(plain);
|
|
|
|
|
const bool encode_html = transport_encode && need_transport_encoding(html);
|
|
|
|
|
const bool encode_plain = need_transport_encoding(plain);
|
|
|
|
|
const bool encode_html = need_transport_encoding(html);
|
|
|
|
|
|
|
|
|
|
unsigned long long counter=0;
|
|
|
|
|
std::string delimiter = generate_delimiter(counter);
|
|
|
|
@ -91,14 +91,14 @@ void generate_ma_body(std::string& smsg, sv plain_mimetype, sv plain, sv html, b
|
|
|
|
|
"\r\n"; // end of header section
|
|
|
|
|
|
|
|
|
|
smsg += "--" + delimiter + "\r\n";
|
|
|
|
|
generate_body(smsg, plain_mimetype, plain, transport_encode);
|
|
|
|
|
generate_body(smsg, plain_mimetype, plain);
|
|
|
|
|
smsg += "--" + delimiter + "\r\n";
|
|
|
|
|
generate_body(smsg, "text/html", html, transport_encode);
|
|
|
|
|
generate_body(smsg, "text/html", html);
|
|
|
|
|
smsg += "--" + delimiter + "--\r\n";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void generate_mm_body(std::string& smsg, sv mime_type, sv body, const std::vector<Attachment>& a, bool transport_encode)
|
|
|
|
|
void generate_mm_body(std::string& smsg, sv mime_type, sv body, const std::vector<Attachment>& a)
|
|
|
|
|
{
|
|
|
|
|
std::vector<Attachment> a2{a};
|
|
|
|
|
a2.emplace_back(body, mime_type);
|
|
|
|
@ -111,7 +111,7 @@ void generate_mm_body(std::string& smsg, sv mime_type, sv body, const std::vecto
|
|
|
|
|
if(mime_type.size())
|
|
|
|
|
{
|
|
|
|
|
smsg += "--" + delimiter + "\r\n";
|
|
|
|
|
generate_body(smsg, mime_type, body, transport_encode);
|
|
|
|
|
generate_body(smsg, mime_type, body);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
generate_attachments(smsg, a, delimiter);
|
|
|
|
@ -120,7 +120,7 @@ void generate_mm_body(std::string& smsg, sv mime_type, sv body, const std::vecto
|
|
|
|
|
|
|
|
|
|
// complex MIME structures, depending on "det"
|
|
|
|
|
// see: https://dev.pep.foundation/libpEpMIME
|
|
|
|
|
void generate_complex_body(std::string& smsg, unsigned det, const message* msg, const std::vector<Attachment>& a, bool transport_encode)
|
|
|
|
|
void generate_complex_body(std::string& smsg, unsigned det, const message* msg, const std::vector<Attachment>& a)
|
|
|
|
|
{
|
|
|
|
|
const std::string longmsg_mimetype = pEpMIME::longmsg_mimetype(msg);
|
|
|
|
|
|
|
|
|
@ -139,7 +139,7 @@ void generate_complex_body(std::string& smsg, unsigned det, const message* msg,
|
|
|
|
|
case 6: smsg += "Content-Type: multipart/related; boundary=\"" + delimiter + "\";\r\n"
|
|
|
|
|
"\r\n" // end of header section
|
|
|
|
|
"--" + delimiter + "\r\n";
|
|
|
|
|
generate_body(smsg, "text/html", msg->longmsg_formatted, transport_encode);
|
|
|
|
|
generate_body(smsg, "text/html", msg->longmsg_formatted);
|
|
|
|
|
generate_attachments(smsg, a, delimiter);
|
|
|
|
|
break;
|
|
|
|
|
case 7:
|
|
|
|
@ -148,13 +148,13 @@ void generate_complex_body(std::string& smsg, unsigned det, const message* msg,
|
|
|
|
|
smsg += "Content-Type: multipart/alternative; boundary=\"" + delimiter_A + "\";\r\n"
|
|
|
|
|
"\r\n"
|
|
|
|
|
"--" + delimiter_A + "\r\n";
|
|
|
|
|
generate_body(smsg, longmsg_mimetype, msg->longmsg, transport_encode);
|
|
|
|
|
generate_body(smsg, longmsg_mimetype, msg->longmsg);
|
|
|
|
|
smsg += "--" + delimiter_A + "\r\n";
|
|
|
|
|
const std::string delimiter_R = delimiter + "R=";
|
|
|
|
|
smsg += "Content-Type: multipart/related; boundary=\"" + delimiter_R + "\";\r\n"
|
|
|
|
|
"\r\n"
|
|
|
|
|
"--" + delimiter_R + "\r\n";
|
|
|
|
|
generate_body(smsg, "text/html", msg->longmsg_formatted, transport_encode);
|
|
|
|
|
generate_body(smsg, "text/html", msg->longmsg_formatted);
|
|
|
|
|
generate_attachments(smsg, a, delimiter_R);
|
|
|
|
|
smsg += "--" + delimiter_A + "--\r\n";
|
|
|
|
|
break;
|
|
|
|
@ -169,9 +169,9 @@ void generate_complex_body(std::string& smsg, unsigned det, const message* msg,
|
|
|
|
|
smsg += "Content-Type: multipart/alternative; boundary=\"" + delimiter_A + "\";\r\n"
|
|
|
|
|
"\r\n"
|
|
|
|
|
"--" + delimiter_A + "\r\n";
|
|
|
|
|
generate_body(smsg, longmsg_mimetype, msg->longmsg, transport_encode);
|
|
|
|
|
generate_body(smsg, longmsg_mimetype, msg->longmsg);
|
|
|
|
|
smsg += "--" + delimiter_A + "\r\n";
|
|
|
|
|
generate_body(smsg, "text/html", msg->longmsg_formatted, transport_encode);
|
|
|
|
|
generate_body(smsg, "text/html", msg->longmsg_formatted);
|
|
|
|
|
smsg += "--" + delimiter_A + "--\r\n"
|
|
|
|
|
"\r\n";
|
|
|
|
|
generate_attachments(smsg, a, delimiter_M);
|
|
|
|
@ -187,8 +187,9 @@ void generate_complex_body(std::string& smsg, unsigned det, const message* msg,
|
|
|
|
|
smsg += "Content-Type: multipart/related; boundary=\"" + delimiter_R + "\";\r\n"
|
|
|
|
|
"\r\n"
|
|
|
|
|
"--" + delimiter_R + "\r\n";
|
|
|
|
|
generate_body(smsg, "text/html", msg->longmsg_formatted, transport_encode);
|
|
|
|
|
generate_body(smsg, "text/html", msg->longmsg_formatted);
|
|
|
|
|
generate_attachments(smsg, a, delimiter_R, &is_inline );
|
|
|
|
|
// closing of delimiter_R is done in generate_attachments()
|
|
|
|
|
generate_attachments(smsg, a, delimiter_M, &is_not_inline );
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
@ -203,12 +204,12 @@ void generate_complex_body(std::string& smsg, unsigned det, const message* msg,
|
|
|
|
|
smsg += "Content-Type: multipart/alternative; boundary=\"" + delimiter_A + "\";\r\n"
|
|
|
|
|
"\r\n"
|
|
|
|
|
"--" + delimiter_A + "\r\n";
|
|
|
|
|
generate_body(smsg, longmsg_mimetype, msg->longmsg, transport_encode);
|
|
|
|
|
generate_body(smsg, longmsg_mimetype, msg->longmsg);
|
|
|
|
|
smsg += "--" + delimiter_A + "\r\n"
|
|
|
|
|
"Content-Type: multipart/related; boundary=\"" + delimiter_R + "\";\r\n"
|
|
|
|
|
"\r\n"
|
|
|
|
|
"--" + delimiter_R + "\r\n";
|
|
|
|
|
generate_body(smsg, "text/html", msg->longmsg_formatted, transport_encode);
|
|
|
|
|
generate_body(smsg, "text/html", msg->longmsg_formatted);
|
|
|
|
|
generate_attachments(smsg, a, delimiter_R, &is_inline );
|
|
|
|
|
// closing of delimiter_R is done in generate_attachments()
|
|
|
|
|
smsg += "--" + delimiter_A + "--\r\n";
|
|
|
|
|