templateless / templateless
通过仅使用代码发送优雅的电子邮件来更快地发货
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.8
Requires (Dev)
- phpunit/phpunit: ^10.5
This package is not auto-updated.
Last update: 2024-09-22 18:02:16 UTC
README
通过将电子邮件视为代码来更快地发货 🚀
网站 • 获取您的API密钥 • Twitter
Templateless 允许您快速轻松地生成和发送交易电子邮件,以便您可以专注于构建您的产品。
它非常适合SaaS、Web应用程序、移动应用程序、脚本以及您需要以编程方式发送电子邮件的任何地方。
✨ 功能
- 👋 设计上反拖放 — 电子邮件是您代码的一部分
- ✅ 组件化代码 — 函数调用变为电子邮件HTML组件
- 💻 任何语言的SDK — 使用您最喜欢的 编程语言
- 🔍 精心测试 — 让我们担心电子邮件客户端兼容性问题
- 💌 使用您最喜欢的ESP — Amazon SES、SendGrid、Mailgun + 更多
- 💪 电子邮件基础设施 — 速率限制、重试、调度 + 更多
- ⚡ 批量发送 — 通过一个API调用发送1封或1000封电子邮件
🚀 开始使用
在项目的根目录中,通过 Composer 需要此包。
composer require templateless/templateless
然后您可以将类导入到您的应用程序中
use Templateless\Templateless;
🔑 获取您的API密钥
以下示例需要API密钥 ⬇️
- 每月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
参数;其他都是可选的。
如果您已启用“图片优化”
-
您的图片将通过我们的CDN缓存和分发,以加快加载速度。缓存不会过期。如果您想重新缓存,只需在图片URL的末尾添加查询参数即可。
-
图片将被转换为电子邮件客户端广泛支持的格式。以下图片格式将自动处理
- Jpeg
- Png
- Gif
- WebP
- Tiff
- Ico
- Bmp
- Svg
-
免费账户的最大图片大小为5MB,付费账户为20MB。
-
如果您想指定
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();
以下是可用的字体
SignatureFont::REENIE_BEANIE
预览 →SignatureFont::MEOW_SCRIPT
预览 →SignatureFont::CAVEAT
预览 →SignatureFont::ZEYADA
预览 →SignatureFont::PETEMOSS
预览 →
签名不应超过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::UNSTYLED
和Theme::SIMPLE
$content = Content::builder() ->theme(Theme::SIMPLE) ->text("Hello world") ->build();
🤝 贡献
- 欢迎贡献
- 请为这个仓库加星标以获得更多曝光 <3
📫 联系我们
-
如有客户支持问题,请随时发送电子邮件至 github@templateless.com
-
有建议或想提供反馈?这是我们的联系方式
- 对于功能请求,请开始讨论
- 发现了一个错误? 打开一个问题!
- 打招呼 @Templateless 👋