Is the
$2 in your query supposed to be a PHP variable? It may be a typo, but if not I don't think PHP allows a variable to begin with a number.
One trick I used to use a lot when beginning with PHP/MYSQL (not to imply you're a beginner!) is to assign the query string to a variable and then echo the string to make sure it looks like it's supposed to. Like this:
[php]$query = "SELECT * FROM table_name"; //using your query, of course
echo $query;
$result = mysql_query($query);
if (!result) { echo "error with db query!"; }[/php]
In your case, you will be able to see exactly what query your computer thinks your are trying to perform. If that doesn't point you to the problem, post back your intended query in PHP format and then what is echoes to your browser. That $2 seems awfully strange to me though.
-----
As far as the BLOBs go, it's probably the right choice for the message, but depending on what exactly you're storing for the 'from' field, you could probably use VARCHAR (and then you would specify the max number of characters - like 200 or whatever you choose). For instance, if the from field is a username and you specify a maximum length for username as 30 characters, then you would use VARCHAR(30). The VARCHAR type can hold a max of 255 characters.
---
I've used the PHPMailer class (
http://phpmailer.sourceforge.net/) without any problems. There may be something better out there now, haven't looked in a year or so.