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