> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apollodeploy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Send from the dashboard

> Compose a customer-visible email in Signal and verify its result

Use the dashboard composer for a controlled manual send, an integration smoke check, or a delivery investigation.
Use the API or SMTP for application-driven traffic.

## Requirements

* The active project must contain a verified sending domain.
* Your account must be allowed to send from the project.
* You need at least one valid recipient.
* Use content you are permitted to send to that recipient.

<Steps>
  <Step title="Open the composer">
    Open **Emails** and select the send action.
  </Step>

  <Step title="Add recipients">
    Enter one or more comma-separated addresses.
    Without CC or BCC, Signal treats multiple direct recipients as independent messages so each recipient gets its own status, tracking, and unsubscribe context.
    Keep a fan-out request at or below 50 recipients.
  </Step>

  <Step title="Choose the sender">
    Enter a From address whose domain is verified in this project.
    Use a mailbox name that matches the message purpose, such as `security@auth.company.com`.
  </Step>

  <Step title="Write the message">
    Add a non-empty subject and HTML body.
    Review every link and visible value before sending.
  </Step>

  <Step title="Send and inspect">
    Submit the message, open its detail page, and follow the timeline.
    Do not use the initial accepted state as proof of delivery.
  </Step>
</Steps>

## Dashboard scope

The composer intentionally exposes a focused set of fields.
Use the Email API when you need plain-text content, reply-to, CC, BCC, attachments, tags, metadata, per-message tracking overrides, scheduling, test mode, or idempotency.

## Multiple-recipient behavior

Direct To recipients without CC or BCC fan out into separate Signal messages.
Each message has its own ID and lifecycle.
A request that includes CC or BCC remains one shared message.
A topic or segment audience ID must be the only recipient and cannot be combined with CC or BCC.

<Tip>
  For the first production smoke check, send to an inbox your team controls and inspect both the Signal timeline and the received headers.
</Tip>

## SDK example

After creating an authenticated client with the matching [SDK setup guide](/signal/send-with/sdk-overview),
use the operation for your language or framework.

<CodeGroup dropdown>
  ```typescript TypeScript theme={"dark"}
  const email = await signal.emails.sendEmail(
    {
      from: "hello@mail.company.com",
      to: ["alex@example.com"],
      subject: "Welcome",
      text: "Thanks for joining us.",
    },
    { headers: { Authorization: `Bearer ${process.env.SIGNAL_API_KEY}` } },
  );
  ```

  ```python Python theme={"dark"}
  email = signal.emails.send_email(
      SendEmailRequest(
          from_="hello@mail.company.com",
          to=["alex@example.com"],
          subject="Welcome",
          text="Thanks for joining us.",
      )
  )
  ```

  ```go Go theme={"dark"}
  email, err := client.Emails.SendEmail(ctx, signal.SendEmailRequest{
      From: "hello@mail.company.com",
      To: []string{"alex@example.com"},
      Subject: signal.String("Welcome"),
      Text: signal.String("Thanks for joining us."),
  })
  if err != nil {
      panic(err)
  }
  ```

  ```ruby Ruby theme={"dark"}
  request = ApolloDeploySignalSdk::SendEmailRequest.new(
    from: "hello@mail.company.com",
    to: ["alex@example.com"],
    subject: "Welcome",
    text: "Thanks for joining us."
  )

  email = signal.emails.send_email(body: request)
  ```

  ```ruby Rails theme={"dark"}
  request = ApolloDeploySignalSdkRails::SendEmailRequest.new(
    from: "hello@mail.company.com",
    to: ["alex@example.com"],
    subject: "Welcome",
    text: "Thanks for joining us."
  )

  email = ApolloDeploySignalSdkRails.rails_client.emails.send_email(body: request)
  ```

  ```php PHP / Laravel theme={"dark"}
  $request = new SendEmailRequest();
  $request->from = 'hello@mail.company.com';
  $request->to = ['alex@example.com'];
  $request->subject = 'Welcome';
  $request->text = 'Thanks for joining us.';

  $email = $signal->emails()->sendEmail($request);
  ```

  ```java Java theme={"dark"}
  var request = new SendEmailRequest();
  request.from = "hello@mail.company.com";
  request.to = List.of("alex@example.com");
  request.subject = "Welcome";
  request.text = "Thanks for joining us.";

  var email = signal.emails().sendEmail(request);
  ```

  ```kotlin Kotlin theme={"dark"}
  val email = signal.emails.sendEmail(
      SendEmailRequest(
          from = "hello@mail.company.com",
          to = listOf("alex@example.com"),
          subject = "Welcome",
          text = "Thanks for joining us.",
      ),
  )
  ```

  ```csharp .NET theme={"dark"}
  var email = await signal.Emails.SendEmailAsync(new SendEmailRequest
  {
      From = "hello@mail.company.com",
      To = new List<string> { "alex@example.com" },
      Subject = "Welcome",
      Text = "Thanks for joining us.",
  });
  ```

  ```rust Rust theme={"dark"}
  let email = signal.emails.send_email(&SendEmailRequest {
      from: "hello@mail.company.com".into(),
      to: vec!["alex@example.com".into()],
      subject: Some("Welcome".into()),
      text: Some("Thanks for joining us.".into()),
      cc: None,
      bcc: None,
      reply_to: None,
      html: None,
      tags: None,
      metadata: None,
      idempotency_key: None,
      test_mode: None,
      attachments: None,
      scheduled_at: None,
      delivery_window: None,
      send_time_category: None,
      tracking_settings: None,
  }).await?;
  ```

  ```elixir Elixir theme={"dark"}
  request = %ApolloSignal.Types.SendEmailRequest{
    from: "hello@mail.company.com",
    to: ["alex@example.com"],
    subject: "Welcome",
    text: "Thanks for joining us."
  }

  {:ok, email, _metadata} = ApolloSignal.Client.send_email(client, request)
  ```

  ```swift Swift theme={"dark"}
  let email = try await signal.emails.sendEmail(
      body: SendEmailRequest(
          from: "hello@mail.company.com",
          to: ["alex@example.com"],
          subject: "Welcome",
          text: "Thanks for joining us."
      )
  )
  ```

  ```zig Zig theme={"dark"}
  var recipients = [_][]const u8{"alex@example.com"};
  var emails = client.emails();
  var result = try emails.sendEmail(.{
      .from = "hello@mail.company.com",
      .to = &recipients,
      .subject = "Welcome",
      .text = "Thanks for joining us.",
  }, .{});
  defer result.deinit();

  switch (result) {
      .success => |_| {},
      .api_error => return error.SignalApiError,
  }
  ```
</CodeGroup>
