Nodemailer - динамический транспортер

Я создаю 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
    }
  });

Я весь день ищу ответ в сети, но безрезультатно.

Значит, вы уже извлекли почту из поля ввода?

Abhishek Mani 26.10.2018 16:18

Да, у меня есть все, но я не знаю, как передать этот req.body.email в значение 'from'

Freestyle09 26.10.2018 16:18

Итак, вы хотите отправить электронное письмо на свою учетную запись с адреса электронной почты пользователя, запрашивая у пользователя только его имя пользователя, и вы не хотите запрашивать его / ее пароль, используя nodemailer. Вы об этом спрашиваете?

Al Fahad 04.11.2018 15:18
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
3
2 685
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Таким образом, вы можете просто назначить 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"
 }
});

Но мне нужен пароль для этого письма ... Думаешь, он правильный ??

Freestyle09 26.10.2018 16:24

вы можете назначить его на ключ password, global.password = req.body.password

Abhishek Mani 26.10.2018 16:24

Вы хотите отправить мне письмо с адреса '[email protected]', и я хочу, чтобы это письмо было у моего провайдера электронной почты, и это письмо было от вашего адреса электронной почты, а не от global

Freestyle09 26.10.2018 16:25

Но когда вы хотите передать туда req.body.password, пользователь должен написать мне свой пароль, но я не хочу этого :) Я просто хочу отправить электронное письмо со значением, которое пользователь напишет мне в форме

Freestyle09 26.10.2018 16:27

Вам интересно, как отправить электронное письмо?

Вы не сможете создать 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]

Freestyle09 26.10.2018 16:29

И вы уверены, что req.body.email - это то значение, на которое вы рассчитываете?

Joseph Dykstra 26.10.2018 16:31

Да, я уверен ... Это просто форма на сайте для связи. Я передаю свое имя, фамилию и электронную почту. И я хочу получить это электронное письмо с этим значением (req.body.email), позже я могу щелкнуть свой ответ электронной почты gmail, и я могу написать ответ на это письмо, из которого оно пришло, в любом случае я должен щелкнуть эту ссылку и написать другой электронное письмо, и я не вижу это первое письмо, пришедшее с веб-сайта, понимаете?

Freestyle09 26.10.2018 16:34

В ответ на ваш вопрос о

how to implement this in Node/express

Пользователю, который регистрируется на вашей платформе, может быть сложно получить электронное письмо от самого себя, даже если ваш пароль был передан на req.body.password, потому что ему / ей необходимо превратить нанаg> в Менее безопасный доступ к приложениям, который предназначен для учетной записи gmail, я даже не знать, как другие службы электронной почты делают свои.

Но я посоветую вам настроить электронную почту, где вы хотите, чтобы зарегистрированные пользователи получали электронное письмо от вас или любого администратора (владельца созданного электронного письма), затем вы можете настроить учетную запись и предоставить учетные данные для входа (адрес электронной почты и пароль) в свой

auth: {
        user: '[email protected]',
        pass: 'password_you_created'
    }

после чего вам придется превратить нанаg> в Менее безопасный доступ к приложениям, иначе ваши электронные письма не пройдут.

Вы можете попробовать приведенный ниже пример:

{
    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'});
}

Я надеюсь, что этого достаточно, чтобы помочь.

Я хочу отправлять электронную почту из динамических писем без регистрации

Freestyle09 31.10.2018 19:21
Ответ принят как подходящий

Прочитав ваш вопрос и все ответы, я понял, что вы хотите отправить электронное письмо в свою учетную запись с адреса электронной почты пользователя, спросив пользователя, только его имя пользователя, и вы не хотите запрашивать его / ее пароль, используя 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. электронная почта туда ... Вы знаете, как это установить ??

Freestyle09 05.11.2018 16:33

Отлично !!!! Теперь я могу ответить на электронное письмо, откуда пришло сообщение :) Один совет, я тестировал это с провайдером gmail, но когда у меня есть два разных провайдера (from: my-email, cc: other-email), ответное сообщение отправляется на my-email , но когда у меня есть from и cc точно того же провайдера, это работает! Я получаю сообщение, клиент, но я могу ответить клиенту и иметь всю историю разговоров :) Вы можете отредактировать ответ, и я приму. Огромное спасибо!!!!

Freestyle09 05.11.2018 17:10

Отредактировал ответ своим советом, @ Freestyle09, я очень рад узнать, что ваша проблема решена :)

Al Fahad 05.11.2018 17:20

Блин, одна ошибка :) Поменяйте пожалуйста последнее предложение. «Я получаю сообщение, клиент тоже, я могу ответить клиенту и иметь всю историю разговоров»

Freestyle09 05.11.2018 17:30

Исправил ваш отзыв.

Al Fahad 05.11.2018 17:41

Другие вопросы по теме