---
description: Capacitor plugin to open the native email composer prefilled with recipients, subject, body, and attachments. Supports Android, iOS, and the web (via mailto:).
title: Capacitor Mail Composer Plugin - Capawesome
image: https://capawesome.io/docs/assets/images/social/sdks/capacitor/mail-composer.png
---

<!doctype html> 

[Skip to content ](#capacitor-mail-composer-plugin) 

[📲 Introducing **Build Sharing** — get your builds onto testers' devices with a link & QR code. No account required. ](/blog/share-mobile-app-builds-with-testers/) 

* [ SDKs ](/docs/sdks/)
* [ Formbricks ](/docs/sdks/capacitor/formbricks/)
* [ Geocoder ](/docs/sdks/capacitor/geocoder/)
* [ Google Sign-In ](/docs/sdks/capacitor/google-sign-in/)
* [ Grafana Faro ](/docs/sdks/capacitor/grafana-faro/)
* [ Gyroscope ](/docs/sdks/capacitor/gyroscope/)
* [ Haptics ](/docs/sdks/capacitor/haptics/)
* [ Home Indicator ](/docs/sdks/capacitor/home-indicator/)
* [ In-App Browser ](/docs/sdks/capacitor/in-app-browser/)
* [ Install Referrer ](/docs/sdks/capacitor/install-referrer/)
* [ Intercom ](/docs/sdks/capacitor/intercom/)
* [ Intune ](/docs/sdks/capacitor/intune/)
* [ Keep Awake ](/docs/sdks/capacitor/keep-awake/)
* [ libSQL ](/docs/sdks/capacitor/libsql/)
* [ Light Sensor ](/docs/sdks/capacitor/light-sensor/)
* [ Live Update ](/docs/sdks/capacitor/live-update/)
* [ Localization ](/docs/sdks/capacitor/localization/)
* Mail Composer [ Mail Composer ](/docs/sdks/capacitor/mail-composer/)
* [ Web ](#web)
* [ Configuration ](#configuration)
* [ Usage ](#usage)
* [ API ](#api)
* [ Type Aliases ](#type-aliases)
* [ Platform Support ](#platform-support)
* [ FAQ ](#faq)
* [ Related Plugins ](#related-plugins)
* [ Newsletter ](#newsletter)
* [ Changelog ](#changelog)
* [ License ](#license)
* [ Managed Configurations ](/docs/sdks/capacitor/managed-configurations/)
* [ Maps Launcher ](/docs/sdks/capacitor/maps-launcher/)
* [ Media Session ](/docs/sdks/capacitor/media-session/)
* [ ML Kit ](/docs/sdks/capacitor/mlkit/)
* [ Navigation Bar ](/docs/sdks/capacitor/navigation-bar/)
* [ Network ](/docs/sdks/capacitor/network/)
* [ NFC ](/docs/sdks/capacitor/nfc/)
* [ Node.js ](/docs/sdks/capacitor/nodejs/)
* [ OAuth ](/docs/sdks/capacitor/oauth/)
* [ Passkeys ](/docs/sdks/capacitor/passkeys/)
* [ Password Autofill ](/docs/sdks/capacitor/password-autofill/)
* [ PDF Generator ](/docs/sdks/capacitor/pdf-generator/)
* [ PDF Viewer ](/docs/sdks/capacitor/pdf-viewer/)
* [ Pedometer ](/docs/sdks/capacitor/pedometer/)
* [ Permissions ](/docs/sdks/capacitor/permissions/)
* [ Phone Dialer ](/docs/sdks/capacitor/phone-dialer/)
* [ Photo Editor ](/docs/sdks/capacitor/photo-editor/)
* [ Photo Manipulator ](/docs/sdks/capacitor/photo-manipulator/)
* [ PixLive ](/docs/sdks/capacitor/pixlive/)
* [ PostHog ](/docs/sdks/capacitor/posthog/)
* [ Printer ](/docs/sdks/capacitor/printer/)
* [ Privacy Screen ](/docs/sdks/capacitor/privacy-screen/)
* [ Proximity Sensor ](/docs/sdks/capacitor/proximity-sensor/)
* [ Purchases ](/docs/sdks/capacitor/purchases/)
* [ RealtimeKit ](/docs/sdks/capacitor/realtimekit/)
* [ Root Detection ](/docs/sdks/capacitor/root-detection/)
* [ Screen Brightness ](/docs/sdks/capacitor/screen-brightness/)
* [ Screen Orientation ](/docs/sdks/capacitor/screen-orientation/)
* [ Screen Reader ](/docs/sdks/capacitor/screen-reader/)
* [ Screenshot ](/docs/sdks/capacitor/screenshot/)
* [ Secure Preferences ](/docs/sdks/capacitor/secure-preferences/)
* [ Settings Launcher ](/docs/sdks/capacitor/settings-launcher/)
* [ Shake ](/docs/sdks/capacitor/shake/)
* [ Silent Mode ](/docs/sdks/capacitor/silent-mode/)
* [ SIM ](/docs/sdks/capacitor/sim/)
* [ SMS Composer ](/docs/sdks/capacitor/sms-composer/)
* [ Speech Recognition ](/docs/sdks/capacitor/speech-recognition/)
* [ Speech Synthesis ](/docs/sdks/capacitor/speech-synthesis/)
* [ Share Target ](/docs/sdks/capacitor/share-target/)
* [ Square Mobile Payments ](/docs/sdks/capacitor/square-mobile-payments/)
* [ SQLite ](/docs/sdks/capacitor/sqlite/)
* [ Superwall ](/docs/sdks/capacitor/superwall/)
* [ System WebView ](/docs/sdks/capacitor/system-webview/)
* [ Tauri ](/docs/sdks/capacitor/tauri/)
* [ Text Interaction ](/docs/sdks/capacitor/text-interaction/)
* [ Text Zoom ](/docs/sdks/capacitor/text-zoom/)
* [ Thermal State ](/docs/sdks/capacitor/thermal-state/)
* [ Toast ](/docs/sdks/capacitor/toast/)
* [ Torch ](/docs/sdks/capacitor/torch/)
* [ Vault ](/docs/sdks/capacitor/vault/)
* [ Volume ](/docs/sdks/capacitor/volume/)
* [ Wallet ](/docs/sdks/capacitor/wallet/)
* [ Wifi ](/docs/sdks/capacitor/wifi/)
* [ YouTube Player ](/docs/sdks/capacitor/youtube-player/)
* [ Zip ](/docs/sdks/capacitor/zip/)
* [ Cordova ](/docs/sdks/cordova/)
* [ Cloud ](/docs/cloud/)
* [ Integrations ](/docs/cloud/live-updates/integrations/)
* Concepts
* Reference
* [ Troubleshooting ](/docs/cloud/live-updates/troubleshooting/)
* [ FAQ ](/docs/cloud/live-updates/faq/)
* [ Native Builds ](/docs/cloud/native-builds/)
* [ Set Up Environments ](/docs/cloud/native-builds/environments/)
* [ Overwrite Native Configurations ](/docs/cloud/native-builds/native-configurations/)
* [ Auto-Increment Build Numbers ](/docs/cloud/native-builds/auto-incrementing-build-numbers/)
* [ Configure the Web Build Script ](/docs/cloud/native-builds/web-build-script/)
* [ Build from a Monorepo ](/docs/cloud/native-builds/monorepo/)
* [ Use pnpm, Yarn, or bun ](/docs/cloud/native-builds/package-managers/)
* [ Install Private npm Packages ](/docs/cloud/native-builds/npm-private-registry/)
* [ Override the Java Version ](/docs/cloud/native-builds/override-java-version/)
* [ Custom iOS Provisioning Profiles ](/docs/cloud/native-builds/custom-ios-provisioning-profiles/)
* [ Build without Git ](/docs/cloud/native-builds/build-without-git/)
* [ Access Git Behind a Firewall ](/docs/cloud/native-builds/firewall-access/)
* [ Integrations ](/docs/cloud/native-builds/integrations/)
* Reference
* [ Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [ FAQ ](/docs/cloud/native-builds/faq/)
* [ App Store Publishing ](/docs/cloud/app-store-publishing/)
* [ Submit a Build ](/docs/cloud/app-store-publishing/submit-a-build/)
* [ Submit Automatically After a Build ](/docs/cloud/app-store-publishing/submit-automatically/)
* [ Troubleshooting ](/docs/cloud/app-store-publishing/troubleshooting/)
* [ FAQ ](/docs/cloud/app-store-publishing/faq/)
* [ Automations ](/docs/cloud/automations/)
* [ Reference ](/docs/cloud/automations/reference/)
* [ Troubleshooting ](/docs/cloud/automations/troubleshooting/)
* [ FAQ ](/docs/cloud/automations/faq/)
* [ Assist ](/docs/cloud/assist/)
* [ CLI ](/docs/cloud/cli/)
* APIs and SDKs
* [ Webhooks ](/docs/cloud/webhooks/)
* [ Integrations ](/docs/cloud/integrations/)
* Notifications
* Account
* [ Organization ](/docs/cloud/organizations/)
* [ Two-Factor Enforcement ](/docs/cloud/organizations/two-factor-authentication/)
* [ Audit Logs ](/docs/cloud/organizations/audit-logs/)
* [ Billing ](/docs/cloud/organizations/billing/)
* [ License Keys ](/docs/cloud/license-keys/)
* [ AI ](/docs/ai/)
* [ Insiders ](/docs/insiders/)
* [ Billing & Plans ](/docs/insiders/billing-and-plans/)
* [ FAQ ](/docs/insiders/faq/)
* [ License ](https://capawesome.io/legal/eula/)
* [ Support ](/docs/support/)
* [ Contributing ](/docs/contributing/)
* Contributing code
* [ Code of Conduct ](/docs/contributing/code-of-conduct/)
* [ Questions ](https://docs.github.com/en/discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion#creating-a-discussion)
* [ Blog ](/blog/)
* Categories

* [ Web ](#web)
* [ Configuration ](#configuration)
* [ Usage ](#usage)
* [ API ](#api)
* [ Type Aliases ](#type-aliases)
* [ Platform Support ](#platform-support)
* [ FAQ ](#faq)
* [ Related Plugins ](#related-plugins)
* [ Newsletter ](#newsletter)
* [ Changelog ](#changelog)
* [ License ](#license)

# Capacitor Mail Composer Plugin[¶](#capacitor-mail-composer-plugin "Permanent link")

Capacitor plugin to open the native email composer.

[ ![Deliver Live Updates to your Capacitor app with Capawesome Cloud](../../../assets/external/cloud.capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.69628c3f.png) ](https://cloud.capawesome.io/) 

## Features[¶](#features "Permanent link")

* ✉️ **Compose**: Open the native email composer prefilled with recipients, subject and body.
* 📎 **Attachments**: Attach one or more files to the email.
* ✅ **Availability**: Check whether the device is able to compose and send emails.
* 🌐 **Cross-platform**: Supports Android, iOS and the web (via `mailto:`).
* 🤝 **Compatibility**: Works alongside the [File Picker](https://capawesome.io/docs/sdks/capacitor/file-picker/), [Phone Dialer](https://capawesome.io/docs/sdks/capacitor/phone-dialer/) and [SMS Composer](https://capawesome.io/docs/sdks/capacitor/sms-composer/) plugins.
* 📦 **CocoaPods & SPM**: Supports CocoaPods and Swift Package Manager for iOS.
* 🔁 **Up-to-date**: Always supports the latest Capacitor version.

Missing a feature? Just [open an issue](https://github.com/capawesome-team/capacitor-plugins/issues) and we'll take a look!

## Use Cases[¶](#use-cases "Permanent link")

The Mail Composer plugin is typically used whenever an app wants the user to send an email, for example:

* **Support and feedback**: Open a prefilled email to your support address with a subject and body so users can reach out with one tap.
* **Bug reports**: Attach log files or screenshots to a bug report email using the `attachments` option.
* **Sharing content**: Let users share content from your app via email with prefilled recipients, subject, and body.
* **Invitations**: Prefill invitation emails with CC and BCC recipients that the user only needs to review and send.

## Compatibility[¶](#compatibility "Permanent link")

| Plugin Version | Capacitor Version | Status         |
| -------------- | ----------------- | -------------- |
| 0.x.x          | \>=8.x.x          | Active support |

## Installation[¶](#installation "Permanent link")

You can use our **AI-Assisted Setup** to install the plugin. Add the [Capawesome Skills](https://github.com/capawesome-team/skills) to your AI tool using the following command:

`[](#%5F%5Fcodelineno-0-1)npx skills add capawesome-team/skills --skill capacitor-plugins
`

Then use the following prompt:

`` [](#%5F%5Fcodelineno-1-1) Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome/capacitor-mail-composer` plugin in my project.
 ``

If you prefer **Manual Setup**, install the plugin by running the following commands and follow the platform-specific instructions below:

`[](#%5F%5Fcodelineno-2-1)npm install @capawesome/capacitor-mail-composer
[](#%5F%5Fcodelineno-2-2)npx cap sync
`

### Android[¶](#android "Permanent link")

#### Attachments[¶](#attachments "Permanent link")

To attach files, the plugin uses the [FileProvider](https://developer.android.com/reference/androidx/core/content/FileProvider) that Capacitor already registers for your app (authority `${applicationId}.fileprovider`). Make sure that the directories your attachments are stored in are covered by the `res/xml/file_paths.xml` resource of your app. Otherwise, the `composeMail(...)` method will reject with an error.

### Web[¶](#web "Permanent link")

On the web, the plugin builds a `mailto:` URL and opens it. This has the following limitations:

* Attachments are **not** supported and cause the `composeMail(...)` method to reject.
* HTML bodies are **not** supported. The body is always sent as plain text.
* The overall URL length is limited, so long bodies may be truncated.

## Configuration[¶](#configuration "Permanent link")

No configuration required for this plugin.

## Usage[¶](#usage "Permanent link")

The following examples show how to check whether the device can send emails and how to open the native email composer.

### Check whether the device can send emails[¶](#check-whether-the-device-can-send-emails "Permanent link")

Before opening the composer, check whether the device is able to compose and send emails. On iOS, this returns `true` only if a mail account is configured. On Android, it returns `true` if a mail app is installed. On the web, it always returns `true`:

`[](#%5F%5Fcodelineno-3-1)import { MailComposer } from '@capawesome/capacitor-mail-composer';
[](#%5F%5Fcodelineno-3-2)
[](#%5F%5Fcodelineno-3-3)const canComposeMail = async () => {
[](#%5F%5Fcodelineno-3-4)  const { canCompose } = await MailComposer.canComposeMail();
[](#%5F%5Fcodelineno-3-5)  return canCompose;
[](#%5F%5Fcodelineno-3-6)};
`

### Compose an email[¶](#compose-an-email "Permanent link")

Open the native email composer prefilled with recipients, subject, and body. The user reviews the email and decides whether to send it. Note that on Android, the returned `status` is always `unknown`:

`[](#%5F%5Fcodelineno-4-1)import { MailComposer } from '@capawesome/capacitor-mail-composer';
[](#%5F%5Fcodelineno-4-2)
[](#%5F%5Fcodelineno-4-3)const composeMail = async () => {
[](#%5F%5Fcodelineno-4-4)  const { status } = await MailComposer.composeMail({
[](#%5F%5Fcodelineno-4-5)    to: ['jane@example.com'],
[](#%5F%5Fcodelineno-4-6)    cc: ['john@example.com'],
[](#%5F%5Fcodelineno-4-7)    subject: 'Hello World',
[](#%5F%5Fcodelineno-4-8)    body: 'This is the body of the email.',
[](#%5F%5Fcodelineno-4-9)  });
[](#%5F%5Fcodelineno-4-10)  return status;
[](#%5F%5Fcodelineno-4-11)};
`

## API[¶](#api "Permanent link")

* [canComposeMail()](#cancomposemail)
* [composeMail(...)](#composemail)
* [Interfaces](#interfaces)
* [Type Aliases](#type-aliases)

### canComposeMail()[¶](#cancomposemail "Permanent link")

`[](#%5F%5Fcodelineno-5-1)canComposeMail() => Promise<CanComposeMailResult>
`

Check whether the device is able to compose and send emails.

On iOS, this returns `true` only if a mail account is configured. On Android, this returns `true` if a mail app is installed. On the web, this always returns `true` (best effort, not verifiable).

**Returns:** `Promise<[CanComposeMailResult](#cancomposemailresult)>`

**Since:** 0.1.0

---

### composeMail(...)[¶](#composemail "Permanent link")

`[](#%5F%5Fcodelineno-6-1)composeMail(options: ComposeMailOptions) => Promise<ComposeMailResult>
`

Open the native email composer prefilled with the provided data.

The user reviews the email and decides whether to send it. The plugin never sends the email itself.

| Param       | Type                                      |
| ----------- | ----------------------------------------- |
| **options** | [ComposeMailOptions](#composemailoptions) |

**Returns:** `Promise<[ComposeMailResult](#composemailresult)>`

**Since:** 0.1.0

---

### Interfaces[¶](#interfaces "Permanent link")

#### CanComposeMailResult[¶](#cancomposemailresult "Permanent link")

| Prop           | Type    | Description                                            | Since |
| -------------- | ------- | ------------------------------------------------------ | ----- |
| **canCompose** | boolean | Whether the device is able to compose and send emails. | 0.1.0 |

#### ComposeMailResult[¶](#composemailresult "Permanent link")

| Prop       | Type                                    | Description                                                                                                                                              | Since |
| ---------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| **status** | [MailComposeStatus](#mailcomposestatus) | The status of the email compose operation. **Note**: On Android, the status is always unknown because the mail intent does not return a reliable result. | 0.1.0 |

#### ComposeMailOptions[¶](#composemailoptions "Permanent link")

| Prop            | Type       | Description                                                                                                                                                                                         | Default | Since |
| --------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ----- |
| **attachments** | string\[\] | The absolute file paths or file:// URIs of the files to attach. Attachments are not supported on the web.                                                                                           |         | 0.1.0 |
| **bcc**         | string\[\] | The email addresses of the blind carbon copy (BCC) recipients.                                                                                                                                      |         | 0.1.0 |
| **body**        | string     | The body of the email.                                                                                                                                                                              |         | 0.1.0 |
| **cc**          | string\[\] | The email addresses of the carbon copy (CC) recipients.                                                                                                                                             |         | 0.1.0 |
| **isHtml**      | boolean    | Whether the body should be interpreted as HTML. **Note**: On Android, HTML is best-effort as many mail apps ignore it. On the web, HTML is not supported and the body is always sent as plain text. | false   | 0.1.0 |
| **subject**     | string     | The subject of the email.                                                                                                                                                                           |         | 0.1.0 |
| **to**          | string\[\] | The email addresses of the primary recipients.                                                                                                                                                      |         | 0.1.0 |

### Type Aliases[¶](#type-aliases "Permanent link")

#### MailComposeStatus[¶](#mailcomposestatus "Permanent link")

The status of an email compose operation.

* `sent`: The email was sent.
* `saved`: The email was saved as a draft.
* `canceled`: The user canceled the operation.
* `unknown`: The status is unknown.

`'sent' | 'saved' | 'canceled' | 'unknown'`

## Platform Support[¶](#platform-support "Permanent link")

Keep the following platform-specific behavior in mind:

* **Status**: On Android, the `status` returned by `composeMail(...)` is always `unknown` because the mail intent does not return a reliable result. On iOS, the real status is returned via the delegate. On the web, the status is always `unknown`.
* **HTML body**: On Android, the `isHtml` option is best-effort because many mail apps ignore HTML content. On the web, HTML is not supported at all.
* **No mail account**: On iOS, `composeMail(...)` rejects as unavailable if no mail account is configured. Use `canComposeMail(...)` to check upfront.

## FAQ[¶](#faq "Permanent link")

### How is this plugin different from other similar plugins?[¶](#how-is-this-plugin-different-from-other-similar-plugins "Permanent link")

It opens the native email composer prefilled with recipients, subject, body, and CC and BCC, and supports file attachments and HTML bodies through a fully typed API on Android, iOS, and the Web. A `canComposeMail()` check lets you confirm the device can actually send mail before you show the feature, and the user always stays in control of sending. If you only need a plain `mailto:` link, a simpler approach is fine; if you need attachments, rich bodies, and reliable capability detection, this plugin is built for exactly that.

### Does the plugin send the email itself?[¶](#does-the-plugin-send-the-email-itself "Permanent link")

No, the plugin only opens the native email composer prefilled with the provided data. The user reviews the email and decides whether to send it. The email is always sent through the user's own mail app and account.

### Why is the status always `unknown` on Android?[¶](#why-is-the-status-always-unknown-on-android "Permanent link")

On Android, the mail intent does not return a reliable result, so the `status` returned by `composeMail` is always `unknown`. On iOS, the real status (`sent`, `saved`, or `canceled`) is returned. On the web, the status is always `unknown` as well.

### Why does `composeMail` reject on iOS?[¶](#why-does-composemail-reject-on-ios "Permanent link")

On iOS, `composeMail` rejects as unavailable if no mail account is configured on the device. Use `canComposeMail` upfront to check whether the device is able to compose and send emails, and only show your email feature if it returns `true`.

### Why does attaching a file fail on Android?[¶](#why-does-attaching-a-file-fail-on-android "Permanent link")

On Android, the plugin shares attachments through the [FileProvider](https://developer.android.com/reference/androidx/core/content/FileProvider) that Capacitor already registers for your app. If the directory a file is stored in is not covered by the `res/xml/file_paths.xml` resource of your app, `composeMail` rejects with an error. See the [Installation](#installation) section for details.

### Are attachments supported on the web?[¶](#are-attachments-supported-on-the-web "Permanent link")

No, on the web the plugin builds a `mailto:` URL, which cannot carry attachments, so `composeMail` rejects if attachments are provided. Also keep in mind that HTML bodies are not supported on the web and long bodies may be truncated due to the URL length limit.

### Can I send HTML emails?[¶](#can-i-send-html-emails "Permanent link")

Yes, set the `isHtml` option to `true` to have the body interpreted as HTML. On iOS, this is fully supported. On Android, it is best-effort because many mail apps ignore HTML content. On the web, HTML is not supported and the body is always sent as plain text.

## Related Plugins[¶](#related-plugins "Permanent link")

* [File Picker](https://capawesome.io/docs/sdks/capacitor/file-picker/): Let the user select files to attach to an email.
* [Phone Dialer](https://capawesome.io/docs/sdks/capacitor/phone-dialer/): Open the native phone dialer prefilled with a phone number.
* [SMS Composer](https://capawesome.io/docs/sdks/capacitor/sms-composer/): Open the native SMS composer prefilled with recipients and a message body.

## Newsletter[¶](#newsletter "Permanent link")

Stay up to date with the latest news and updates about the Capawesome, Capacitor, and Ionic ecosystem by subscribing to our [Capawesome Newsletter](https://cloud.capawesome.io/newsletter/).

## Changelog[¶](#changelog "Permanent link")

See [CHANGELOG.md](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/mail-composer/CHANGELOG.md).

## License[¶](#license "Permanent link")

See [LICENSE](https://github.com/capawesome-team/capacitor-plugins/blob/main/packages/mail-composer/LICENSE).

July 8, 2026 

Back to top

```json
{"@context": "https://schema.org", "@graph": [{"@type": "TechArticle", "@id": "https://capawesome.io/docs/sdks/capacitor/mail-composer/#article", "headline": "Capacitor Mail Composer Plugin", "name": "Capacitor Mail Composer Plugin", "description": "Capacitor plugin to open the native email composer prefilled with recipients, subject, body, and attachments. Supports Android, iOS, and the web (via mailto:).", "inLanguage": "en", "url": "https://capawesome.io/docs/sdks/capacitor/mail-composer/", "mainEntityOfPage": "https://capawesome.io/docs/sdks/capacitor/mail-composer/", "author": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "publisher": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "about": {"@id": "https://capawesome.io/docs/sdks/capacitor/mail-composer/#software"}}, {"@type": "SoftwareSourceCode", "@id": "https://capawesome.io/docs/sdks/capacitor/mail-composer/#software", "name": "Capacitor Mail Composer Plugin", "description": "Capacitor plugin to open the native email composer prefilled with recipients, subject, body, and attachments. Supports Android, iOS, and the web (via mailto:).", "url": "https://capawesome.io/docs/sdks/capacitor/mail-composer/", "programmingLanguage": "TypeScript", "runtimePlatform": "Capacitor", "codeRepository": "https://github.com/capawesome-team", "author": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}, "publisher": {"@type": "Organization", "name": "Capawesome", "url": "https://capawesome.io", "logo": {"@type": "ImageObject", "url": "https://capawesome.io/assets/images/logo.svg"}}}]}
{"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "How is this plugin different from other similar plugins?", "acceptedAnswer": {"@type": "Answer", "text": "It opens the native email composer prefilled with recipients, subject, body, and CC and BCC, and supports file attachments and HTML bodies through a fully typed API on Android, iOS, and the Web. A canComposeMail() check lets you confirm the device can actually send mail before you show the feature, and the user always stays in control of sending. If you only need a plain mailto: link, a simpler approach is fine; if you need attachments, rich bodies, and reliable capability detection, this plugin is built for exactly that."}}, {"@type": "Question", "name": "Does the plugin send the email itself?", "acceptedAnswer": {"@type": "Answer", "text": "No, the plugin only opens the native email composer prefilled with the provided data. The user reviews the email and decides whether to send it. The email is always sent through the user's own mail app and account."}}, {"@type": "Question", "name": "Why is the status always unknown on Android?", "acceptedAnswer": {"@type": "Answer", "text": "On Android, the mail intent does not return a reliable result, so the status returned by composeMail is always unknown. On iOS, the real status ( sent, saved, or canceled) is returned. On the web, the status is always unknown as well."}}, {"@type": "Question", "name": "Why does composeMail reject on iOS?", "acceptedAnswer": {"@type": "Answer", "text": "On iOS, composeMail rejects as unavailable if no mail account is configured on the device. Use canComposeMail upfront to check whether the device is able to compose and send emails, and only show your email feature if it returns true."}}, {"@type": "Question", "name": "Why does attaching a file fail on Android?", "acceptedAnswer": {"@type": "Answer", "text": "On Android, the plugin shares attachments through the FileProvider that Capacitor already registers for your app. If the directory a file is stored in is not covered by the res/xml/file_paths.xml resource of your app, composeMail rejects with an error. See the Installation section for details."}}, {"@type": "Question", "name": "Are attachments supported on the web?", "acceptedAnswer": {"@type": "Answer", "text": "No, on the web the plugin builds a mailto: URL, which cannot carry attachments, so composeMail rejects if attachments are provided. Also keep in mind that HTML bodies are not supported on the web and long bodies may be truncated due to the URL length limit."}}, {"@type": "Question", "name": "Can I send HTML emails?", "acceptedAnswer": {"@type": "Answer", "text": "Yes, set the isHtml option to true to have the body interpreted as HTML. On iOS, this is fully supported. On Android, it is best-effort because many mail apps ignore HTML content. On the web, HTML is not supported and the body is always sent as plain text."}}], "url": "https://capawesome.io/docs/sdks/capacitor/mail-composer/"}
```
