# Message Composition with MML (MIME Meta Language) Himalaya uses MML for composing emails. MML is a simple XML-based syntax that compiles to MIME messages. ## Basic Message Structure An email message is a list of **headers** followed by a **body**, separated by a blank line: ``` From: sender@example.com To: recipient@example.com Subject: Hello World This is the message body. ``` ## Headers Common headers: - `From`: Sender address - `To`: Primary recipient(s) - `Cc`: Carbon copy recipients - `Bcc`: Blind carbon copy recipients - `Subject`: Message subject - `Reply-To`: Address for replies (if different from From) - `In-Reply-To`: Message ID being replied to ### Address Formats ``` To: user@example.com To: John Doe To: "John Doe" To: user1@example.com, user2@example.com, "Jane" ``` ## Plain Text Body Simple plain text email: ``` From: alice@localhost To: bob@localhost Subject: Plain Text Example Hello, this is a plain text email. No special formatting needed. Best, Alice ``` ## MML for Rich Emails ### Multipart Messages Alternative text/html parts: ``` From: alice@localhost To: bob@localhost Subject: Multipart Example <#multipart type=alternative> This is the plain text version. <#part type=text/html>

This is the HTML version

<#/multipart> ``` ### Attachments Attach a file: ``` From: alice@localhost To: bob@localhost Subject: With Attachment Here is the document you requested. <#part filename=/path/to/document.pdf><#/part> ``` Attachment with custom name: ``` <#part filename=/path/to/file.pdf name=report.pdf><#/part> ``` Multiple attachments: ``` <#part filename=/path/to/doc1.pdf><#/part> <#part filename=/path/to/doc2.pdf><#/part> ``` ### Inline Images Embed an image inline: ``` From: alice@localhost To: bob@localhost Subject: Inline Image <#multipart type=related> <#part type=text/html>

Check out this image:

<#part disposition=inline id=image1 filename=/path/to/image.png><#/part> <#/multipart> ``` ### Mixed Content (Text + Attachments) ``` From: alice@localhost To: bob@localhost Subject: Mixed Content <#multipart type=mixed> <#part type=text/plain> Please find the attached files. Best, Alice <#part filename=/path/to/file1.pdf><#/part> <#part filename=/path/to/file2.zip><#/part> <#/multipart> ``` ## MML Tag Reference ### `<#multipart>` Groups multiple parts together. - `type=alternative`: Different representations of same content - `type=mixed`: Independent parts (text + attachments) - `type=related`: Parts that reference each other (HTML + images) ### `<#part>` Defines a message part. - `type=`: Content type (e.g., `text/html`, `application/pdf`) - `filename=`: File to attach - `name=`: Display name for attachment - `disposition=inline`: Display inline instead of as attachment - `id=`: Content ID for referencing in HTML ## Composing from CLI ### Interactive compose Opens your `$EDITOR`: ```bash himalaya message write ``` ### Reply (opens editor with quoted message) ```bash himalaya message reply 42 himalaya message reply 42 --all # reply-all ``` ### Forward ```bash himalaya message forward 42 ``` ### Send from stdin ```bash cat message.txt | himalaya template send ``` ### Prefill headers from CLI ```bash himalaya message write \ -H "To:recipient@example.com" \ -H "Subject:Quick Message" \ "Message body here" ``` ## Tips - The editor opens with a template; fill in headers and body. - Save and exit the editor to send; exit without saving to cancel. - MML parts are compiled to proper MIME when sending. - Use `himalaya message export --full` to inspect the raw MIME structure of received emails.