Настройте mailgun с parse-server на Heroku

Я пытаюсь настроить mailgun для использования с приложением parse-server на Heroku.

Рекомендуемый API:

https://github.com/ParsePlatform/parse-server-simple-mailgun-adapter

Но инструкций о том, как на самом деле этого добиться, не существует.

--------- РЕДАКТИРОВАТЬ -----------

Следуя инструкциям, сервер отправляет на Heroku. Хотя я все еще не получаю электронные письма. Я просто использую песочницу mailgun и авторизовал и активировал получателя.

Я не уверен в указании пути к шаблонам или:

fromAddress: process.env.EMAIL_FROM 

Это не было предоставлено mailgun, поэтому я только что ввел [email protected]

Это явно неверно?

index.js код:

var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var S3Adapter = require('parse-server').S3Adapter;
var path = require('path');

const resolve = require('path').resolve;

var databaseUri = process.env.DATABASE_URI || process.env.MONGODB_URI;

if (!databaseUri) {
    console.log('DATABASE_URI not specified, falling back to localhost.');
}


var api = new ParseServer({
    //**** General Settings ****//

    databaseURI: databaseUri || 'mongodb://localhost:27017/dev',
    cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
    serverURL: process.env.SERVER_URL || 'http://localhost:1337/parse',  // Don't forget to change to https if needed
    maxUploadSize: '500mb',

    //**** Security Settings ****//
    // allowClientClassCreation: process.env.CLIENT_CLASS_CREATION || false, 
    appId: process.env.APP_ID || 'myAppId',
    masterKey: process.env.MASTER_KEY || 'myMasterKey', //Add your master key here. Keep it secret! 

    //**** Live Query ****//
    // liveQuery: {
    //  classNames: ["TestObject", "Place", "Team", "Player", "ChatMessage"] // List of classes to support for query subscriptions
    // },


      //**** File Storage ****//
      filesAdapter: new S3Adapter({
          accessKey: process.env.S3_ACCESS_KEY || '',
          secretKey: process.env.S3_SECRET_KEY || '',
          bucket: process.env.S3_BUCKET || '',
          directAccess: true
     }),

    //**** Email Verification ****//
    /* Enable email verification */
    // verifyUserEmails: true,
    /* The public URL of your app */
    // This will appear in the link that is used to verify email addresses and reset passwords.


    publicServerURL: process.env.SERVER_URL || '',
    appName: process.env.APP_NAME || '',

     emailAdapter: {
        module: 'parse-server-mailgun',
        options: {
            fromAddress: process.env.EMAIL_FROM || '',
            domain: process.env.MAILGUN_DOMAIN || '',
            apiKey: process.env.MAILGUN_API_KEY  || '',

            templates: {
              passwordResetEmail: {
              subject: 'Reset your password',
              pathPlainText: resolve(__dirname, 'https:/myparseserveronheroku.herokuapp.com/node_modules/parse-server-mailgun-adapter/test/email-templates/password_reset_email.txt'),
              pathHtml: resolve(__dirname, 'https:/myparseserveronheroku.herokuapp.com/node_modules/parse-server-mailgun-adapter/test/email-templates/password_reset_email.html'),
              callback: (user) => { return { firstName: user.get('firstName') }}
              // Now you can use {{firstName}} in your templates
              },
              verificationEmail: {
              subject: 'Confirm your account',
              pathPlainText: resolve(__dirname, 'https:/myparseserveronheroku.herokuapp.com/node_modules/parse-server-mailgun-adapter/test/email-templates/verification_email.txt'),
              pathHtml: resolve(__dirname, 'https:/myparseserveronheroku.herokuapp.com/node_modules/parse-server-mailgun-adapter/test/email-templates/verification_email.html'),
              callback: (user) => { return { firstName: user.get('firstName') }}
              // Now you can use {{firstName}} in your templates 
              }
            }
        }
     }

});

В моем быстром коде для отправки сброса пароля говорится, что сообщение было отправлено, поэтому я предполагаю, что все, что сказал мне Клифф, правильно, и сторона сервера настроена нормально, возможно, просто что-то глупое, что я сделал с переменными.

    PFUser.requestPasswordResetForEmail(inBackground: emailAddress!) { (success, error) in
        if error != nil {
            // display error message
            let userMessage: String = error!.localizedDescription
            GeneralFunctions.createAlert(errorTitle: "Oops...", errorMessage: userMessage, className: self )
        } else {
            // display success message
            let userMessage: String = "An new password was sent to \(emailAddress!)"
            GeneralFunctions.createAlert(errorTitle: "Hooray...", errorMessage: userMessage, className: self )
        }
    }

----------- РЕДАКТИРОВАТЬ ----------

Подробный журнал после попытки сбросить пароль

