I have mailto
button in all pages of my site and I want to write reference to that page in e-mail body.
In one page I can have
<a class="email" title="Email a friend" href="mailto:?subject=Interesting%20information&body=I thought you might find this information interesting:%20%0d%0ahttp://www.a.com/Home/SiteMap/tabid/589/Default.aspx">Email</a>
But how can I make this generic for all pages?
subject=<subject> to the mailto tag. For example, the complete tag would look similar to the example below. You can also add body text by adding &body=body to the end of the tag, as shown in the example below. You can also include &cc= or &bcc= to fill out the CC and BCC fields.
It isn't possible as far as I can tell, since a link needs HTML, and mailto links don't create an HTML email. This is probably for security as you could add javascript or iframes to this link and the email client might open up the end user for vulnerabilities.
The Mailto format does not support HTML code emails. Outlook was used at 2003, but to become compliant with the mailto: standard they removed that functionality. But you can Use %0D%0A for a line break in HTML body.
This is the pure javascript solution:
<a class="email" title="Email a friend" href="#" onclick="javascript:window.location='mailto:?subject=Interesting information&body=I thought you might find this information interesting: ' + window.location;">Email</a>
With Javascript, you utf-8-percent-encode the subject and body hfvalues using encodeURIComponent() on a UTF-8 page.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title></title>
<script>
function SendLinkByMail(href) {
var subject= "Interesting Information";
var body = "I thought you might find this information interesting:\r\n\r\n<";
body += window.location.href;
body += ">";
var uri = "mailto:?subject=";
uri += encodeURIComponent(subject);
uri += "&body=";
uri += encodeURIComponent(body);
window.open(uri);
}
</script>
</head>
<body>
<p><a href="javascript:(function()%7BSendLinkByMail()%3B%7D)()%3B">Email link to this page</a></p>
</body>
</html>
If you're doing this server-side, you can just build the mailto link and emit it as the href attribute value. Then, you won't need JS at all.
I assume ASP has some URI encoding functions that work like encodeURIComponent().
You can also view the source of my mailto URI composer page as another example.
You an also take a look at http://shadow2531.com/opera/testcases/mailto/mailto_uri_scheme_idea.html#send_link_by_mail and my mailto URI syntax validator.
For the < and > that I encase the URI in, in the JS code above, see "Appendix C. Delimiting a URI in Context" of RFC3986 for why.
Also, instead of window.location.href, you can use window.location or document.location.href or document.location. I normally use "document.location".
For why you use a Javascript URI instead of an onclick attribute, see this answer.
Also note that in the JS URI in the code above, I wrapped the code in an anonymous function. That's not necessary in this case because the function doesn't return anything that would change the document when you click. But, it's to just do it all the time for good measure.
See my Javascript URI compose to help with creating javascript URIs.
You can put a JS on every page that can modify all the hrefs of all email link when the document loads.
I'll use jQuery for the example code because is more compact, but this can be achieved also with pure JS:
$(document).ready(function(){
$(".email").attr("href", "mailto:?subject=Interesting%20information&body=I thought you might find this information interesting:%20%0d%0a"+window.location);
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With