如何通过电子邮件发送ApostropheCMS联系人表单提交内容?

时间:2018-12-03 02:08:32

标签: apostrophe-cms

我根据以下文档创建了联系表单模块:https://apostrophecms.org/docs/tutorials/intermediate/forms.html

提交工作和提交的表单显示在“联系表单”管理菜单项下。

我还想为每个提交生成一封电子邮件到收件人的电子邮件地址。 撇号-提交小工具表示我可以override the beforeInsert method to send email, if desired.

但是,我不确定应该在哪里覆盖此方法。

是否应该在 /lib/modules/contact-form/index.js beforeInsert方法内添加self.submit方法?

或者,我应该创建 apostrophe-pieces-submit-widgets 的项目级副本,然后在其中覆盖beforeInsert方法(我觉得这可能也是 全局,因此不理想)?

最后,我应该涉及撇号电子邮件吗?

1 个答案:

答案 0 :(得分:3)

我在这里的答案假设您实际上是在使用apostrophe-pieces-submit-widgets。因此,到目前为止,您不必编写太多代码。您已经有一个Pieces模块,我们将其称为products,并制作了一个products-submit-widgets扩展了apostrophe-pieces-submit-widgets的Submit Widgets模块。好,很好。让我们讨论一下如何处理剩下的发送电子邮件的方式。

beforeInsert方法有目的地完全不做任何事情,因为这是您在项目级代码中做“额外的事情”的机会。

要覆盖该方法,请创建lib/modules/products-submit-widgets/index.js(如果尚未创建)。根据{{​​1}}的文档,您可能已经包含带有addFieldsextend等的文件。

现在您的代码如下所示:

apostrophe-pieces-submit-widgets

现在,在项目级别module.exports = { // ALL OF YOUR EXISTING CONFIGURATION OF THE products-submit-widgets // MODULE STILL GOES HERE, then... construct: function(self, options) { self.beforeInsert = function(req, piece, callback) { return self.email(req, 'emailSubmission', { piece: piece }, { // can also specify from and other // valid properties for nodemailer messages here to: 'admin@example.com', subject: 'A new submission was received' }, callback); }; } } 中,创建一个lib/modules/my-pieces-module-name-submit-widgets/views文件并按如下所示填充它:

emailSubmission.html

到目前为止一切顺利!但是,为了使<h4>A new submission was received</h4> A new submission was received from {{ piece.someFieldOrOther }}. It contains this information: {{ piece.someOtherField }} {{ piece.yetAnotherField }} {{ piece.etc }} 方法起作用,您确实需要配置self.email模块。如果您已经在Linux服务器上安装了电子邮件传递代理,则基本配置可能看起来像这样:

apostrophe-email

但是,有关该信息的更多完整信息,请参见sending email from your Apostrophe project。如果您使用幼稚的配置,您的电子邮件可能会被视为垃圾邮件。如果您不打算使用Amazon Simple Email Service或Postmark之类的服务,并且您的流量很小,则可以将nodemailer配置为通过有效的gmail帐户发送消息,而无需进行过多工作。

希望这会有所帮助!将其添加为撇号件提交微件模块的可选内置功能将是一个很好的PR。