[email protected]
2017-02-06T00:44:25.788619+00:00 app[web.1]: [36mverbose[39m: RESPONSE from [POST] /parse/requestPasswordReset: {
2017-02-06T00:44:25.788623+00:00 app[web.1]:   "response": {}
2017-02-06T00:44:25.788625+00:00 app[web.1]: } 
2017-02-06T00:44:25.797455+00:00 app[web.1]: { Error: ENOENT: no such file or directory, open '/app/https:/myparseserveronheroku.herokuapp.com/node_modules/parse-server-mailgun-adapter/test/email-templates/password_reset_email.txt'
2017-02-06T00:44:25.797458+00:00 app[web.1]:   errno: -2,
2017-02-06T00:44:25.797459+00:00 app[web.1]:   code: 'ENOENT',
2017-02-06T00:44:25.797459+00:00 app[web.1]:   syscall: 'open',
2017-02-06T00:44:25.797462+00:00 app[web.1]:   path: '/app/https:/myparseserveronheroku.herokuapp.com/node_modules/parse-server-mailgun-adapter/test/email-templates/password_reset_email.txt' }
2017-02-06T00:44:25.792191+00:00 heroku[router]: at=info method=POST path="/parse/requestPasswordReset" host=myparseserveronheroku.herokuapp.com request_id=666ff3e0-db4a-4e76-b7b5-6353edc7e15a fwd="111.111.111.11" dyno=web.1 connect=0ms service=81ms status=200 bytes=483

Так что определенно похоже, что он пытается отправить из несуществующего шаблона. Я не уверен, как указать здесь путь, я думал, что все эти каталоги, включая node_modules / parse-server-mailgun-adapter / test / email-templates, были перенесены в Heroku.


person Pippo    schedule 05.02.2017    source источник


Ответы (1)


Первый:

npm install --save parse-server-mailgun

Затем в файле index.js вы можете настроить его следующим образом при инициализации:

 publicServerURL: 'http://MY_HEROKU_APP.herokuapp.com/parse', 
 appName: 'MY_APP',
 emailAdapter: {
    module: 'parse-server-mailgun',
    options: {
      fromAddress: '[email protected]',
      domain: 'example.com',
      apiKey: 'key-XXXXXX',
    }
 }

Адаптер Mailgun по умолчанию, который поставляется с сервером Parse Server, вам необходимо установить fromAddres, а также домен и apiKey, предоставленные Mailgun. Кроме того, вам также необходимо настроить шаблоны, которые вы хотите использовать. Вы должны предоставить по крайней мере версию в виде обычного текста для каждого шаблона. Версии html не являются обязательными.

verifyUserEmails: true,
  emailAdapter: {
    module: 'parse-server-mailgun',
    options: {
      // The address that your emails come from 
      fromAddress: 'YourApp <[email protected]>',
      // Your domain from mailgun.com 
      domain: 'example.com',
      // Your API key from mailgun.com 
      apiKey: 'key-mykey',
      // The template section 
      templates: {
        passwordResetEmail: {
          subject: 'Reset your password',
          pathPlainText: resolve(__dirname, 'path/to/templates/password_reset_email.txt'),
          pathHtml: resolve(__dirname, 'path/to/templates/password_reset_email.html'),
          callback: (user) => { return { firstName: user.get('firstName') }}
          // Now you can use {{firstName}} in your templates 
        },
        verificationEmail: {
          subject: 'Confirm your account',
          pathPlainText: resolve(__dirname, 'path/to/templates/verification_email.txt'),
          pathHtml: resolve(__dirname, 'path/to/templates/verification_email.html'),
          callback: (user) => { return { firstName: user.get('firstName') }}
          // Now you can use {{firstName}} in your templates 
        },
        customEmailAlert: {
          subject: 'Urgent notification!',
          pathPlainText: resolve(__dirname, 'path/to/templates/custom_alert.txt'),
          pathHtml: resolve(__dirname, 'path/to/templates/custom_alert.html'),
        }
      }
    }

Ссылка на пакет NPM: https://www.npmjs.com/package/parse-server-mailgun

person Cliffordwh    schedule 05.02.2017
comment
Спасибо. Я дам вам знать, как я справляюсь с этим! - person Pippo; 05.02.2017
comment
Скажем, просто собирались использовать предоставленные шаблоны, как указать путь к ним? / синтаксический сервер / node_modules / синтаксический сервер-mailgun / тест - person Pippo; 05.02.2017
comment
Ваша установка правильная, так что это хорошо. Неверный путь. __dirname - это имя каталога текущего модуля. Итак, посмотрите и посмотрите, по какому пути находится ваш index.js, а затем вы построите свой путь оттуда. Никаких https или доменных имен. Истинные пути - person Cliffordwh; 06.02.2017
comment
Я пробовал это без https, но я маппет, и в начале пути была косая черта. / node_modules /. Большое спасибо за помощь. - person Pippo; 06.02.2017
comment
Таким образом, письмо приходит, однако я получаю сообщение об ошибке, когда нажимаю ссылку сброса. Не удается получить /apps/myappid/request_password_reset?token=CqqIJi3PzyHEMouZpVjP421pm&username=test@test.com - person Pippo; 06.02.2017
comment
Ты прав. По какой-то причине, когда я установил на Heroku, переменная среды SERVER_URL не работала с / parse. Если я просто создам новый var с решенной проблемой / parse. Мне действительно нужно вернуться и убедиться, что это так, я почти уверен, что все менял, пытаясь запустить. - person Pippo; 06.02.2017
comment
publicServerURL как раз для таких вещей. Так что у вас все будет хорошо! Желаем удачи и удачи! - person Cliffordwh; 06.02.2017