gog2002x: Not sure what you mean by HTML
Are you sure your emails don't contain the code by itself?
Well, some time in the late 1990s or early 2000s someone got the "brilliant" idea to (ab)use the email system to send messages that look like pure text but in fact are complete Webpages, requiring the email client to include a (simplified) web browser and therefore all that comes with it, like scripting and attack vectors, spoofed links, tracking pixels / images, cookies, etc. . Today, probably noone knows that emails initially were and still
can be raw text with no formatting (called "plain text"). That's what the settings in your mail program are about "compose mail as plain text" and stuff. This pest has been spread because mail programs started to default to HTML composition and thus had to also default to read HTML mails, so noone could easily tell the difference and gradually awareness and knowledge waned. Just like, were it not for Linux, command line interfaces are all but forgotten save for some nerds, while they used to be the norm way back.
HTML mails are either sent unencoded, so one can view the "page source" by saving the message and opening it in a text editor, or BASE64 encoded, which needs to be decoded first in order to then see the HTML markup. From the markup, one can of course find the promo code, but you'd be surprised how much data is in the markup that serves no purpose other than arranging the (usually scarce) actual content, that you need to wade through to actually find the one single relevant line. Unless that itself is sent as an image, which in the mail is transferred as an attachment like all other fancy images, and that itself needs to be BASE64 decoded to be viewed in an image viewer. This is something one can do for sport or when it's unavoidable, but not as a regular part of reading mails.