Open this page inside the Instagram in-app browser and tap each button. Note which ones open the mail composer (with subject & body filled in) and which ones do nothing. Same content, different syntax.
Simplest possible — no subject or body.
mailto:thomas.graziani@gmail.com
Tap to test #1
RFC-style: spaces as %20, params joined with &.
mailto:...?subject=Test%20Subject&body=Hello%2C%20this%20is%20a%20test.
Tap to test #2
Form-style: spaces as + signs.
mailto:...?subject=Test+Subject&body=Hello,+this+is+a+test.
Tap to test #3
Literal spaces, no encoding at all.
mailto:...?subject=Test Subject&body=Hello, this is a test.
Tap to test #4
Extra recipient params included.
mailto:...?cc=cc@example.com&bcc=bcc@example.com&subject=Test%20Subject&body=Hello%20there.
Tap to test #6
Triggered via JavaScript instead of an anchor.
window.location.href = "mailto:...?subject=...&body=..."
Opens the mailto in a new context.
window.open("mailto:...", "_blank")
Opens the mailto in the current context instead of a new one.
window.open("mailto:...", "_self")
Creates an <a> element and clicks it programmatically.
a = document.createElement('a'); a.href='mailto:...'; a.click();
Standard link but forced into a new tab/context.
<a target="_blank" href="mailto:...">
Tap to test #10
If the browser is Instagram, use a real anchor link (Instagram blocks JS-initiated mailto); otherwise use window.open(_self).
isIG = /Instagram/i.test(navigator.userAgent);
isIG ? <a href="mailto:..."> : window.open("mailto:...", "_self")