DEV Community

Jason Melton
Jason Melton

Posted on • Edited on

2 2

More Stuff You Can do with mailto

Background:

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.

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:
Image for post

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 look like this:

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

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

General Idea

After you set up your basic anchor tag with a href="mailto:... , you can add your first parameter to the href 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>
Enter fullscreen mode Exit fullscreen mode

Add a Subject

Have a subject automatically appear when the mail client loads:

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

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>
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode

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[4.]:
_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>
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode

Again, you can add multiple contacts with a comma.

Caveat

In my research, I’ve seen some cross-browser, cross-email client 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.

I love to be corrected. 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/
[4.] https://www.w3schools.com/tags/att_a_target.asp

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay