Файлы, упомянутые в главе

  • .helm/templates/deployment.yaml
  • .helm/secret-values.yaml
  • consumer/consumer.js

В этой главе мы настроим в нашем базовом приложении работу с почтой.

Для того, чтобы использовать почту, мы предлагаем лишь один вариант - использовать внешний API. В нашем примере это Mailgun, но есть и множество альтернатив, например: SendGrid, Amazon SES, Pepipost, Mailchimp, SparkPost.

Для того, чтобы Node.js-приложение могло работать с Mailgun, необходимо установить и сконфигурировать зависимость и начать её использовать. Установим через npm зависимость:

npm install mailgun-js

И сконфигурируем согласно документации пакета:

const mailgun = require("mailgun-js");
<...>
const mg = mailgun({apiKey: process.env.MAILGUN_APIKEY, domain: process.env.MAILGUN_DOMAIN, host: "api.eu.mailgun.net"});
const mailgun = require("mailgun-js"); <...> const mg = mailgun({apiKey: process.env.MAILGUN_APIKEY, domain: process.env.MAILGUN_DOMAIN, host: "api.eu.mailgun.net"});

В коде приложения подключение к API и отправка сообщения может выглядеть так:

const sendEmail = async (email) => {
  try {
    const mg = mailgun({apiKey: process.env.MAILGUN_APIKEY, domain: process.env.MAILGUN_DOMAIN, host: "api.eu.mailgun.net"});
    if (email != null) {
      email.from = "Mailgun Sandbox <postmaster@" + process.env.MAILGUN_DOMAIN + ">"
      email.subject = "Welcome to Chat!"
      email.html = "<p>" + email.text + "</p>"
      console.log("Email: " + JSON.stringify(email));
    }
    const sent = await mg.messages().send(email);
    return sent;
  } catch (error) {
    console.error(error)
  }
}
const sendEmail = async (email) => { try { const mg = mailgun({apiKey: process.env.MAILGUN_APIKEY, domain: process.env.MAILGUN_DOMAIN, host: "api.eu.mailgun.net"}); if (email != null) { email.from = "Mailgun Sandbox <postmaster@" + process.env.MAILGUN_DOMAIN + ">" email.subject = "Welcome to Chat!" email.html = "<p>" + email.text + "</p>" console.log("Email: " + JSON.stringify(email)); } const sent = await mg.messages().send(email); return sent; } catch (error) { console.error(error) } }

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

.helm/secret-values.yaml (расшифрованный) копировать имя копировать текст
app:
  mailgun_apikey:
    _default: 192edaae18f13aaf120a66a4fefd5c4d-7fsaaa4e-kk5d08a5
  mailgun_domain:
    _default: sandboxf1b90123966447a0514easd0ea421rba.mailgun.org
app: mailgun_apikey: _default: 192edaae18f13aaf120a66a4fefd5c4d-7fsaaa4e-kk5d08a5 mailgun_domain: _default: sandboxf1b90123966447a0514easd0ea421rba.mailgun.org

После того, как значения корректно прописаны и зашифрованы, можно пробросить соответствующие значения в Deployment:

        - name: MAILGUN_APIKEY
          value: {{ pluck .Values.global.env .Values.app.mailgun_apikey | first | default .Values.app.mailgun_apikey._default }}
        - name: MAILGUN_DOMAIN
          value: {{ pluck .Values.global.env .Values.app.mailgun_domain | first | default .Values.app.mailgun_domain._default | quote }}
- name: MAILGUN_APIKEY value: {{ pluck .Values.global.env .Values.app.mailgun_apikey | first | default .Values.app.mailgun_apikey._default }} - name: MAILGUN_DOMAIN value: {{ pluck .Values.global.env .Values.app.mailgun_domain | first | default .Values.app.mailgun_domain._default | quote }}