Stay organized with collections
Save and categorize content based on your preferences.
When you send mail using the Mail API,
there are some restrictions on the headers that you can use and the types of
files you can attach.
Optional headers
An outgoing email has headers that provide details about the message, such as
the sender, recipient, date, and subject. Each header has a name and a value.
You can also include the following headers in an outgoing email; for security
purposes, other headers are not allowed:
In-Reply-To
List-Id
List-Unsubscribe
On-Behalf-Of
References
Resent-Date
Resent-From
Resent-To
Mail with attachments
An outgoing email message can have file attachments. Each attachment has a
filename and file data. The file data can come from any source, such as an
application data file or the datastore.
Filename extensions that are prohibited
As a security measure to protect against viruses, email attachments cannot use
the following filename extensions, and ZIP files cannot contain files with the
following filename extensions:
ade
adp
bat
chm
cmd
com
cpl
exe
hta
ins
isp
jse
lib
mde
msc
msp
mst
pif
scr
sct
shb
sys
vb
vbe
vbs
vxd
wsc
wsf
wsh
Attachments and Multipurpose Internet Mail Extensions (MIME) types
The MIME type of an attachment is determined from the file's extension. The MIME
type identifies the type of content that is being sent, and can determine how
that data is transferred.
The following is a list of MIME types and their corresponding filename
extensions. You are not limited to these extensions, but if you use an unknown
extension, App Engine will assign it the MIME type application/octet-stream.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-04 UTC."],[[["\u003cp\u003eThe Mail API allows sending emails with certain restrictions on allowed headers, including \u003ccode\u003eIn-Reply-To\u003c/code\u003e, \u003ccode\u003eList-Id\u003c/code\u003e, \u003ccode\u003eList-Unsubscribe\u003c/code\u003e, \u003ccode\u003eOn-Behalf-Of\u003c/code\u003e, \u003ccode\u003eReferences\u003c/code\u003e, \u003ccode\u003eResent-Date\u003c/code\u003e, \u003ccode\u003eResent-From\u003c/code\u003e, and \u003ccode\u003eResent-To\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eOutgoing emails can have file attachments, but certain filename extensions like \u003ccode\u003e.exe\u003c/code\u003e, \u003ccode\u003e.bat\u003c/code\u003e, and \u003ccode\u003e.vbs\u003c/code\u003e are prohibited for security reasons.\u003c/p\u003e\n"],["\u003cp\u003eThe MIME type of an attachment, which determines how the content is handled, is automatically inferred from the file extension, and if the extension is unknown, it will default to \u003ccode\u003eapplication/octet-stream\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eA wide range of MIME types and their corresponding file extensions are supported, covering various document, audio, image, and video formats.\u003c/p\u003e\n"],["\u003cp\u003eThis API is supported for first generation runtimes, and information on upgrading to second generation runtimes is provided.\u003c/p\u003e\n"]]],[],null,["# Mail with headers or attachments\n\nGo Java PHP Python\n\nWhen you send mail using the [Mail API](/appengine/docs/standard/services/mail),\nthere are some restrictions on the headers that you can use and the types of\nfiles you can attach.\n| This API is supported for first-generation runtimes and can be used when [upgrading to corresponding second-generation runtimes](/appengine/docs/standard/\n|\n| /services/access). If you are updating to the App Engine runtime, refer to the [Upgrade to second-generation runtimes]() page to learn about your migration options for legacy bundled services.\n\nOptional headers\n----------------\n\nAn outgoing email has headers that provide details about the message, such as\nthe sender, recipient, date, and subject. Each header has a name and a value.\nYou can also include the following headers in an outgoing email; for security\npurposes, other headers are not allowed:\n\n- In-Reply-To\n- List-Id\n- List-Unsubscribe\n- On-Behalf-Of\n- References\n- Resent-Date\n- Resent-From\n- Resent-To\n\nMail with attachments\n---------------------\n\nAn outgoing email message can have file attachments. Each attachment has a\nfilename and file data. The file data can come from any source, such as an\napplication data file or the datastore.\n\n### Filename extensions that are prohibited\n\nAs a security measure to protect against viruses, email attachments cannot use\nthe following filename extensions, and ZIP files cannot contain files with the\nfollowing filename extensions:\n\n- ade\n- adp\n- bat\n- chm\n- cmd\n- com\n- cpl\n- exe\n- hta\n- ins\n- isp\n- jse\n- lib\n- mde\n- msc\n- msp\n- mst\n- pif\n- scr\n- sct\n- shb\n- sys\n- vb\n- vbe\n- vbs\n- vxd\n- wsc\n- wsf\n- wsh\n\n### Attachments and Multipurpose Internet Mail Extensions (MIME) types\n\nThe MIME type of an attachment is determined from the file's extension. The MIME\ntype identifies the type of content that is being sent, and can determine how\nthat data is transferred.\n\nThe following is a list of MIME types and their corresponding filename\nextensions. You are not limited to these extensions, but if you use an unknown\nextension, App Engine will assign it the MIME type `application/octet-stream`."]]