---
title: CertificateEmailer
summary: API reference for CertificateEmailer.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-09-24
library: SAIF.Services
reference_type: package
---

# CertificateEmailer

A static helper that composes and sends the standard certificate-of-coverage notification email — a fixed HTML body plus a PDF attachment built from the supplied stream — to a list of recipient addresses, delegating the actual send to an injected `IEmailService`.

## Purpose
- Builds the standard SAIF "Certificate of Coverage" HTML email body, including the SAIF branding image and confidentiality notice.
- Attaches the certificate document (from the given `Stream`) to each outgoing message as a PDF named `CertificateOfCoverage.pdf`.
- Sends one email per address in the recipient list via `IEmailService.SendEmail`, resetting the stream position after each send so it can be reused for the next recipient.

## Context
- Namespace: `SAIF.Services.Policies.Certificates`
- Assembly/package: `SAIF.Services` (packaged inside the `SAIF.SAIFCode.Core` NuGet package).

## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| SendEmailstoStakeHolders | `public static void SendEmailstoStakeHolders(IEmailService emailService, IEnumerable<string> emailAddressList, Stream stream, string emailSubjectLine = "Certificate of Coverage")` | For each address in `emailAddressList`, builds a `MailMessage` from `certs@saif.com` with the fixed HTML body and the given (or default) subject, attaches the stream content as `CertificateOfCoverage.pdf`, sends it through `emailService`, and rewinds the stream to position 0 for reuse. |

## Behavioral notes
- The class carries a `CA1053:StaticHolderTypesShouldNotHaveConstructors` suppression, confirming its intended use is as a static holder despite exposing an implicit public constructor.*
- The HTML body text (SAIF branding, contact number, and confidentiality notice) is hard-coded and identical for every send; only the subject line varies per call.
- Does not dispose the constructed `MailMessage`/`Attachment` objects explicitly; a `CA2000:Dispose objects before losing scope` suppression is present on the method, indicating this is a known, accepted trade-off rather than an oversight.*
- Because the same `stream` is reused across all recipients (with position reset to 0 after each send), callers must not dispose or advance the stream themselves between calls.*

## Constraints and usage notes
- `emailService`, `emailAddressList`, and `stream` are not null-checked inside the method (per the `CA1062` suppressions on the parameters), so callers are responsible for passing valid, non-null arguments.*
- Intended to be invoked by other certificate services (e.g. `CertificateDistributionService`) rather than called directly by UI/controller code.*

> **Note:** Statements marked with * were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with ** could not be confirmed; treat as unknown until verified.

## Sources
- `Services/SAIF.Services/Policies/Certificates/CertificateEmailer.cs`
