#send-email #email-template #template #api-key

templateless

通过仅用代码发送优雅的电子邮件来提高发货速度

5 个版本

0.1.0-alpha.82024年3月19日
0.1.0-alpha.72024年3月5日
0.1.0-alpha.62024年2月27日
0.1.0-alpha.42024年1月30日

#50 in 电子邮件

Download history 153/week @ 2024-04-09

472 每月下载次数

MIT 许可证

34KB
741

Templateless

通过将电子邮件视为代码来提高发货速度 🚀

网站获取您的 API 密钥Twitter


Latest version Github Actions Docs Crates.io Total Downloads X (formerly Twitter) Follow

Templateless 允许您快速轻松地生成和发送事务性电子邮件,以便您专注于构建您的产品。

它非常适合 SaaS、Web 应用程序、移动应用程序、脚本和您需要以编程方式发送电子邮件的任何地方。

✨ 特点

  • 👋 设计上反对拖放 — 电子邮件是您代码的一部分
  • 组件作为代码 — 函数调用变为电子邮件 HTML 组件
  • 💻 任何语言的 SDK — 使用您最喜欢的 编程语言
  • 🔍 精心测试 — 让我们担心电子邮件客户端兼容性
  • 💌 使用您最喜欢的 ESP — Amazon SES、SendGrid、Mailgun + 更多
  • 💪 电子邮件基础设施 — 速率限制、重试、计划 + 更多
  • 批量发送 — 使用一个 API 调用发送 1 封或 1,000 封电子邮件

🚀 开始使用

通过 Cargo 安装

cargo add templateless

或手动添加到您的 Cargo.toml

[dependencies]
templateless = "0.1"

🔑 获取您的 API 密钥

以下示例需要 API 密钥 ⬇️

Get Your API Key

  • 每月 3,000 封电子邮件
  • 所有流行的电子邮件提供商集成
  • 立即开始发送

👩‍💻 快速示例

这就是发送注册确认电子邮件的全部过程

use templateless::{Content, Email, EmailAddress, Templateless, Result};

#[tokio::main]
async fn main() -> Result<()> {
    let content = Content::builder()
        .text("Hi, please **confirm your email**:")
        .button("Confirm Email", "https://your-company.com/signup/confirm?token=XYZ")
        .build()?;

    let email = Email::builder()
        .to(EmailAddress::new("<YOUR_CUSTOMERS_EMAIL_ADDRESS>"))
        .subject("Confirm your signup 👋")
        .content(content)
        .build()?;

    let _result = Templateless::new("<YOUR_API_KEY>")
        .send(email)
        .await?;

    Ok(())
}

更多 Rust 示例在 示例 文件夹中 ✨

[!NOTE] 🚧 SDK 尚未稳定。 随着更多功能的添加,此 API 可能会更改。请关注仓库中的 变更日志 中的更改。

🏗 调试

您可以通过在仪表板中激活 测试模式 来生成 测试 API 密钥。通过使用这些密钥,您将能够查看完全渲染的电子邮件,而无需实际发送它们。

当您在SDK中使用测试API密钥时,尝试发送电子邮件时,您的日志中将显示以下输出

Templateless [TEST MODE]: Emailed user@example.com, preview: https://tmpl.sh/ATMxHLX4r9aE

预览链接将显示电子邮件,但您必须登录到无模板才能查看。

🔳 组件

电子邮件是通过函数调用来程序化构建的。无需处理HTML或拖放构建器。

以下所有组件都可以混合搭配,以创建动态电子邮件

文本 / Markdown

