Я создаю nodemailer в своем приложении и хочу динамически отправлять электронную почту из поля ввода, которое пользователь заполнит. Например. Если пользователь пишет в форме введите значение электронной почты: '[email protected]', я хочу отправить это письмо с '[email protected]', чтобы позже я мог ответить этому человеку и иметь всю историю электронных писем.
Редактировать
Шаг 1:
Заполните форму на сайте своими личными данными. Например. Я хочу отправить электронное письмо компании (имя: josh, фамилия: murp, электронная почта: [email protected])
Шаг 2:
Отправьте этот объект json в '/contactus/'
с помощью fetch и зарегистрируйте его в консоли с помощью req.body
Я получаю этот объект: { name: 'josh', surname: 'murp', email: '[email protected]' }
Шаг 3:
Я хочу настроить Nodemailer таким образом:
let mailOptions = {
from: `${req.body.firstName} ${req.body.surname} <${req.body.email}>`, // sender address
to: "[email protected]", // list of receivers
subject: "hi", // Subject line
text: "Hello world", // plain text body
html: "<b>NodeJS Email Tutorial</b>" // html body
};
Это означает. Я хочу получать электронную почту от req.body.email
, в реальной жизни я хочу получать электронную почту от [email protected]
, но Nodemailer использует TRANSPORTER для отправки электронной почты. Это означает, что я получаю письмо от электронная почта настроена в транспортере
но я хочу получить EMAIL от ДЖОШ
Этот результат вызывает у меня проблему.
Когда я получил электронное письмо от моей учетной записи (транспортера) Я не могу ответить на это письмо, мне нужно найти, кто пишет мне, а в ИСТОРИЯ РАЗГОВОРА у меня нет электронной почты ПЕРВЫЙ этого разговора, который был отправлен через мой веб-сайт.
Здесь есть один большой вопрос:
КАК УСТАНОВИТЬ ДИНАМИЧЕСКИЙ ТРАНСПОРТЕР? или как это реализовать в Node / express
let transporter = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 465,
secure: true, // true for 465, false for other ports
auth: {
user: keys.username, // generated ethereal user
pass: keys.password // generated ethereal password
}
});
Я весь день ищу ответ в сети, но безрезультатно.
Да, у меня есть все, но я не знаю, как передать этот req.body.email в значение 'from'
Итак, вы хотите отправить электронное письмо на свою учетную запись с адреса электронной почты пользователя, запрашивая у пользователя только его имя пользователя, и вы не хотите запрашивать его / ее пароль, используя nodemailer. Вы об этом спрашиваете?
Таким образом, вы можете просто назначить input field value
объекту global
.
например, global.email = req.body.email
,
и можете использовать в вашей конфигурации nodemailer.
let transporter = nodeMailer.createTransport({
host: "smtp.gmail.com",
port: 465,
secure: true,
auth: {
user: global.email || "[email protected]",
pass: "mypassword"
}
});
Но мне нужен пароль для этого письма ... Думаешь, он правильный ??
вы можете назначить его на ключ password
, global.password = req.body.password
Вы хотите отправить мне письмо с адреса '[email protected]', и я хочу, чтобы это письмо было у моего провайдера электронной почты, и это письмо было от вашего адреса электронной почты, а не от global
Но когда вы хотите передать туда req.body.password, пользователь должен написать мне свой пароль, но я не хочу этого :) Я просто хочу отправить электронное письмо со значением, которое пользователь напишет мне в форме
Вам интересно, как отправить электронное письмо?
Вы не сможете создать transporter
с их адресом электронной почты, так как вы не сможете войти под ним.
let transporter = nodeMailer.createTransport({
host: "smtp.gmail.com",
port: 465,
secure: true,
auth: {
user: "[email protected]",
pass: "mypassword"
}
});
let mailOptions = {
from: `${req.body.firstName} ${req.body.surname} <${req.body.email}>`, // sender address
to: "[email protected]", // list of receivers
subject: "hi", // Subject line
text: "Hello world", // plain text body
html: "<b>NodeJS Email Tutorial</b>" // html body
};
transporter.sendMail(mailOptions, function (err, info) {
if (err) {
throw err
}
console.info(info)
})
Я хочу получать электронную почту от req.body.email, но получаю письмо от [email protected]
И вы уверены, что req.body.email - это то значение, на которое вы рассчитываете?
Да, я уверен ... Это просто форма на сайте для связи. Я передаю свое имя, фамилию и электронную почту. И я хочу получить это электронное письмо с этим значением (req.body.email), позже я могу щелкнуть свой ответ электронной почты gmail, и я могу написать ответ на это письмо, из которого оно пришло, в любом случае я должен щелкнуть эту ссылку и написать другой электронное письмо, и я не вижу это первое письмо, пришедшее с веб-сайта, понимаете?
В ответ на ваш вопрос о
how to implement this in Node/express
Пользователю, который регистрируется на вашей платформе, может быть сложно получить электронное письмо от самого себя, даже если ваш пароль был передан на req.body.password
, потому что ему / ей необходимо превратить
Но я посоветую вам настроить электронную почту, где вы хотите, чтобы зарегистрированные пользователи получали электронное письмо от вас или любого администратора (владельца созданного электронного письма), затем вы можете настроить учетную запись и предоставить учетные данные для входа (адрес электронной почты и пароль) в свой
auth: {
user: '[email protected]',
pass: 'password_you_created'
}
после чего вам придется превратить
Вы можете попробовать приведенный ниже пример:
{
let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: '[email protected]',
pass: 'password_you_created'
}
});
let mailOptions = {
from: '[email protected]',
to: req.body.email,
subject: "hi", // Subject line
text: "Hello world", // plain text body
html: "<b>NodeJS Email Tutorial</b>" // html body
};
transporter.sendMail(mailOptions, (error, info)=>{
if (error) {
console.info(error);
} else {
console.info('Email sent');
}
});
res.json({success: 'whatever message you plan on writing'});
}
Я надеюсь, что этого достаточно, чтобы помочь.
Я хочу отправлять электронную почту из динамических писем без регистрации
Прочитав ваш вопрос и все ответы, я понял, что вы хотите отправить электронное письмо в свою учетную запись с адреса электронной почты пользователя, спросив пользователя, только его имя пользователя, и вы не хотите запрашивать его / ее пароль, используя nodemailer, а цель отправки электронной почты из учетной записи пользователя заключается в том, что вы хотите получить ПЕРВОЕ электронное письмо разговора, которое было отправлено через ваш веб-сайт.
Итак, @ Freestyle09, вы не можете отправлять электронную почту из любой учетной записи электронной почты с помощью nodemailer, если вы не предоставили username
и password
этой учетной записи электронной почты, и у вас не будет password
пользователя, поскольку вы сказали, что не хотите запрашивать пароль пользователя.
Итак, альтернативное решение, которое я вам порекомендую, - решить вашу проблему таким образом
var mailData = {
from: '[email protected]',
to: '[email protected]',
cc:`${req.body.firstName} ${req.body.surname} <${req.body.email}>`//[email protected]
subject: 'Message title',
text: 'This request has been generated on behalf of josh ...... all other
text here',
html: 'HTML version of the message'
};
После того, как вы добавили имя пользователя в список cc
, вы включите этого пользователя в беседу, в противном случае невозможно будет отправить электронное письмо с адреса электронной почты с паролем с помощью nodemailer. нужно искать альтернативные решения
СОВЕТ: (по автору вопроса)
Один совет: я тестировал это с помощью поставщика Gmail, но когда у меня есть два разных поставщика (from: my-email, cc: other-email), ответное сообщение отправляется на мой адрес электронной почты, но когда у меня есть from и cc точно того же поставщика. работает! Я получаю сообщение, клиент тоже, и я могу ответить клиенту и иметь всю историю разговоров.
Хмммм, это почти хорошо, одна проблема, есть ли способ получить что-то подобное ... Отправить письмо с моего адреса на второй адрес электронной почты и со второго адреса электронной почты, когда я нажимаю ОТВЕТИТЬ Я хочу получить req.body.email в поле в моем провайдере электронной почты. В вашем решении я получаю 2 одинаковых письма на 2 разных адреса электронной почты, но когда я нажимаю кнопку «Ответить», в поле TO у меня есть мой адрес электронной почты, но я хочу req.body. электронная почта туда ... Вы знаете, как это установить ??
Отлично !!!! Теперь я могу ответить на электронное письмо, откуда пришло сообщение :) Один совет, я тестировал это с провайдером gmail, но когда у меня есть два разных провайдера (from: my-email, cc: other-email), ответное сообщение отправляется на my-email , но когда у меня есть from и cc точно того же провайдера, это работает! Я получаю сообщение, клиент, но я могу ответить клиенту и иметь всю историю разговоров :) Вы можете отредактировать ответ, и я приму. Огромное спасибо!!!!
Отредактировал ответ своим советом, @ Freestyle09, я очень рад узнать, что ваша проблема решена :)
Блин, одна ошибка :) Поменяйте пожалуйста последнее предложение. «Я получаю сообщение, клиент тоже, я могу ответить клиенту и иметь всю историю разговоров»
Исправил ваш отзыв.
Значит, вы уже извлекли почту из поля ввода?