Редактировать
Я принципиально неправильно понял ваш первоначальный вопрос, когда углубился в это в первый раз.Я должен был уточнить, что вы абсолютно не хотите использовать nodemailer в своем коде Angular.Это должно происходить только в вашем бэкэнде (Node.js), поскольку это единственное место, где ваши ключи API или имена пользователей / пароли будут защищены от посторонних глаз.Как только вы добавите это в приложение внешнего интерфейса, любой может взломать вашу учетную запись gmail.Так что держите триггер для своих писем в бэкэнде, и вы будете в отличной форме.Всякий раз, когда пожертвование сохраняется или что-то еще, просто как-то попадаете на свой бэкэнд-API, и тогда вы можете вызвать функцию sendEmail
.:)
Исходное сообщение
Похоже, вы, вероятно, хотите поместить этот транспортер в его собственный модуль (я предполагаю, что Index.js
- ваша запись верхнего уровняточка?), поэтому его легче импортировать в любой файл.Попробуйте это:
sendEmail.js
let transporter = nodemailer.createTransport({
service: 'gmail',
// make true if using ssl certificate
secure: false,
// stmp port
port: 25,
auth: {
user: 'test.test@gmail.com',
pass: 'password'
},
// protocol
tls: {
rejectUnauthorized: false
}
});
module.exports = function ({from, to, subject, text}) {
// Promisify it, so you can easily chain it in the wild
return new Promise(function (resolve, reject) {
// use to construct body of email
let HelperOptions = {
from,
to,
subject,
text
};
// contains callback data
transporter.sendMail(HelperOptions, (error, info) => {
if (error) {
console.log(error);
return reject(error);
}
console.log("The donation was sent!");
console.log(info);
resolve(info);
});
});
};
Затем вы можете использовать эту функцию в любом месте вашего кода, для которого вы хотите отправить электронное письмо, например:
donationServices.js
// import the email function
const sendEmail = require('./path/to/sendEmail.js')
// create donation
exports.createDonation = function(req, res){
let newDonation = {
used_clothing : 0,
new_clothing : 0,
used_shoes : 0,
new_shoes : 0,
baby_food: 0,
diaper_bags: 0,
bottles: 0,
pacifiers: 0,
diapers_boxes: 0,
beds: 0,
misc_items: 0
}
newDonation[req.body.donationOption] = req.body.donationAmount
return donation.create(newDonation)
.then(
function createSuccess(donation) {
sendEmail({
from: ‘test@gmail.com’,
to: ‘boss@gmail.com’,
subject: req.body.donationOption + ' donation alert'
text: 'yay donations!\n' + JSON.stringify(donation) // you get the point...
}).then(function (info) {
res.json({
donation: donation
});
}).catch(function (err) {
res.status(500).send(err);
// or maybe you don't care that the email failed:
// res.status(200).send({message: 'donation sent, but email didn\'t'});
});
},
function createError(err){
res.send(500, err.message);
}
);
}
Надеюсь, это ясно, как грязь.:)
PS Я вижу, вы, возможно, используете имя пользователя / пароль для аутентификации узла.Исходя из личного опыта, я настоятельно рекомендую вам потратить часы, чтобы освежить в памяти OAuth2 и т. Д., И научиться работать с токенами обновления и всем шебаном.Это действительно будет стоить того, и вы узнаете тонну в процессе.Удачного кодирования!