Skip to content

Commit

Permalink
Merge pull request #102 from GoogleCloudPlatform/mailjet
Browse files Browse the repository at this point in the history
Added requested Mailjet samples.
  • Loading branch information
jmdobry committed Apr 19, 2016
2 parents 7a246e4 + 4f14285 commit f5b4aa9
Show file tree
Hide file tree
Showing 11 changed files with 284 additions and 2 deletions.
4 changes: 3 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ cache:
- appengine/logging/node_modules/
- appengine/loopback/node_modules/
- appengine/mailgun/node_modules/
- appengine/mailjet/node_modules/
- appengine/memcached/node_modules/
- appengine/mongodb/node_modules/
- appengine/parse-server/node_modules/
Expand All @@ -49,7 +50,8 @@ cache:
- appengine/twilio/node_modules/
- appengine/webpack/node_modules/
- appengine/websockets/node_modules/
- computeengine/sendgrid/node_modules/
- bigquery/node_modules/
- computeengine/node_modules/
- datastore/node_modules/
- functions/uuid/node_modules/
- logging/node_modules/
Expand Down
16 changes: 16 additions & 0 deletions appengine/mailjet/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
## Express.js + Mailjet on Google App Engine

> [Mailjet][1] is an all-in-one email service provider.
>
> www.mailjet.com
This sample application demonstrates how to use [Express.js][2] and
[node-mailjet][3] to send transactional email on [Google App Engine][4].

You can also read the [Mailjet documentation][5].

[1]: https://www.mailjet.com/
[2]: http://expressjs.com
[3]: https://github.com/mailjet/mailjet-apiv3-nodejs
[4]: https://cloud.google.com/appengine
[5]: https://dev.mailjet.com/
86 changes: 86 additions & 0 deletions appengine/mailjet/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
// Copyright 2016, Google, Inc.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');

// [START setup]
var Mailjet = require('node-mailjet').connect(
process.env.MJ_APIKEY_PUBLIC,
process.env.MJ_APIKEY_PRIVATE
);
// [END setup]

var app = express();

// Setup view engine
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// Parse form data
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

// [START index]
app.get('/', function(req, res) {
res.render('index');
});
// [END index]

// [START hello]
app.post('/hello', function(req, res, next) {
var options = {
// From
FromEmail: '[email protected]',
FromName: 'Mailjet Demo',
// To
Recipients: [{ Email: req.body.email }],
// Subject
Subject: 'Hello World!',
// Body
'Text-part': 'Mailjet on Google App Engine with Node.js',
'Html-part': '<h3>Mailjet on Google App Engine with Node.js</h3>'
};

var request = Mailjet.post('send').request(options);

request
.on('success', function (response, body) {
console.log(response.statusCode, body);
// Render the index route on success
return res.render('index', {
sent: true
});
})
.on('error', function (err) {
return next(err);
});
});
// [END hello]

// [START server]
var server = app.listen(
process.env.PORT || 8080,
'0.0.0.0',
function () {
var address = server.address().address;
var port = server.address().port;
console.log('App listening at http://%s:%s', address, port);
console.log('Press Ctrl+C to quit.');
}
);
// [END server]

23 changes: 23 additions & 0 deletions appengine/mailjet/app.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Copyright 2016, Google, Inc.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# [START app_yaml]
runtime: nodejs
vm: true
env_variables:
MJ_APIKEY_PUBLIC: <your-mj-apikey-public>
MJ_APIKEY_PRIVATE: <your-mj-apikey-private>

