Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added mailgun example. #19

Merged
merged 1 commit into from
Oct 23, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions appengine/mailgun/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
## Mailgun on Google App Engine with Node.js

> [Mailgun](https://www.mailgun.com/): The Email Service For Developers

This sample application demonstrates how to use
[Express.js](http://expressjs.com) and
[node-mailgun](http://github.com/shz/node-mailgun) to send transactional email
on [Google App Engine](https://cloud.google.com/appengine).

### Sign up for Mailgun

1. Sign up for a [Mailgun account](https://mailgun.com/signup).
1. Add a [new domain](https://mailgun.com/app/domains).
1. Find your API key in your new domain's settings.

### Configure

Add these lines to the `app.yaml` file in the root of your application:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just realized there isn't a sample app.yaml in this PR, please add a sample app.yaml. They should only have to put in their api key, they shouldn't have to create the whole thing from scratch.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


```yaml
env_variables:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove everything above env_variables, they're subject to change.

PORT: 8080
MAILGUN_API_KEY: <your-mailgun-api-key>
```

### Start the app locally

```
$ export MAILGUN_API_KEY=<your-mailgun-api-key>
$ npm start
```

Now visit http://localhost:8080 and try sending yourself an email.

When the app is deployed to Google Cloud Platform the `MAILGUN_API_KEY`
environment variable will be set to the value specified in `app.yaml`.

### Deploy

Ensure your gcloud sdk is setup by running:

```
$ gcloud init
```

For convenience, you can use an npm script to run the `gcloud` command. Add
these lines to your `package.json` file:

```json
"scripts": {
"start": "node app.js",
"deploy": "gcloud preview app deploy app.yaml --promote"
}
```

At the terminal you can now run the following command to deploy your
application:

```
$ npm deploy
```
83 changes: 83 additions & 0 deletions appengine/mailgun/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
// Copyright 2015, 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 Mailgun = require('mailgun').Mailgun;
var mg = new Mailgun(process.env.MAILGUN_API_KEY);
// [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 servername = '';
var options = {};

mg.sendText(
// From
'no-reply@appengine-mailgun-demo.com',
// To
req.body.email,
// Subject
'Hello World!',
// Body
'Mailgun on Google App Engine with Node.js',
servername,
options,
function (err) {
if (err) {
return next(err);
} else {
// Render the index route on success
return res.render('index', {
sent: true
});
}
}
);
});
// [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]

21 changes: 21 additions & 0 deletions appengine/mailgun/app.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Copyright 2015, 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
api_version: 1
env_variables:
PORT: 8080
MAILGUN_API_KEY: <your-mailgun-api-key>
# [END app_yaml]
20 changes: 20 additions & 0 deletions appengine/mailgun/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "appengine-mailgun",
"description": "An example of using Mailgun in Node.js on Google App Engine.",
"version": "0.0.1",
"private": true,
"license": "Apache Version 2.0",
"engines": {
"node": "~0.12.7"
},
"scripts": {
"start": "node app.js",
"deploy": "gcloud preview app deploy app.yaml --promote"
},
"dependencies": {
"body-parser": "^1.14.1",
"express": "^4.13.3",
"jade": "^1.11.0",
"mailgun": "^0.5.0"
}
}
27 changes: 27 additions & 0 deletions appengine/mailgun/views/index.jade
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright 2015, 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 + Mailgun 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")