emailondeck logo

You are
the
GREATEST

 
 
API Access?
Advanced Features?
EmailOnDeck PRO
 

Insightful Articles:

Enhance your privacy at cryptocurrency exchanges with a temporary email address
December. 15th 2017
 
3 things you can use a temporary email generator for.
February. 11th 2016
 
Using a disposable email address during your travels.
March. 10th 2017
 
Temporary Email for Bay Area FasTrak Violation
September. 10th 2020
 
GoDaddy's _domainconnect DNS fail
November. 7th 2016
 
Understanding and Leveraging the Power of DKIM: The Key to Email Authentication and Security
January. 10th 2023
 

Understanding Email Attachments: How Files are Encoded and Transferred

Guest Author:  Jennifer Radcliff
Jennifer Radcliff photo

Files transmitted with an email message are known as email attachments. They essentially serve as additional information that the sender wants to convey with the recipient and are added to the email.

The sender must first choose the file from their computer or other device before they may attach it to an email. The "attach" or "add attachment" button or link in the email composing window is typically clicked to accomplish this. The sender can then pick the file by navigating to its location on their computer or other device.

After being chosen, the file will be added as an attachment to the email. The email's recipient will be able to see that it has an attachment and will have the option to download it by clicking on it. The recipient's computer or other device will download the attachment, which may then be opened with the proper software.

It's crucial to remember that both the recipient's email server and the email provider have size restrictions on emails and their attachments. The email may not be sent or may be rejected by the recipient's email server if the total size of the email including its attachments exceeds this limit. In this situation, the sender might have to email the attachments separately or transfer the files using a file-sharing service like Google Drive or Dropbox.

The technical details...

When you attach a file to an email, the file is not transmitted separately but rather becomes a part of the message itself. A file is attached to an email by first being encoded into a format that can be sent over the Internet and then by being added to the email message.

The "multipurpose internet mail extensions" (MIME) standard is one of the most often used ways to encrypt a file for attachment to an email. As part of an email message, MIME is a set of standards that specify how various forms of content, such as text, photos, audio, and video, can be encoded and transferred over the Internet.

Depending on the type of file being attached, a file must first be encoded into a certain MIME type before it can be added to an email using MIME. An image file might be encoded as "image/jpeg" or "image/png," but a text file might be encoded as "text/plain." The encrypted file is then included in the email as part of the "body" of the message.

When an email is sent, the entire message—including any attached files—is transferred over the Internet to the email server of the recipient. The attached file is decoded and made visible to the user as soon as the receiver opens the email in their email client (such as Outlook, Gmail, etc.).

Ways you can encode attachments

The MIME standard is one of the most often used ways to encrypt a file for attachment to an email. As part of an email message, MIME is a set of standards that specify how various forms of content, such as text, photos, audio, and video, can be encoded and transferred over the Internet.

Depending on the type of file being attached, a file must first be encoded into a certain MIME type before it can be added to an email using MIME. The following MIME types are frequently used to encode files for email attachments:

  • Text files: "text/plain"
  • HTML files: "text/html"
  • Microsoft Word documents: "application/msword"
  • PDF files: "application/pdf"
  • Images (e.g. JPEG, PNG, GIF): "image/jpeg", "image/png", "image/gif"
  • Audio files (e.g. MP3, WAV): "audio/mpeg", "audio/x-wav"
  • Video files (e.g. MP4, AVI): "video/mp4", "video/x-msvideo"

Email attachments may also utilize Base64 encoding or another encoding technique. The most popular way for encoding email attachments is MIME, though.

There are numerous different encoding techniques besides MIME that can be used to attach files to emails. Encoding in Base64 is one of these techniques.

By using base64 encoding, binary data (such a file) can be represented as a string of ASCII letters. Since most email systems can only send ASCII characters, this enables the data to be sent over the Internet as part of an email message.

The Base64 encoding algorithm is used to transform a file into a string of ASCII characters before attaching it to an email. Then, as part of the email's "body," the encoded string is included. The recipient's email client decodes the Base64-encoded string back into the original file when they receive the email, displaying it to the user.

You can also attach files to emails using UUencode and BinHex, among other encoding techniques. The widespread use of MIME as the industry standard for email attachment encoding, however, has made these techniques less popular in modern times.

But what about UUencode?

UUencode, short for "Unix-to-Unix encoding," is a technique for converting binary data (such as a file) into ASCII text so that it can be sent over the Internet or other systems that can only handle ASCII character transfer. Although it was initially created for Unix computers, it has also been applied to other platforms.

