When you are writing MIME, you separate different chunks of your message with a certain boundary. I failed for some reason to find any documentation explaining this boundary, but here's what I gathered from examples:
Boundary can be any string of letters and numbers, i. e. "d29a0c638b540b23e9a29a3a9aebc900aeeb6a82".
There are no rules for generating the boundary, you can just md5sum the name of your beloved, and here you go, you've got your boundary.
If you are sending MIME over HTTP, you must add a header "Content-Type" specifying that you do, and your boundary, contents of a header may look like this:
multipart/form-data; boundary=d29a0c638b540b23e9a29a3a9aebc900aeeb6a82
In the body of your message, the boundary should be preceded with "--", like:
--d29a0c638b540b23e9a29a3a9aebc900aeeb6a82
But following these rules (and this helpful answer) I failed to generate POST query that server would accept. Am I missing something? Did I get something wrong?
The syntax of a boundary is:
boundary := 0*69<bchars> bcharsnospace bchars := bcharsnospace / " " bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" / "+" / "_" / "," / "-" / "." / "/" / ":" / "=" / "?"
And the body of a multipart entity has the syntax (only the important parts):
multipart-body := [preamble CRLF] dash-boundary transport-padding CRLF body-part *encapsulation close-delimiter transport-padding [CRLF epilogue] dash-boundary := "--" boundary encapsulation := delimiter transport-padding CRLF body-part delimiter := CRLF dash-boundary close-delimiter := delimiter "--"
The preceeding --
is mandatory for every boundary used in the message and the trailing --
is mandatory for the closing boundary (close-delimiter). So a multipart body with three body-parts with boundary
as boundary can look like this:
--boundary
1. body-part
--boundary
2. body-part
--boundary
3. body-part
--boundary--