skip_files:
- ^(.*/)?.*/node_modules/.*$
# [END app_yaml]
21 changes: 21 additions & 0 deletions appengine/mailjet/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"name": "appengine-mailjet",
"description": "An example of using Mailjet in Node.js on Google App Engine.",
"version": "0.0.1",
"private": true,
"license": "Apache Version 2.0",
"author": "Google Inc.",
"engines": {
"node": "~4.2"
},
"scripts": {
"start": "node app.js",
"deploy": "gcloud preview app deploy"
},
"dependencies": {
"body-parser": "^1.14.2",
"express": "^4.13.4",
"jade": "^1.11.0",
"node-mailjet": "^1.1.0"
}
}
27 changes: 27 additions & 0 deletions appengine/mailjet/views/index.jade
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright 2016, Google, Inc.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
doctype html
html
head
title= title
body
h1 Hello World!
p Express.js + Mailjet on Google App Engine.
hr
if sent
p Email sent!
else
form(name="hello", action="/hello", method="post")
input(type="email", placeholder="Enter your email to send yourself a Hello World message", name="email", style="width: 50%; margin-right: 15px;")
input(type="submit", value="Send")
9 changes: 8 additions & 1 deletion computeengine/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,17 @@ Install dependencies:

### sendgrid.js

Also required a `SENDGRID_API_KEY` environment variable to be set.
Requires a `SENDGRID_API_KEY` environment variable to be set.

npm run sendgrid

### mailjet.js

Requires `MAILJET_API_KEY` and `MAILJET_API_SECRET` environment variables to be
set.

npm run mailjet

### vms.js

npm run vms
Expand Down
40 changes: 40 additions & 0 deletions computeengine/mailjet.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// Copyright 2016, Google, Inc.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

// [START send]
var mailer = require('nodemailer');
var smtp = require('nodemailer-smtp-transport');

var transport = mailer.createTransport(smtp({
service: 'Mailjet',
auth: {
user: process.env.MAILJET_API_KEY || '<your-mailjet-api-key',
pass: process.env.MAILJET_API_SECRET || '<your-mailjet-api-secret>'
}
}));

transport.sendMail({
from: 'ANOTHER_EMAIL@ANOTHER_EXAMPLE.COM', // From address
to: '[email protected]', // To address
subject: 'test email from Node.js on Google Cloud Platform', // Subject
text: 'Hello!\n\nThis a test email from Node.js.' // Content
}, function (err, json) {
if (err) {
console.log(err);
} else {
console.log(json);
}
});
// [END send]
3 changes: 3 additions & 0 deletions computeengine/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,15 @@
},
"scripts": {
"sendgrid": "node sendgrid.js",
"mailjet": "node mailjet.js",
"vms": "node vms.js",
"vms_api": "node vms_api.js"
},
"dependencies": {
"gcloud": "^0.30.3",
"googleapis": "^4.0.0",
"nodemailer": "^2.3.2",
"nodemailer-smtp-transport": "^2.4.2",
"sendgrid": "^2.0.0"
}
}
6 changes: 6 additions & 0 deletions test/appengine/all.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,12 @@ var sampleTests = [
args: ['app.js'],
msg: 'Express.js + Mailgun on Google App Engine.'
},
{
dir: 'appengine/mailjet',
cmd: 'node',
args: ['app.js'],
msg: 'Express.js + Mailjet on Google App Engine.'
},
{
dir: 'appengine/memcached',
cmd: 'node',
Expand Down
51 changes: 51 additions & 0 deletions test/computeengine/mailjet.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
// Copyright 2016, Google, Inc.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

'use strict';

var test = require('ava');
var proxyquire = require('proxyquire').noPreserveCache();
process.env.MAILJET_API_KEY = 'foo';
process.env.MAILJET_API_SECRET = 'bar';

test.cb('should send an email', function (t) {
proxyquire('../../computeengine/mailjet.js', {
nodemailer: {
createTransport: function (arg) {
t.is(arg, 'test');
return {
sendMail: function (payload, cb) {
t.same(payload, {
from: 'ANOTHER_EMAIL@ANOTHER_EXAMPLE.COM',
to: '[email protected]',
subject: 'test email from Node.js on Google Cloud Platform',
text: 'Hello!\n\nThis a test email from Node.js.'
});
cb('done');
t.end();
}
};
}
},
'nodemailer-smtp-transport': function (options) {
t.same(options, {
service: 'Mailjet',
auth: {
user: 'foo',
pass: 'bar'
}
});
return 'test';
}
});
});

0 comments on commit f5b4aa9

Please sign in to comment.