You can find out the e-mail of the logged in user by using the following code:
$customer = Mage::getSingleton('customer/session')->getCustomer();
$mail = $customer->getEmail();
How to find out where getEmail() is defined?
I searched in app\code\core\Mage\Customer\Model\Resource\Customer.php but there is no function called getEmail().
I only found this:
So I tracked it back with NetBeans, and found the definition for Varien_Object in lib\Varien\Object.php.
But in there is no function getEmail() either.
I searched the whole project for the string public function getEmail(),
This is the result:
$ grep -iR "public function getEmail()"
app/code/core/Mage/Catalog/Block/Product/Send.php: public function getEmail()
app/code/core/Mage/Newsletter/Model/Subscriber.php: public function getEmail()
app/code/core/Mage/Sendfriend/Block/Send.php: public function getEmail()
app/code/core/_193_Mage/Catalog/Block/Product/Send.php: public function getEmail()
app/code/core/_193_Mage/Newsletter/Model/Subscriber.php: public function getEmail()
app/code/core/_193_Mage/Sendfriend/Block/Send.php: public function getEmail()
app/code/_core/Mage/Catalog/Block/Product/Send.php: public function getEmail()
app/code/_core/Mage/Newsletter/Model/Subscriber.php: public function getEmail()
app/code/_core/Mage/Sendfriend/Block/Send.php: public function getEmail()
lib/Payone/Api/Request/Parameter/Authorization/PersonalData.php: public function getEmail()
lib/Payone/Api/Request/Parameter/CreateAccess/PersonalData.php: public function getEmail()
lib/Payone/Api/Request/Parameter/ManageMandate/PersonalData.php: public function getEmail()
lib/Payone/Api/Request/Parameter/Vauthorization/PersonalData.php: public function getEmail()
lib/Zend/Gdata/App/Extension/Person.php: public function getEmail()
lib/Zend/Gdata/Extension/Who.php: public function getEmail()
lib/Zend/Service/ReCaptcha/MailHide.php: public function getEmail()
lib/Zend/View/Helper/Gravatar.php: public function getEmail()

You wont find
getEmail()definition because it doesn't exist.As you can see in the piece of code you are sharing,
$customeris an instance of aVarien_Object. That class is defined inlib\Varien\Object.php.If you peek there, you'll see that the method isn't defined either... but that's because for better or worse Magento takes advantage of PHP's magic methods.
When a non-existing method is called on this
$customerinstance,__call()is executed instead.This is the method definition for
Varien_Object::_call():From here on, the logic is pretty simple. Since
$methodwill begetEmail, the first branch of the switch will be executed, and$keywill be got from the method name (skipping the first three characters, since they must necessarily be "get", "set", "uns", or "has") and in this case it'll become "email".