A file is initially separated into a number of blocks of similar size before being UU encoded (usually 45 or 64 bytes). Then, each block is encoded with a particular encoding algorithm into a string of ASCII letters. A single encoded string is created by concatenating the encoded blocks that have emerged.

Similar to Base64 encoding, UUencode enables the transmission of binary data as ASCII text. In contrast to Base64, UUencode's encoding process is more complicated and results in a longer encoded string for a given file.

Due to the extensive usage of other encoding techniques, including MIME, for email attachments, UUencode is now less frequently employed.

Example code:

import base64 def uuencode(file_path): # Open the file in binary mode with open(file_path, 'rb') as file: # Read the file into a bytes object file_data = file.read() # Encode the file data using base64 encoded_data = base64.b64encode(file_data) # Convert the encoded data to a string encoded_string = encoded_data.decode('ascii') # Calculate the number of blocks needed to encode the file num_blocks = (len(encoded_string) // 64) + 1 # Initialize a list to hold the encoded blocks blocks = [] # Iterate over the encoded string and split it into blocks of 64 characters for i in range(0, len(encoded_string), 64): block = encoded_string[i:i+64] blocks.append(block) # Add the number of blocks to the beginning of the encoded string uuencoded_string = f"{num_blocks}\n" # Add each encoded block to the uuencoded string, preceded by the block's length for block in blocks: block_len = len(block) uuencoded_string += f"{block_len} {block}\n" return uuencoded_string

This function accepts a file path as input and outputs a string that contains the file's UUencoded representation. It initially reads the file into a bytes object before base64 encoding the bytes. The decoded data is then separated into blocks of 64 characters and made into a string. The final UUencoded string is produced by adding the number of blocks and the length of each block to the beginning of the encoded text.

If you want to utilize this method, you can provide it with an argument that looks like this:

uuencoded_string = uuencode('/path/to/file.txt')

After that, the uuencoded string can be appended to an email message's body and sent to the recipient. When the email is received, the recipient can reassemble the original file by decoding the UUencoded string with a UUdecode function.

What about BinHex?

BinHex, which stands for "binary-to-hexadecimal," is a technique for converting binary data (such as a file) into a string of hexadecimal characters that can be sent over networks that can only receive ASCII characters. Although it was created initially for Macintosh systems, it has also been applied to other platforms.

A file is first separated into a number of blocks of similar size before being BinHexed (usually 45 or 64 bytes). Then, each block is encoded with a particular encoding algorithm into a string of hexadecimal characters. A single encoded string is created by concatenating the encoded blocks that have emerged.

Similar to Base64 and UUencode, BinHex encoding techniques allow binary data to be conveyed as ASCII text. In contrast to Base64 or UUencode, BinHex has a more intricate encoding process and generates a longer encoded text for a given file.

Due to the extensive usage of other encoding techniques, including MIME, for email attachments, BinHex is now less frequently utilized.

Example code:

def binhex(file_path): # Open the file in binary mode with open(file_path, 'rb') as file: # Read the file into a bytes object file_data = file.read() # Initialize a list to hold the encoded blocks blocks = [] # Iterate over the file data and split it into blocks of 64 bytes for i in range(0, len(file_data), 64): block = file_data[i:i+64] blocks.append(block) # Initialize the BinHex encoded string binhex_string = ": " # Iterate over the blocks and encode each one for block in blocks: # Convert each byte in the block to a 2-digit hexadecimal string hex_block = [hex(b)[2:].zfill(2) for b in block] # Concatenate the hexadecimal strings into a single string hex_string = ''.join(hex_block) # Add the hexadecimal string to the BinHex encoded string, preceded by its length binhex_string += f"{len(hex_string)} {hex_string}\n" # Add the end-of-data marker to the BinHex encoded string binhex_string += ": " return binhex_string

This function accepts a file path as input and outputs a string that contains the file's binary-hexadecimal representation. The data is divided into blocks of 64 bytes after the file has been read into a bytes object. After that, it turns each byte in the block into a 2-digit hexadecimal string and joins the strings together to form a single string. The beginning of the string is extended by the length of the hexadecimal string, and the resulting string is then appended to the BinHex encoded string. The BinHex encoded string is finished by adding the end-of-data marker.

If you want to utilize this method, you can provide it with an argument that looks like this:

binhex_string = binhex('/path/to/file.txt')

The recipient can then receive the email message by adding the generated binhex string to the body. When the email is received, the recipient can rebuild the original file by decoding the BinHex string using a BinHex decoder.

Hopefully you've learn something new about email attachments. There's a lot things going on behind the scenes when you are drag & dropping your files and photos into your email!

 
 
SSL and TLS certified