Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write in 'mailto' body link to current page

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&amp;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?

like image 554
Chuck Norris Avatar asked Nov 02 '11 07:11

Chuck Norris


People also ask

How do I add a body text to a mailto link?

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.

Is it possible to add an HTML link in the body of a mailto link?

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.

How do I pass HTML body into mailto?

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.


3 Answers

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>
like image 58
reticent Avatar answered Sep 25 '22 02:09

reticent


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.

like image 21
Shadow2531 Avatar answered Sep 26 '22 02:09

Shadow2531


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&amp;body=I thought you might find this information interesting:%20%0d%0a"+window.location);
});
like image 41
Nicu Surdu Avatar answered Sep 27 '22 02:09

Nicu Surdu