I suggest you send yourself an actual email with zip file attachment and look at the raw contents.
What you'll find is that the email will be formatted per the MIME standard which specifies how to include various file formats in a textual email.
In your case the top-level Content-type will be something like multipart/alternative or multipart/mixed. Within that will be two or more parts or sections with their own Content-type. One will have type application/zip. The application/zip section will have a text encoding (e.g. Base 64) of the zip file.
Here's a sample:
From: John Doe <email@example.com>
This is a multipart message in MIME format.
this is the body text
...Body of email in HTML format...
BASE64 ENCODING TEXT HERE
Some more information: Email File Attachments Using MIME
Back to the root of your question, how to do this? I'm not familiar with any standalone tools that help construct an email like this but I'd be surprised if you couldn't find something useful. Perhaps one of the email clients supports command-line/bulk operations. But if worse comes to worst, it's all just ASCII text so you can easily construct it manually along the lines of what you're doing with your HTML email. But I suggest you build the message in a temporary file before piping it to your mail agent. (Look into "here documents" for easy saving of large amounts of text.)
And as indicated, you will need to convert your zip file to Base 64. Just about every Linux installation should have the
base64 utility or equivalent. Just pass your zip to it and append to your email file at the appropriate time...
base64 test.zip >> my-email-file.txt