---
id: gh-extension-email
name: "extension-email"
url: https://skills.yangsir.net/skill/gh-extension-email
author: caffeinelabs
domain: ai-agent-external-interaction
tags: ["email-sending", "transactional-email", "backend-service", "notifications", "automation"]
install_count: 27500
rating: 4.60 (120 reviews)
github: https://github.com/caffeinelabs/skills/tree/main/skills/extension-email
---

# extension-email

> 此技能支持从后端发送服务性/事务性邮件，如订单确认和通知。它提供了一个简化的接口，帮助开发者轻松集成邮件发送功能，确保关键信息及时触达用户，提升用户体验和系统可靠性。

**Stats**: 27,500 installs · 4.6/5 (120 reviews)

## Before / After 对比

### 邮件服务集成效率

**Before**:

在没有这个技能之前，开发者需要手动集成第三方邮件服务，编写大量代码处理 API 调用、错误处理和收件人管理，这不仅耗时，还容易引入错误，延缓了功能上线。

**After**:

该 Skill 提供了一个简洁的接口，开发者只需调用一个函数即可发送服务性邮件，极大地简化了集成过程，减少了开发工作量和潜在错误，加速了功能部署。

| Metric | Before | After | Change |
|---|---|---|---|
| 开发集成时间 | 8小时 | 0.5小时 | -93.75% |

## Readme

# Email — Service/Transactional
Service/transactional email extension for [Caffeine AI](https://caffeine.ai?utm_source=caffeine-skill&utm_medium=referral).

## Overview

This skill adds support for sending service and transactional emails from the backend canister. Use `sendServiceEmail` for order confirmations, notifications, and similar one-off emails.

# Backend

This component is for sending service/transactional emails. 

There is the prefabricated module `mo:caffeineai-email/emailClient.mo` which cannot be modified.

- Use the sendServiceEmail function. 
- Each recipient is sent an individual email
- It returns a SendResult which is #ok if the email is sent successfully otherwise #err(error) with the error text. 

```mo:caffeineai-email/emailClient.mo
module {
  public type SendResult = {
    #ok;
    #err : Text;
  };

  public func sendServiceEmail(
    fromUsername : Text,
    recipients : [Text],
    subject : Text,
    htmlBody : Text,
  ) : async SendResult;
};
```

Usage for `sendServiceEmail`:

```motoko filepath=src/backend/main.mo
import Runtime "mo:core/Runtime";
import EmailClient "mo:caffeineai-email/emailClient";

actor {
  public func sendOrderConfirmationEmail(recipientEmailAddress : Text, username : Text, orderReference : Text) : async () {
    let result = await EmailClient.sendServiceEmail(
      "no-reply",
      [recipientEmailAddress],
      "Order " # orderReference # " confirmed",
      "Hello " # username # ",\nYour order " # orderReference # " has been confirmed. Your items will ship tomorrow.",
    );
    switch (result) {
      case (#ok) {};
      case (#err(error)) {
        Runtime.trap("Failed to send order confirmation email: " # error);
      };
    };
  };
};
```


---
*Source: https://skills.yangsir.net/skill/gh-extension-email*
*Markdown mirror: https://skills.yangsir.net/api/skill/gh-extension-email/markdown*