Documentation
SDK client
Envoyer un mail

Envoi de courrier

Il existe deux méthodes possibles pour envoyer du courrier : client.mail.create et client.mail.sendDraft.
La méthode create s'applique aux mails qui n'ont pas été sauvegardés au préalable, par exemple : l'utilisateur écrit un mail et l'envoie immédiatement. La méthode sendDraft mail, comme son nom l'indique, concerne les mails qui ont déjà été sauvegardés en tant que brouillon. Par exemple : un utilisateur écrit un courrier mais l'envoie plus tard.

Envoyer le courrier en une seule fois

La méthode secrecyClient.mail.create effectue en fait deux opérations sous le capot. La première opération consiste à créer un brouillon de courrier et à l'envoyer. Cette méthode est utilisée lorsque vous voulez envoyer le courrier directement, sans avoir à le sauvegarder en tant que brouillon. Elle prend un objet NewMail auquel sont transmis l'objet, le corps, les destinataires, le replyToId et les fichiers de l'expéditeur du courrier, ainsi qu'un message personnalisé optionnel en second argument. Elle renvoie le SentMail envoyé et lève une erreur si le courrier n'a pas pu être envoyé : l'appel doit donc être encadré par un try/catch.

mail.ts
type NewMail = {
  subject: string;
  body: string;
  replyToId: string | null;
  recipients: string[];
  senderFiles: {
    id: string;
    name: string;
  }[];
};
const sendMail = async (mail: NewMail): Promise<SentMail | null> => {
  // First we need to check if the secrecyClient is available
  if (!secrecyClient) {
    return null;
  }
 
  try {
    // send a new mail
    const sentMail = await secrecyClient.mail.create({
      body: mail.body,
      senderFiles: mail.senderFiles,
      recipients: mail.recipients,
      subject: mail.subject,
      replyToId: mail.replyToId,
    });
    return sentMail;
  } catch (error) {
    console.error(error);
    return null;
  }
};

Envoyer un brouillon

La méthode secrecyClient.mail.sendDraft est conçue pour envoyer un courrier électronique à partir d'un brouillon existant. Elle prend l'identifiant du brouillon en premier argument et un message personnalisé optionnel en second, et renvoie un booléen indiquant si le brouillon a été envoyé avec succès (true) ou non (false).

mail.ts
const sendDraftMail = async ({
  draftMailId,
  customMessage,
}: {
  draftMailId: string;
  customMessage?: string;
}): Promise<boolean> => {
  // First we need to check if the secrecyClient is available
  if (!secrecyClient) {
    return false;
  }
  try {
    // send a draft mail, the custom message is optional
    const isSent = await secrecyClient.mail.sendDraft(
      draftMailId,
      customMessage
    );
    return isSent;
  } catch (error) {
    console.error(error);
    return false;
  }
};

Envoyer un courrier avec des pièces jointes

Pour envoyer un courrier avec des pièces jointes, vous devez combiner deux méthodes. Tout d'abord, vous devez téléverser le fichier dans le cloud, le chiffrer et obtenir l'identifiant du fichier. Pour ce faire, nous avons besoin de la méthode secrecyClient.cloud.uploadDataInCloud, qui assure le chiffrement et le stockage dans le cloud. Elle renvoie le NodeFull créé, dont la propriété currentDataId est l'identifiant de fichier nécessaire pour construire l'objet que nous attacherons à la propriété senderFiles dans notre objet newMail. Vous pouvez ensuite envoyer le courrier avec le fichier en pièce jointe. Dans le cas suivant, nous avons utilisé la méthode secrecyClient.mail.create pour envoyer le courrier, mais selon le cas d'utilisation, la méthode secrecyClient.mail.sendDraft peut être utilisée à la place.

mail.ts
export const sendMailWithAttachments = async ({
  file,
  newMail,
}: {
  file: File;
  newMail: NewMail;
}): Promise<SentMail | null> => {
  // First we need to check if the secrecyClient is available
  if (!secrecyClient) {
    return null;
  }
 
  try {
    // upload the file to the cloud, encrypt it and get the created node
    const node = await secrecyClient.cloud.uploadDataInCloud({
      data: file,
      name: file.name,
    });
    // the attachment id is the id of the data held by the node
    if (node.currentDataId === null) {
      return null;
    }
    // send the mail with the file attached
    const sentMail = await secrecyClient.mail.create({
      ...newMail,
      senderFiles: [{ id: node.currentDataId, name: file.name }],
    });
    return sentMail;
  } catch (error) {
    console.error('sendMailWithAttachments', error);
    return null;
  }
};