Seems you can do it. Remember it: it's not a relationship DB, you should organize an entity as how you use it.
If you just want email to identify a thread, you can simply define:
class Thread(db.Mode):
email = db.EmailProperty()
or this is ok too:
user = db.UserProperty()
user_
email = db.EmailProperty()
You need to know the query need an index.
When you perform a query on Thread, its index doesn't contain a attribute of user.email, so that would be wrong. NOTE: The Thread class only has index on user, not user.email.
If you don't want change your model, you can only do it this way:
user = User.gql('WHERE email = :1', email)
threads = user.user_set
for thread in threads:
...
The '_set' means a back-reference property.
You can get more details in "References" of "Entities and Models" document: