Privacy basics - Thunderbird
From MozillaZine Knowledge Base
By default, Thunderbird blocks remote images and other content in messages from people you don't know. This protects your privacy because spammers can verify your email address by detecting if you viewed a remote image in a message from them. Its also possible to embed an executable (malware) in images.
When you receive a message with remote images, Thunderbird will display an alert stating that remote images have been blocked, and the images in the message body will be replaced with simple place-holders (screenshot). If you do want to view the remote images—for example, if you subscribe to an e-mail newsletter that regularly includes remote images—all you need to do is click the "Show Remote Content" button that appears to the right of the alert message. Older versions of Thunderbird used different names for that button such as "Show Images" or "Load Images".
Thunderbird 1.5 defaulted to loading remote images from people who are in your Personal Address Book. Thunderbird 2.0 and later versions block all remote images by default. You can display remote images whenever you read a message from a specific sender by clicking on "Always load remote images from ..." in the e-mail message, as shown below:
This used to add an entry to the address book that had either "Allow remote content" or "Allow remote images in HTML mail" checked for the specific sender. Recent versions store this information in permissions.sqlite and content-prefs.sqlite instead. You can modify that information using Tools -> Options -> Privacy -> Mail Content -> Exceptions.
If you can not see any remote images check that View -> Message Body As is set to "Original HTML". "Simple HTML" and "Plain Text" do not show remote images.
Its possible to display all images from any sender, though its not recommended since malware can be embedded in images, and spammers will be able to verify your e-mail address. If you want to do this use the Config editor to toggle the preference mailnews.message_display.disable_remote_image to false.
A better alternative would be to use the Config editor to create a mail.trusteddomains setting that specifies what e-mail domains it should automatically display remote images for. This is much easier than having to specify each email address, but you're taking the risk that you won't get any messages with a spoofed From: header in one of those domains. The setting contains a list of domains separated by commas, with no wild cards, white space or subdomains allowed. This change won't take effect until you restart Thunderbird.
If you can never see remote images because the "Show Remote Images" button is always missing check that permissions.default.image is set to 1 using the config editor.
Unfortunately, mail.trusteddomains broke in Thunderbird 31 when they added "Implement separate whitelist for addresses/domains allowed to load remote content/images for email", and they decided not to fix it .   
The Display Contact Photo add-on by default uses photos from the address book but its options has a "Remote photosâ€ tab with a â€œEnable Gravatarsâ€ setting. Gravatar lets you provide a avatar image that many web sites, blogs and some email clients will use. Gravatars are loaded from the Gravatar web-server using a URL containing an MD5 hash of the associated email address. Libravator is a similar service which uses open source software.
Somebody could easily tie your identity to other web sites that use your gravatar, and might be able to harvest your email address. "The entire reason Gravatar offers their service is to collect internet usage data across multiple sites. It is not offered free out of the goodness of their heart. The entire purpose of the service is to analyze the way YOU navigate the internet."   
Show All Body Parts
It's possible a image is hidden due to the message being badly structured (nothing to do with privacy). The Show All Body Parts add-on can workaround this. It adds a View -> Message Body As -> All Body Parts command. While that will workaround the problem it is not something you want to use by default due to its side effects.
HTML message converted to plain text
If you send a HTML message with an image (either embedded or on a web server) from one of your accounts to another account it will become a plain text message with no images if the contact's properties has "Prefer to receive messages formatted as: Plain text". The same problem might occur if you send the message to somebody else and their email client has similar settings.