templateless/templateless

通过仅使用代码发送优雅的电子邮件来更快地发货

v0.1.0-alpha.4 2024-03-24 15:52 UTC

README

Templateless

通过将电子邮件视为代码来更快地发货 🚀

网站获取您的API密钥Twitter

Latest Version Build Status Monthly Downloads X (formerly Twitter) Follow

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

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

✨ 功能

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

🚀 开始使用

在项目的根目录中,通过 Composer 需要此包。

composer require templateless/templateless

然后您可以将类导入到您的应用程序中

use Templateless\Templateless;

🔑 获取您的API密钥

以下示例需要API密钥 ⬇️

Get Your API Key

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

👩‍💻 快速示例

发送注册确认电子邮件只需这样做

<?php

require 'vendor/autoload.php';

use Templateless\Content;
use Templateless\Email;
use Templateless\EmailAddress;
use Templateless\Templateless;

try {
    $content = Content::builder()
        ->text("Hi, please **confirm your email**:")
        ->button("Confirm Email", "https://your-company.com/signup/confirm?token=XYZ")
        ->build();

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

    Templateless::new("<YOUR_API_KEY>")
        ->send($email);
} catch (\Exception $e) {
    echo $e;
}

示例 文件夹中还有更多示例 ✨

注意

🚧 SDK 尚不稳定。 此API可能会随着新功能的添加而更改。请关注仓库中的 变更日志 中的更改。

🏗 调试

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

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

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

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

🔳 组件

通过进行函数调用以编程方式创建电子邮件。无需处理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();
按钮

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

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

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

Content::builder()
  ->image(
    "https://placekitten.com/300/200",  // where the image is hosted
    "https://example.com",              // [optional] link url, if you want it to be clickable
    300,                                // [optional] width
    200,                                // [optional] height
    "Alt text",                         // [optional] alternate text
  )
  ->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([
    new SocialItem(Service::WEBSITE, "https://example.com"),
    new SocialItem(Service::EMAIL, "username@example.com"),
    new SocialItem(Service::PHONE, "123-456-7890"), // `tel:` link
    new SocialItem(Service::FACEBOOK, "Username"),
    new SocialItem(Service::YOUTUBE, "ChannelID"),
    new SocialItem(Service::TWITTER, "Username"),
    new SocialItem(Service::X, "Username"),
    new SocialItem(Service::GITHUB, "Username"),
    new SocialItem(Service::INSTAGRAM, "Username"),
    new SocialItem(Service::LINKEDIN, "Username"),
    new SocialItem(Service::SLACK, "Org"),
    new SocialItem(Service::DISCORD, "Username"),
    new SocialItem(Service::TIKTOK, "Username"),
    new SocialItem(Service::SNAPCHAT, "Username"),
    new SocialItem(Service::THREADS, "Username"),
    new SocialItem(Service::TELEGRAM, "Username"),
    new SocialItem(Service::MASTODON, "@Username@example.com"),
    new SocialItem(Service::RSS, "https://example.com/blog"),
  ])
  ->build();
在浏览器中查看

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

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

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

Content::builder()
  ->view_in_browser(Some("Read Email in Browser".to_string()))
  ->build();
存储徽章

通过存储徽章链接到您的移动应用

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

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

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

// url
Content::builder()
  ->qr_code("https://example.com")
  ->build();

// email
Content::builder()
  ->component(QrCode::email("user@example.com"))
  ->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::cryptocurrencyAddress(Cryptocurrency::BITCOIN, "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"))
  ->build();

// you can also encode any binary data
Content::builder()
  ->component(new QrCode(implode(array_map(function($byte) { return chr($byte); }, [1, 2, 3]))))
  ->build();
签名

生成的签名可以添加到您的电子邮件中,以增加一点个性。这将使用几种可用的字体之一嵌入图像和自定义文本

// signature with a default font
Content::builder()
  ->signature("John Smith")
  ->build();

// signature with a custom font
Content::builder()
  ->component("John Smith", SignatureFont::REENIE_BEANIE)
  ->build();

以下是可用的字体

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

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

$header = Collection::builder() // header of the email
  ->text("Smaller text")
  ->build();

$content = Content::builder() // body of the email
  ->text("Normal text")
  ->build();

目前有2种主题可供选择:Theme::UNSTYLEDTheme::SIMPLE

$content = Content::builder()
  ->theme(Theme::SIMPLE)
  ->text("Hello world")
  ->build();

🤝 贡献

  • 欢迎贡献
  • 为这个仓库加星标以获得更多曝光 <3

📫 联系我们

🍻 许可证

MIT