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 - -
type=alternative: Different representations of same content - -
type=mixed: Independent parts (text + attachments) - -
type=related: Parts that reference each other (HTML + images) - -
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 - - 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 --fullto inspect the raw MIME structure of received emails.
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.
<#part>
Defines a message part.
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"
`