Nodemailer - динамический транспортер - PullRequest
0 голосов
/ 26 октября 2018

Я создаю nodemailer в своем приложении и хочу динамически отправлять электронную почту из поля ввода, которое заполняет пользователь. Например. Если пользователь пишет в форме для ввода значения электронной почты: 'test@test.com', я хочу отправить это письмо с test@test.com, чтобы позже я мог ответить этому человеку и получить всю историю сообщения электронной почты.

Редактировать

Шаг 1:

Заполните форму на сайте с вашими личными данными. Например. Я хочу отправить письмо в компанию (имя: Джош, фамилия: Мурп, электронная почта: josh22@domain.com)

Шаг 2:

Отправьте этот объект json в '/contactus/' с помощью fetch и войдите в консоль с помощью req.body Я получаю этот объект: { name: 'josh', surname: 'murp', email: 'josh22@domain.com' }

Шаг 3:

Я хочу настроить Nodemailer следующим образом:

let mailOptions = {
        from: `${req.body.firstName} ${req.body.surname} <${req.body.email}>`, // sender address
        to: "mymail@gmail.com", // list of receivers
        subject: "hi", // Subject line
        text: "Hello world", // plain text body
        html: "<b>NodeJS Email Tutorial</b>" // html body
      };

Это значит. Я хочу получать электронную почту от req.body.email, в реальной жизни я хочу получать электронную почту от josh22@domain.com, но Nodemailer использует TRANSPORTER для отправки электронной почты. Это означает, что я получаю письмо от электронной почты, настроенной в транспортере но я хочу получить EMAIL от JOSH

Этот результат приносит мне проблему.

Когда я получил письмо от своей учетной записи (транспортер) Я не могу ответить на это письмо Мне нужно найти, кто мне пишет, и в ИСТОРИЯ РАЗГОВОРОВ Я не знаю FIRST электронная почта этого разговора отправлена ​​через мой сайт.

Один большой вопрос здесь:

КАК УСТАНОВИТЬ ДИНАМИЧЕСКИЙ ТРАНСПОРТЕР? или как реализовать это в 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
    }
  });

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

Ответы [ 5 ]

0 голосов
/ 05 ноября 2018

Электронная почта всегда относится к подлинности того, что человек действительно отправил эту электронную почту. Отправляя форму на веб-сайте, вы не можете понять, что отправляете электронное письмо под своим именем.

Представьте себе мир, в котором это возможно. Вы можете просто зарегистрироваться на почтовую службу и отправить электронное письмо себе из аккаунта знаменитости! И знаменитость даже не узнает об этом.

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

Если вас интересует только поддержка ветки с контентом, представленным на веб-сайте, я советую вам посмотреть раздел «Дополнительные поля» в документации .

sender, replyTo и inReplyTo должны помочь вам создать цепочку писем, и ваш ответ отправится предполагаемому получателю.

0 голосов
/ 04 ноября 2018

Что я понял, прочитав ваш вопрос и все ответы, так это то, что вы хотите отправить электронное письмо в свою учетную запись с адреса электронной почты пользователя, задав пользователю только его имя пользователя, и вы не хотите запрашивать его / еепароль, используя nodemailer, и цель отправки электронной почты из учетной записи пользователя: вы хотите получить ПЕРВОЕ электронное письмо о разговоре, которое было отправлено через ваш сайт.

Итак, @ Freestyle09, вы не можете отправлять электронную почту из любой учетной записи электронной почты.используя nodemailer, если вы не указали username и password этой учетной записи электронной почты, и у вас не будет пользователя password, поскольку вы сказали, что не хотите запрашивать пароль пользователя.

Итак, альтернативноРешение, которое я вам порекомендую, состоит в том, чтобы решить вашу проблему следующим образом:

var mailData = {
    from: 'another.your.email@company.com',
    to: 'mymail@gmail.com',
    cc:`${req.body.firstName} ${req.body.surname} <${req.body.email}>`//josh22@domain.com
    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, но когда у меня два разныхпровайдеры (от: my-email, cc: other-email) отправляют ответное сообщение на адрес my-email, но когда у меня и cc точно такой же провайдер, это работает!Я получаю сообщение, клиент тоже, и я могу ответить клиенту и иметь всю историю разговоров.

0 голосов
/ 26 октября 2018

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

Вы не сможете создать transporter с их адресом электронной почты, так как вы не сможете войти в них как.

let transporter = nodeMailer.createTransport({
    host: "smtp.gmail.com",
    port: 465,
    secure: true,
    auth: {
        user: "myadress@gmail.com",
        pass: "mypassword"
    }
});
let mailOptions = {
    from: `${req.body.firstName} ${req.body.surname} <${req.body.email}>`, // sender address
    to: "mymail@gmail.com", // 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.log(info)
})
0 голосов
/ 31 октября 2018

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

, как реализовать это в Node / express

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

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

auth: {
        user: 'mymail@gmail.com',
        pass: 'password_you_created'
    }

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

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

{
    let transporter = nodemailer.createTransport({
        service: 'gmail',
        auth: {
            user: 'mymail@gmail.com',
            pass: 'password_you_created'
        }
    });

    let mailOptions = {
        from: 'mymail@gmail.com',
        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.log(error);
            } else {
                console.log('Email sent');
            }
        }); 
    res.json({success: 'whatever message you plan on writing'});
}

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

0 голосов
/ 26 октября 2018

Таким образом, вы можете просто присвоить input field value объекту global.

, например, global.email = req.body.email,

и использовать его в конфигурации вашего nodemailer.

...