# SendGrid Mail

> SendGrid v3 mail send request with personalizations, content, and recipients.

- Name: `sendgrid-mail`
- Categories: sendgrid
- Detail page: https://open-types.dev/types/sendgrid-mail

## Install

```bash
# Types only
npx shadcn add @open-types/sendgrid-mail

# Types + Zod v4 validators
npx shadcn add @open-types/sendgrid-mail-zod

# Types + real-world examples
npx shadcn add @open-types/sendgrid-mail-examples
```

## Types

```typescript
export interface SendGridEmailAddress {
  email: string;
  name?: string;
}

export interface SendGridPersonalization {
  to: SendGridEmailAddress[];
  cc?: SendGridEmailAddress[];
  bcc?: SendGridEmailAddress[];
  subject?: string;
}

export interface SendGridContent {
  type: string;
  value: string;
}

export interface SendGridMailRequest {
  personalizations: SendGridPersonalization[];
  from: SendGridEmailAddress;
  reply_to?: SendGridEmailAddress;
  subject: string;
  content: SendGridContent[];
}
```

## Zod validator

```typescript
import * as z from "zod";
import type {
  SendGridContent,
  SendGridEmailAddress,
  SendGridMailRequest,
  SendGridPersonalization,
} from "../types/sendgrid-mail";

export const sendGridEmailAddressSchema = z.object({
  email: z.string(),
  name: z.string().optional(),
}) satisfies z.ZodType<SendGridEmailAddress>;

export const sendGridPersonalizationSchema = z.object({
  to: z.array(sendGridEmailAddressSchema),
  cc: z.array(sendGridEmailAddressSchema).optional(),
  bcc: z.array(sendGridEmailAddressSchema).optional(),
  subject: z.string().optional(),
}) satisfies z.ZodType<SendGridPersonalization>;

export const sendGridContentSchema = z.object({
  type: z.string(),
  value: z.string(),
}) satisfies z.ZodType<SendGridContent>;

export const sendGridMailRequestSchema = z.object({
  personalizations: z.array(sendGridPersonalizationSchema),
  from: sendGridEmailAddressSchema,
  reply_to: sendGridEmailAddressSchema.optional(),
  subject: z.string(),
  content: z.array(sendGridContentSchema),
}) satisfies z.ZodType<SendGridMailRequest>;

export type {
  SendGridContent,
  SendGridEmailAddress,
  SendGridMailRequest,
  SendGridPersonalization,
} from "../types/sendgrid-mail";
```

## Examples

```typescript
// Source: https://docs.sendgrid.com/api-reference/mail-send/mail-send
// Captured: 2026-05
import type {
  SendGridEmailAddress,
  SendGridPersonalization,
  SendGridContent,
  SendGridMailRequest,
} from "../types/sendgrid-mail";

const from = { email: "no-reply@example.com", name: "Open Types" } as const satisfies SendGridEmailAddress;
const customer = { email: "customer@example.com", name: "Jenny Rosen" } as const satisfies SendGridEmailAddress;

export const sendGridEmailAddressExamples = {
  withName: from,
  noName: { email: "alerts@example.com" } satisfies SendGridEmailAddress,
  customer,
} as const;

const personalizationSingle = {
  to: [customer],
  subject: "Your receipt",
} as const satisfies SendGridPersonalization;

export const sendGridPersonalizationExamples = {
  single: personalizationSingle,
  withCcAndBcc: {
    to: [customer],
    cc: [{ email: "team@example.com" }],
    bcc: [{ email: "compliance@example.com" }],
    subject: "Your receipt",
  } satisfies SendGridPersonalization,
  multipleTo: {
    to: [customer, { email: "support@example.com" }],
    subject: "Weekly update",
  } satisfies SendGridPersonalization,
} as const;

const contentText = { type: "text/plain", value: "Thanks for your order." } as const satisfies SendGridContent;
const contentHtml = {
  type: "text/html",
  value: "<p>Thanks for your <strong>order</strong>.</p>",
} as const satisfies SendGridContent;

export const sendGridContentExamples = {
  text: contentText,
  html: contentHtml,
} as const;

export const sendGridMailRequestExamples = {
  minimal: {
    personalizations: [personalizationSingle],
    from,
    subject: "Your receipt",
    content: [contentText],
  } satisfies SendGridMailRequest,
  multipart: {
    personalizations: [personalizationSingle],
    from,
    reply_to: { email: "support@example.com", name: "Open Types Support" },
    subject: "Your receipt",
    content: [contentText, contentHtml],
  } satisfies SendGridMailRequest,
  marketingBatch: {
    personalizations: [
      sendGridPersonalizationExamples.multipleTo,
      { to: [{ email: "vip@example.com", name: "VIP" }], subject: "VIP exclusive" },
    ],
    from,
    subject: "Weekly update",
    content: [contentHtml],
  } satisfies SendGridMailRequest,
} as const;
```
