2017-02-05 12 views
1

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

Рекомендованный API является

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

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

--------- EDIT -----------

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

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

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) 
     } 
    } 

----------- EDIT ----------

Многословный журнала после попытки сброса пароля

[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.

ответ

1

Первое:

npm install --save parse-server-mailgun 

Тогда в ваших index.js файл, который вы можете настроить его следующим образом в Initialize:

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 адаптер по умолчанию, который поставляется с сервером Разбор, вы необходимо установить 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'), 
     } 
     } 
    } 

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

+0

Спасибо. Я дам вам знать, как я с этим справляюсь! – Pippo

+0

Скажите, просто собирались использовать предоставленные шаблоны, как вы указываете путь к ним?/parse-server/node_modules/parse-server-mailgun/test – Pippo

+0

Ваша установка правильная, так что это хорошо. Путь неверен. __dirname - это имя каталога текущего модуля. Так что посмотрите и посмотрите, какой путь у вас есть index.js, тогда вы строите свой путь оттуда.Нет https или доменных имен. Истинные пути – Cliffordwh