
We have had a send to a friend function in Ceros since it started, however it was rather hidden in the clipping functionality and seemed more like the BBC's send to a friend feature which is almost alien to most web users. These old school (web 1.0 for desperate want of another word) share forms fail for me on a number of accounts.
- Firstly they are all different, each one you go to has a different order for input and a different range or requirements. So each time you use one you have to figure out what goes where.
- Secondly you don't know what is being sent, your friend may not know what is going on and spam block your email address. Imagine sending your mum an email filled with content you can't influence... it just wont work.
- Finally there is a fear of spam, you are filling in a form with your most prised web possession, your email address. You could understand giving this to Yahoo/Google/BBC but not some company you don't know, and you may even give a fake one, leading to the email never getting through (I'm sure spam@spam.spam isn't going to get binned)!
I guess what you need to know before you design one is your goal. If you want to harvest people's email addresses you would go with something like the above, but in our experience what you really want to do is increase the viralability of the product and drive up the number of visits. If this is the case then read on...

I find that when ever I want to share a video from YouTube on the web I don't use their share button, instead I copy the URL and paste it into an email myself, safe in the knowledge no one has got my email address, nor one of my friends and I know what is being sent. So in order to do this you need nice short URLs that are as meaningful as possiable, this will encourage people to send it. Mainly as they are in total control.
To encourage this even more you can do what metacafe have done, and google maps do, which is to simply add a mailto: link, which will launch the users default email client (gmail for me), with the message field containing the URL. This will make the user feel in control still, but will make it easier for them to do.
Finally this is the option to send it using a form, you may be at work, school, internet cafe and not have a email client set up. You don't want to exclude these people, so why not give them another way.
- Make it look familiar. Each time a user gets a form to fill in there it reminds them of a lengthy process and will probably make half your audience dismiss it without bothering. So want can you do, come up with a standard for "send to friend" forms? Wait... there already is one! and its called email, so try and design your form like an email client, [To: Subject: Message:] if you want to more fields the do so after the form and make them optional.
- Pre-fill the message. This will allow you user to tailor the message to best suite the recipient and make it more likely for them to click. If they delete the URL you can always append it on the end again when then submit. I would also suggest putting ONLY the URL in rather than some spammy looking message about your product, or any other corporate bullshit hinting to the fact you may try and steal their email address.
- From email should be optional. People may not want to give their email out, and may feel forced into giving a made up one, leading to a message being seen as spam. So why not make the from address optional and send it from your system's address if it isn't there?
- More than one recipient? In most cases you should be able to separate users by a comma, although it is hard to get this across without out cluttering up your form. Designing like an email application should lean towards this however metacafe have a very simple method by adding a second friend field, which then creates a third, and then forth and so on, when typed in. Another way is to have a send again after the user sends with the "to" field emptied.
Finally there is a third option, you have a mailto: link, a descriptive url and a nice email form, but what if you product uses a lot of ajax of flash and the content changes without the URL being effected. The answer seems to be a "get link button" (like google maps), which takes you to the same page via a descriptive URL. Enjoy and share...