@ basenative/notify
使用HTML模板、应用内通知和SMTP/SendGrid/Resend传输发送电子邮件
部分 BaseNative 生态系统——基于信号的web运行时,基于原生HTML。
安装
npm install @basenative/notify
快速入门
import {
renderEmail,
createEmailSender,
createSmtpTransport,
} from '@basenative/notify';
const transport = createSmtpTransport({
host: 'smtp.example.com',
port: 587,
auth: { user: '[email protected]', pass: process.env.SMTP_PASS },
});
const sender = createEmailSender(transport);
const template = `
<h1>Hello, {{ name }}!</h1>
<p>Your account has been created. <a href="{{ link }}">Get started</a></p>
`;
const { html, text } = renderEmail(template, {
name: 'Alice',
link: 'https://example.com/onboarding',
});
await sender.send({
from: '[email protected]',
to: '[email protected]',
subject: 'Welcome!',
html,
text,
});
应用内通知
import { createNotificationCenter } from '@basenative/notify';
const notifications = createNotificationCenter();
notifications.add({ type: 'info', message: 'Your report is ready.' });
notifications.add({ type: 'error', message: 'Payment failed.', persistent: true });
// Read all active notifications
const all = notifications.getAll();
notifications.dismiss(all[0].id);
API
电子邮件
renderEmail(template, data)-插值{{ variable }}HTML模板中的占位符。返回{ html, text }哪里text是源自HTML的纯文本版本。createEmailSender(transport)-创建绑定到传输的发件人。返回{ send(options) }选项在哪里?{ to, from, subject, html, text? }.
逃脱
每一个 {{ variable }} value默认为html转义,使用相同的
escapeAttr 助手 @basenative/server SSR模板的使用
(@basenative/runtime/shared/escape)。一个包含 <script> 或者
其他标记呈现为惰性文本,而不是可执行的HTML:
renderEmail('<p>Hi {{ name }}</p>', { name: '<script>alert(1)</script>' });
// => { html: '<p>Hi <script>alert(1)</script></p>', ... }
要插入受信任的HTML而不转义,请将值包装在 raw():
import { raw } from '@basenative/runtime/shared/escape';
renderEmail('<div>{{ body }}</div>', { body: raw('<strong>Bold</strong>') });
// => { html: '<div><strong>Bold</strong></div>', ... }
仅通过 raw() 在你信任的HTML周围——它完全禁止转义
该值,在占位符出现的每个位置({{ }} 插值
这里不知道它是落在文本节点还是属性值中,所以
选择退出逃避选择退出两者)。
传输
createSmtpTransport(options)—通过SMTP协议发送邮件。选项:host,port,secure,auth: { user, pass }.createSendGridTransport(options)-通过SendGrid API发送电子邮件。选项:apiKey.createResendTransport(options)-通过Resend API发送电子邮件。选项:apiKey.
应用内通知
createNotificationCenter()-创建应用内通知商店。.add(notification)—添加通知。字段:type('info','warn','error','success'),message,persistent?,metadata?。返回创建的通知,其中包含自动生成的id..dismiss(id)-按ID删除通知。.getAll()-返回所有活动通知。.clear()-删除所有通知。
许可证
apache - 2.0