Я пытаюсь отправить электронное письмо в meteor с помощью process.env и smtp gmail

#javascript #meteor #smtp #gmail #mailgun

#javascript #meteor #smtp #gmail #mailgun

Вопрос:

Я использую следующее для отправки электронных писем, которые работают на localhost, но не на моем сервере.

 // server
Meteor.startup(function () {
    process.env.MAIL_URL="smtp://uername@gmail.com:password@smtp.gmail.com:465/"; 
});
  

Я получаю следующую ошибку в своих журналах (похоже, Google по какой-то причине блокирует ее, есть ли способ остановить это?

 [162.243.52.235] 534-5.7.14 Learn more at
534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 l10sm1017845qae.41 - gsmtp
    at SMTPClient._actionAUTHComplete (/opt/meteor/app/programs/server/npm/email/main/node_modules/simplesmtp/lib/client.js:826:23)
    at SMTPClient._onData (/opt/meteor/app/programs/server/npm/email/main/node_modules/simplesmtp/lib/client.js:329:29)
    at CleartextStream.EventEmitter.emit (events.js:95:17)
    at CleartextStream.<anonymous> (_stream_readable.js:746:14)
    at CleartextStream.EventEmitter.emit (events.js:92:17)
    at emitReadable_ (_stream_readable.js:408:10)
    at _stream_readable.js:401:7
    at process._tickCallback (node.js:415:13)
  

Это событие, которое, я думаю, отправляет, инициирует отправку электронной почты. Я знаю, что meteor теперь настроен на использование mailgun, есть ли способ изменить это, чтобы просто использовать mailgun вместо meteor без process.env?

 Template.forgotPassword.events({
    'submit #forgotPasswordForm': function(e, t) {
        e.preventDefault();

        var forgotPasswordForm = $(e.currentTarget),
            email = trimInput(forgotPasswordForm.find('#forgotPasswordEmail').val().toLowerCase());

        if (isNotEmpty(email) amp;amp; isEmail(email)) {
            Accounts.forgotPassword({email: email}, function(err) {
                if (err) {
                    if (err.message === 'User not found [403]') {
                        Session.set('alert', 'This email does not exist.');
                    } else {
                        Session.set('alert', 'We're sorry but something went wrong.');
                    }
                } else {
                    Session.set('alert', 'Email Sent. Please check your mailbox to reset your password.');

                }
            });
        }
        return false;
    },

    'click #returnToSignIn': function(e, t) {
        Session.set('showForgotPassword', null);
        return false;
    },
});
  

Пакеты уже установлены

введите описание изображения здесь

Комментарии:

1. Вы не должны включать пароли в виде открытого текста (или в кодировке uri) в коде приложения. Лучше установить переменную среды (более безопасную). Еще лучше — включить 2-факторную аутентификацию (для gmail), а затем настроить пароль приложения (см. support.google.com/accounts/answer/185833 ). Таким образом, если ваше приложение или сервер скомпрометированы, ваша учетная запись gmail отсутствует, и вы можете отозвать доступ к приложению.

Ответ №1:

Вам нужно, чтобы URL-адрес кодировал ваше имя пользователя и пароль, иначе Meteor путает два знака «@» друг с другом.

Вы можете сделать это в своей консоли JS (с помощью encodeURIComponent(username) ) и обычно в итоге получается что-то вроде

 user@gmail.com:password@smtp.gmail.com:465
  

Вы можете использовать Mailgun таким же образом, или Mandrill, или любого другого поставщика smtp. Проблемы вызывает только формат имени пользователя.

Комментарии:

1. К сожалению, я пробовал это раньше, и это не сработало, но сейчас так и есть. Я все еще получаю сообщение об ошибке в своих журналах, в основном сообщающее, что Google отказал мне [162.243.52.235] 534-5.7.14 Подробнее на 534 5.7.14 support.google.com/mail/bin/answer.py?answer=78754 c2sm1240459qan.18 — gsmtp

2. Есть ли в вашем пароле что-либо из @ , : , . ?

3. просто слова и цифры, никаких специальных символов.

4. Я отредактировал вопрос Андерса, чтобы не отвлекать внимание от реальной проблемы из-за проблемы double @. Этот ответ все еще полезен?

Ответ №2:

Я столкнулся с аналогичной проблемой. Метод отправки электронной почты работает локально, но не в модуле хостинга. С моей стороны, это было связано с блокировкой безопасности Google (доступ к моей учетной записи gmail из Сиэтла, пока я живу во Франции, вероятно, показался Google подозрительным). Я просмотрел несколько страниц, чтобы разрешить менее строгие подключения к моей учетной записи gmail. На этой странице я увидел блокировку. Поэтому я разрешил менее защищенные приложения и разрешил доступ к своей учетной записи.

Если это кому-то поможет..

Комментарии:

1. Боже, это было не очевидно. Большое спасибо, что поделились этим

2. Это тоже была моя проблема, здесь у вас есть руководство о том, как разрешить менее безопасные приложения. hotter.io/docs/email-accounts/secure-app-gmail

Ответ №3:

Просто используйте пакет электронной почты с

meteor add email

Тогда отправка электронной почты будет работать. Мой работает с портом 587 в моей конфигурации.

 Meteor.startup(function () {
    process.env.MAIL_URL = 'smtp://user@gmail.com:password@smtp.gmail.com:587';
});
  

Комментарии:

1. У меня установлена электронная почта, и порт 587 просто выдает мне больше ошибок в моих журналах.

2. Такой подход нецелесообразен, если приведенный выше код находится в вашем репозитории. Желательно, чтобы вы передали MAIL_URL в свой файл settings.json. Кроме того, порт должен быть 465.