邮件
email
包允许从 Meteor 应用发送邮件。要使用它,请在终端中运行以下命令将其添加到您的项目中
meteor add email
有两种方法可以设置用于发送电子邮件的包。
首先是设置 MAIL_URL
。服务器从 MAIL_URL
环境变量读取以确定如何发送邮件。MAIL_URL
应引用一个 SMTP 服务器并使用 smtp://USERNAME:PASSWORD@HOST:PORT
或 smtps://USERNAME:PASSWORD@HOST:PORT
格式。如果邮件服务器需要 TLS/SSL(并且不使用 STARTTLS
),则应使用 smtps://
格式(s
代表“安全”),并且在端口 465 上最常见。在升级到 TLS/SSL(使用 STARTTLS
)之前以未加密方式开始的连接通常使用端口 587(并且有时为 25),并且应使用 smtp://
。有关更多信息,请参阅 Nodemailer 文档
其次,如果您使用的是 受支持的服务 之一,您可以在应用设置中这样设置发送选项
{
"packages": {
"email": {
"service": "Mailgun",
"user": "postmaster@meteor.com",
"password": "superDuperPassword"
}
}
}
该包将负责其余的工作。
如果您使用受支持的服务,该包将尝试匹配受支持的服务并使用存储的设置。您可以通过将协议(如
smtp
)切换为服务名称来强制执行此操作。但是,您应该仅将其用作权宜之计,而应正确设置设置。
如果未设置这两个选项,则 Email.send
会将消息输出到标准输出。
包设置仅在 Email v2.2 及更高版本中可用
Email.send仅限服务器
仅限服务器
摘要
使用异步方法发送电子邮件。捕获在无法联系邮件服务器或邮件服务器返回错误时抛出的 Error
。所有字段应匹配 RFC5322 规范。
如果设置了 MAIL_URL
环境变量,则实际发送电子邮件。否则,将电子邮件内容打印到标准输出。
请注意,此包基于 nodemailer,因此在使用 attachments
或 mailComposer
选项时,请务必参考 文档。
参数
源代码名称 | 类型 | 描述 | 必需 |
---|---|---|---|
options | 对象 | 是 |
您必须提供 from
选项,以及 to
、cc
和 bcc
中的至少一个;所有其他选项都是可选的。
Email.send
仅在服务器上有效。以下是如何客户端使用服务器方法调用发送电子邮件的示例。(在实际应用中,您需要小心限制客户端可以发送的电子邮件,以防止您的服务器被垃圾邮件发送者用作中继。)
import { Meteor } from "meteor/meteor";
import { Email } from "meteor/email";
import { check } from "meteor/check";
// Server: Define a method that the client can call.
Meteor.methods({
sendEmail({ to, from, subject, text }) {
// Make sure that all arguments are strings.
check([to, from, subject, text], [String]);
Email.send({ to, from, subject, text });
},
});
import { Meteor } from "meteor/meteor";
// Client: Asynchronously send an email.
Meteor.callAsync("sendEmail", {
to: "Alice <alice@example.com>",
from: "bob@example.com",
subject: "Hello from Meteor!",
text: "This is a test of Email.send.",
});
Email.sendAsync仅限服务器
仅限服务器
摘要
使用异步方法发送电子邮件。捕获在无法联系邮件服务器或邮件服务器返回错误时抛出的 Error
。所有字段应匹配 RFC5322 规范。
如果设置了 MAIL_URL
环境变量,则实际发送电子邮件。否则,将电子邮件内容打印到标准输出。
请注意,此包基于 nodemailer,因此在使用 attachments
或 mailComposer
选项时,请务必参考 文档。
参数
源代码名称 | 类型 | 描述 | 必需 |
---|---|---|---|
options | 对象 | 是 |
sendAsync
仅在服务器上有效。它的行为与 Email.send
相同,但返回一个 Promise。如果您定义了 Email.customTransport
,则 callAsync
方法将返回 customTransport
方法的返回值或 Promise(如果此方法是异步的)。
// Server: Define a method that the client can call.
Meteor.methods({
sendEmail({ to, from, subject, text }) {
// Make sure that all arguments are strings.
check([to, from, subject, text], [String]);
return Email.sendAsync({ to, from, subject, text }).catch((err) => {
// do something with the error
});
},
});
Email.hookSend仅限服务器
仅限服务器
摘要
在发送电子邮件之前运行的钩子。
参数
源代码名称 | 类型 | 描述 | 必需 |
---|---|---|---|
f | 函数 | 接收 Email.send 的参数,并应返回 true 以继续发送电子邮件(或至少尝试后续钩子),或返回 false 以跳过发送。 | 是 |
import { Email } from 'meteor/email'
Email.hookSend(({to}) => {
if (to === 'ceo@company.com') {
console.log(`Let's not send email to the CEO`);
return false;
}
return true;
})
如果您想要:阻止发送某些电子邮件,通过您自己的集成而不是 Meteor 提供的默认集成发送电子邮件,或者对数据执行其他操作,则 hookSend
是一个方便的钩子。如果您想拦截由核心包(如 accounts-password 或其他无法修改电子邮件代码的包)发送的电子邮件,这尤其有用。
钩子函数将接收一个包含 Nodemailer 选项的对象。
Email.customTransport仅限服务器
仅限服务器
摘要
使用您自己的函数覆盖发送函数。
参数
源代码名称 | 类型 | 描述 | 必需 |
---|---|---|---|
f | 函数 | 将接收来自发送函数的选项的函数,并且在 | 是 |
Email.customTransport
仅在 Email v2.2 及更高版本中可用
在某些情况下,您有自己的传输设置,无论是您的邮件服务的 SDK 还是其他内容。这就是 customTransport
发挥作用的地方。如果您设置了此函数,所有发送事件都将传递给它(在运行 hookSend
之后),并带有传递给 send
函数的选项对象以及 packageSettings
键,该键将传递您应用设置中设置的包设置(如果有)。您可以在该函数中执行任何操作,因为它将覆盖原始发送函数。
这是一个使用 Mailgun 的简单示例
import { Email } from 'meteor/email'
import { Log } from 'meteor/logging'
import Mailgun from 'mailgun-js'
Email.customTransport = (data) => {
// `options.packageSettings` are settings from `Meteor.settings.packages.email`
// The rest of the options are from Email.send options
const mailgun = Mailgun({ apiKey: data.packageSettings.mailgun.privateKey, domain: 'mg.mygreatapp.com' })
// Since the data object that we receive already includes the correct key names for sending
// we can just pass it to the mailgun sending message.
mailgun.messages().send(data, (error, body) => {
if (error) Log.error(error)
if (body) Log.info(body)
})
}
请注意,这也会覆盖控制台中消息的开发显示,因此您可能希望在设置此函数时区分生产和开发环境。