文本组件允许您插入一个段落。每个段落支持基本的Markdown

  • 粗体文本:**粗体文本**

  • 斜体文本:_斜体文本_

  • 链接:[链接文本](https://example.com)

  • 也是一个链接:<https://example.com>

  • 标题 (h1-h6)

    • #大标题
    • ######小标题
  • 无序列表

    - item one
    - item two
    - item three
    
  • 有序列表

    1. item one
    1. item two
    1. item three
    
Content::builder()
  .text("## Thank you for signing up")
  .text("Please **verify your email** by [clicking here](https://example.com/confirm?token=XYZ)")
  .build()?;
链接

链接组件添加锚点标签。这与带有Markdown编写的链接的文本组件相同

Content::builder()
  .link("Confirm Email", "https://example.com/confirm?token=XYZ")
  .build()?;
按钮

按钮也可以用作行动号召。按钮颜色通过仪表板的应用程序颜色设置。

Content::builder()
  .button("Confirm Email", "https://example.com/confirm?token=XYZ")
  .build()?;
图片

图片组件将链接到电子邮件中的图片。请注意,出于隐私原因,许多电子邮件客户端将阻止自动加载图片。

// Simple
Content::builder()
  .image("https://placekitten.com/300/200")
  .build()?;

// Clickable & with attributes
Content::builder()
  .component(
    Image::new("https://placekitten.com/300/200")
      .url("https://example.com")
      .width(200)
      .height(100)
      .alt("Alt Text")
      .build()?
  )
  .build()?;

仅需要 src 参数;其他都是可选的。

如果您已开启“图片优化”

  1. 您的图片将被缓存并由我们的CDN分发,以加快加载速度。缓存不会过期。如果您想重新缓存,只需在图片URL的末尾添加一个查询参数即可。

  2. 图片将被转换为电子邮件客户端广泛支持的格式。以下图片格式将自动处理

    • Jpeg
    • Png
    • Gif
    • WebP
    • Tiff
    • Ico
    • Bmp
    • Svg
  3. 免费账户的最大图片大小为5MB,付费账户为20MB。

  4. 如果您想指定 width 和/或 height(它们是可选的)。请注意,如果图片太大,将会缩小以适应电子邮件主题。

一次性密码

OTP组件专为显示临时密码和重置码而设计。

Content::builder()
  .text("Here's your **temporary login code**:")
  .otp("XY78-2BT0-YFNB-ALW9")
  .build()?;
社交图标

您可以通过指定用户名轻松添加带有链接的社交图标。通常,此组件位于电子邮件的页脚中。

这些都是支持的平台

Content::builder()
  .socials(&[
    SocialItem::new(Service::Website, "https://example.com"),
    SocialItem::new(Service::Email, "[email protected]"),
    SocialItem::new(Service::Phone, "123-456-7890"), // `tel:` link
    SocialItem::new(Service::Facebook, "Username"),
    SocialItem::new(Service::YouTube, "ChannelID"),
    SocialItem::new(Service::Twitter, "Username"),
    SocialItem::new(Service::X, "Username"),
    SocialItem::new(Service::GitHub, "Username"),
    SocialItem::new(Service::Instagram, "Username"),
    SocialItem::new(Service::LinkedIn, "Username"),
    SocialItem::new(Service::Slack, "Org"),
    SocialItem::new(Service::Discord, "Username"),
    SocialItem::new(Service::TikTok, "Username"),
    SocialItem::new(Service::Snapchat, "Username"),
    SocialItem::new(Service::Threads, "Username"),
    SocialItem::new(Service::Telegram, "Username"),
    SocialItem::new(Service::Mastodon, "@[email protected]"),
    SocialItem::new(Service::Rss, "https://example.com/blog"),
  ])
  .build()?;
在浏览器中查看

如果您希望收件人能够在浏览器中阅读电子邮件,您可以添加“在浏览器中查看”组件,该组件将自动生成链接。通常,此组件位于电子邮件的页眉或页脚中。

您可以提供链接的文本。如果没有提供,则使用默认值:“在浏览器中查看”

知道链接的人将能够查看电子邮件。

Content::builder()
  .view_in_browser()
  .build()?;
存储徽章

通过商店徽章链接到您的移动应用程序

Content::builder()
  .store_badges(&[
    StoreBadgeItem::new(StoreBadge::AppStore, "https://apps.apple.com/us/app/example/id1234567890"),
    StoreBadgeItem::new(StoreBadge::GooglePlay, "https://play.google.com/store/apps/details?id=com.example"),
    StoreBadgeItem::new(StoreBadge::MicrosoftStore, "https://apps.microsoft.com/detail/example"),
  ])
  .build()?;
二维码

您还可以即时生成二维码。它们将以图片形式显示在电子邮件中。

以下是所有支持的数据类型

// URL
Content::builder()
  .qr_code("https://example.com")
  .build()?;

// Email
Content::builder()
  .component(QrCode::email("[email protected]"))
  .build()?;

// Phone
Content::builder()
  .component(QrCode::phone("123-456-7890"))
  .build()?;

// SMS / Text message
Content::builder()
  .component(QrCode::sms("123-456-7890"))
  .build()?;

// Geo coordinates
Content::builder()
  .component(QrCode::coordinates(37.773972, -122.431297))
  .build()?;

// Crypto address (for now only Bitcoin and Ethereum are supported)
Content::builder()
  .component(QrCode::cryptocurrency_address(Cryptocurrency::Bitcoin, "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"))
  .build()?;

// You can also encode any binary data
Content::builder()
  .component(QrCode::new(&[1, 2, 3]))
  .build()?;
签名

生成的签名可以添加到您的电子邮件中,以增添一丝个人风格。这将使用几种可用的字体之一,将您的自定义文本与图片嵌入

// Signature with a default font
Content::builder()
  .signature("John Smith")
  .build()?;

// Signature with a custom font
Content::builder()
  .component(Signature::new("John Smith", Some(SignatureFont::ReenieBeanie)))
  .build()?;

以下是可用的字体

签名不应超过64个字符。仅允许字母数字字符和大多数常见符号。


组件可以放置在电子邮件的标题、正文和页脚中。标题和页脚的样式通常与正文略有不同(例如,文本较小)。

let header = Header::builder() // Header of the email
  .text("Smaller text")
  .build()?;

let content = Content::builder() // Body of the email
  .text("Normal text")
  .build()?;

目前有2种主题可供选择:Theme::UnstyledTheme::Simple

let content = Content::builder()
  .theme(Theme::Simple)
  .text("Hello world")
  .build()?;

🤝 贡献

  • 欢迎贡献
  • star此仓库以获得更多曝光度 <3

📫 联系我们

🍻 许可证

MIT

依赖项

~7–21MB
~281K SLoC