2017-09-13 16 views
0

が、私はこのMailer.jsファイルSendGridは内部で、電子メール(Node.jsの)

const sendgrid = require('sendgrid'); 
    const helper = sendgrid.mail; 
    const keys = require('../config/keys'); 

    class Mailer extends helper.Mail { 
     constructor({ subject, recipients }, content) { 
      super(); 

      this.sgApi = sendgrid(keys.sendGridKey); 
      this.from_email = new helper.Email('[email protected]'); 
      this.subject = subject; 
      this.body = new helper.Content('text/html', content); 
      this.recipients = this.formatAddresses(recipients); 

      this.addContent(this.body); 
      this.addClickTracking(); 
      this.addRecipients(); 
     } 

     formatAddresses(recipients) { 
      return recipients.map(({ email }) => { 
       return new helper.Email(email); 
      }); 
     } 

     addClickTracking() { 
      const trackingSettings = new helper.TrackingSettings(); 
      const clickTracking = new helper.ClickTracking(true, true); 

      trackingSettings.setClickTracking(clickTracking); 
      th 

is.addTrackingSettings(trackingSettings); 
    } 

    addRecipients() { 
     const personalize = new helper.Personalization(); 

     this.recipients.forEach(recipient => { 
      personalize.addTo(recipient); 
     }); 
     this.addPersonalization(personalize); 
    } 

    async send() { 
     const request = this.sgApi.emptyRequest({ 
      method: 'POST', 
      path: '/v3/mail/send', 
      body: this.toJSON() 
     }); 

     const response = await this.sgApi.API(request); 
     return response; 
    } 
} 

module.exports = Mailer; 

を有し、また、私はsurveyRoutes.jsファイルを持って、ルートに関するコンテナ情報

const mongoose = require('mongoose'); 
const requireLogin = require('../middlewares/requireLogin'); 
const requireCredits = require('../middlewares/requireCredits'); 
const Mailer = require('../services/Mailer'); 
const surveyTemplate = require('../services/emailTemplates/surveyTemplate'); 

const Survey = mongoose.model('surveys'); 

    module.exports = app => { 
     app.post('/api/surveys', requireLogin, requireCredits, async (req, res) => { 
      const {title, subject, body, recipients} = req.body; 

      const survey = new Survey({ 
       title, 
       subject, 
       body, 
       recipients: recipients.split(',').map(email => ({ email: email.trim() })), 
       _user: req.user.id, 
       dateSent: Date.now() 
      }); 

      const mailer = new Mailer(survey, surveyTemplate(survey)); 
      try { 
       await mailer.send(); 
      } 
      catch(e){ 
       console.log(e); 
      } 
      }); 
    }; 

を送信していませんメインファイル、私が送信しようとしていますときに私は、そうsurveyRoutes

require('./routes/surveyRoutes')(app); 

を使用するには、このscructureを使用電子メール、axios.postとそれをdiong、エラーはありません、そして、それはokeyのようですが、電子メールは配信されません。

コードに問題がある場合は、教えてください。

+0

送信グリッドに問題があるかもしれません。私もsendgripから電子メールを送信している間、同じ問題に直面しました。 – sohamdodia

+0

@sohamdodia「送信グリッドの問題」とはどういう意味ですか?説明してください。 – Remzes

+0

送信グリッドの制限を超えているか、送信グリッドから非常に多くのメールを送信していて、すべてのメールが迷惑メールになっている可能性があります。だからあなたはメールを送ることができません。 – sohamdodia

答えて

0

純粋に逸話的な点ですが、次の説明は、多くの人がExpress ServerからSendGrid APIに電子メールを正常に送信できないように思われます。

多くの人が、SendGridサービスの無料層にサインアップした後、アカウント設定に会社名と会社のウェブサイトアドレスを入力していないため、SendGridは無料の層アクセスを承認せず、 SendGridを通じて電子メールを処理することができないという問題がありました。 1人が実際にこのシナリオをSendGrid Supportで直接検証したと主張しました。

あなたのSendGrid APIキーがExpress Serverのキーストアに正確にコピーされていることを前提としています。

関連する問題