More Stuff You Can do with mailto

Jason Melton
Webtips

--

Background:

(Skip to The Meat if you just want the meat.)

I’m building an email automation website using React for the front-end, Rails for the back-end. It lets users create and save email templates and contacts. It has a nice, clean single page display where users can select and edit templates and send them to their chosen contacts.

The issue I had to overcome: ‘How can I quickly create an interface that anyone can use from their personal email?’

I researched various back-end options, JavaScript libraries, and other email automation projects on GitHub. There’s a lot of cool stuff out there, but I realized my problem was not that complex. In fact, I could probably just use a mailto: link.

Then looking into mailto:, I learned there’s a lot more here than “that annoying link I accidentally clicked when I was trying to copy your email.” Here’s the meat:

The Meat:

mailto: links are “a type of HTML link that activates the default mail client on the computer for sending an e-mail.”[1] A standard one looks like this:

<a href="mailto:example@email.com">Email!</a>

There’s more! Here’s what I’ve learned:

General Idea

After you set up your basic anchor tag with a href="mailto:... , you add your first parameter with a ? and additional parameters with a &.

For example:

<a href="mailto:person1@email.com?cc=person2@email.com
&subject=The%20subject%20of%20the%20email">
Email!</a>

Add a Subject

Have a subject automatically appear when the mail client loads:

<a href="mailto:example@email.com/?subject=Important Email!">Email!</a>

Using Chrome and Gmail, spaces between words in the subject line were acceptable. It also transposed if I put a + or %20 in place of a space.

Add a Body

<a href="mailto:example@email.com/?body=Welcome to the body!%0D%0AI'm on the next line!">Email!</a>

Similar to the subject, you just add a body parameter.

Want to add a line break in your body? Use%0D%0A in place of return.

Other special characters may need to be encoded. Using JavaScript, you can escape all the special characters using encodeURI() and adding your subject string as a parameter. [2.]

Open in New Tab

Adding a target of _blank will cause the email to open in a new tab.

<a href=”mailto:example@email.com" target=”_blank” rel="noopener noreferrer">Email!</a>

Be sure to include rel=”noopener noreferrer” when opening a link in a new tab to avoid exposing your site to performance and security issues. [3.]

Options for a target from w3schools:

  • _top: Opens the linked document in the full body of the window
  • _blank: Opens the linked document in a new window or tab
  • _self: Opens the linked document in the same frame as it was clicked (this is default)
  • _parent: Opens the linked document in the parent frame

Add Multiple Contacts

Add multiple recipients with a comma and no space between emails.

<a href='mailto:person1@email.com,person2@email.com,person3@email.com'>Email!</a>

CC or BCC Contact

Carbon copy or blind carbon copy recipients using &cc= or &bcc=.

<a href="mailto:person1@email.com?cc=person2@email.com&bcc=person3@email.com"> Email! </a>

Again, you can add multiple contacts with a comma.

Caveat

In my research, I’ve seen some cross-browser issues with some of these methods, especially the ones dealing with special characters. Ultimately, my purpose was to point out some of the flexibility of mailto:. I’m sure there are things I’m overlooking or glossing over.

If I am missing anything, please shoot me a message, I’d love to add to the list. Or send me anything cool that you’ve done that I can share here?

As always, thanks for reading. Hope this helps someone!

[1.] https://www.rapidtables.com/web/html/mailto.html

[2.] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI

[3.] https://web.dev/external-anchors-use-rel-noopener/

--

--