Try substituting the pound sign with either "£" or "£"
Try using GetAsURLEncoded(body) instead of body.
Other parts also need encoded if it have special characters.
I think I misunderstood the pound sign as the sign of pound as currency. The URL replacement for # would be %23.
Truncating after a # is not a surprise since they normally refer to a anchor in a target rather than a part of the target itself.
As mentioned, you would need to use your GetAsURLEncoded to make your URL a valid URL, I expected you did that already. If you do so, are the spaces as %20 not converted back to spaces in the email?
This works for me, I copied the result in each case and pasted into a web browser, it formatted the message correctly...
I copied the CF you linked to above and renamed it to gmail
gmail ( to ; subject ; body ; cc ; bcc )
I typed the following into the data viewer (FM Advanced 15) and here are the results I got
gmail ( "<recipient>" ; "test message" ; GetAsURLEncoded ( "This is a test # to see what happens after a pound sign" ) ; "" ; "" )
http://mail.google.com/mail/?view=cm&fs=1&to=<mail recipient here>&su=test message&body=This%20is%20a%20test%20%23%20to%20see%20what%20happens%20after%20a%20pound%20sign&cc=&bcc=
gmail ( "<mail recipient here>" ; "test message" ; Substitute ( GetAsURLEncoded ( "This is a test # to see what happens after a pound sign" ) ; "%20" ; "+" ) ; "" ; "" )
http://mail.google.com/mail/?view=cm&fs=1&to=<mail recipient here>&su=test message&body=This+is+a+test+%23+to+see+what+happens+after+a+pound+sign&cc=&bcc=