Nodemailer: Почта отправляется с использованием SMTP и gmail, но обратный вызов зависает до истечения времени ожидания.

Созданный на 17 мар. 2018  ·  9Комментарии  ·  Источник: nodemailer/nodemailer

Используя nodejs и nodemailer на моем localhost я могу отправить почту, но обратный вызов никогда не вызывается до истечения времени ожидания. Информация об отладке не предоставлена ​​(без трассировки стека), также nodemailer игнорирует настройку socketTimeout config. Таймаут должен составлять 5000 мс, но зависает слишком долго.

1. Это ошибка в Nodemailer?

  • [x] Да
  • [ ] Нет

Примечание. Проблемы, не связанные с ошибками, закрыты по умолчанию. Если у вас есть вопросы о поддержке, перейдите в раздел Stack Overflow: https://stackoverflow.com/search?q=nodemailer

2. Связано ли это с Gmail / Hotmail / Yahoo?

  • [x] Да
  • [ ] Нет

    Примечание. Если вы не можете войти в Gmail, значит, Gmail блокирует вас. По умолчанию эти вопросы закрыты.

3. Связана ли ваша проблема с ошибками SSL / TLS?

  • [ ] Да
  • [x] Нет

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

4. Связана ли ваша проблема с тайм-аутом подключения?

  • [x] Да
  • [ ] Нет

Примечание. Скорее всего, вы отключены от сервера брандмауэром. Такие вопросы закрыты по умолчанию.

5. Получаете ли вы SyntaxError при использовании Nodemailer?

  • [ ] Да
  • [x] Нет

Примечание. Вы используете слишком старую версию Node.js, обновите ее. Такие вопросы закрыты по умолчанию.

6. Версия Nodemailer, с которой у вас возникли проблемы (например, v1.3.7)

4.6.0
...

7. Версия Node.js, которую вы используете (запустите node -v чтобы увидеть ее, например v5.5.0)

v8.9.4
...

8. Ваша операционная система (например, Windows 10, Ubuntu 14.04 и т. Д.)

Windows 10
...

9. Настройки конфигурации Nodemailer (если применимо)

        const transporter = nodemailer.createTransport({
          service: 'gmail',
          host: 'smtp.gmail.com',
          port: 465,
          secure: true,
          socketTimeout: 5000,
          logger: true,
          auth: {
            user: process.env.MAIL_USER,
            pass: process.env.MAIL_PASSWORD
          }
        });

...

10. Если возможно, включите минимальный тестовый пример, который можно использовать для проверки вашей проблемы (ссылка на суть была бы отличной!)

        transporter.verify(function (error, success) {
          if (error) {
            console.log(error);
          } else {
            console.log('Server is ready to take our messages');
          }
        });

        const mailOptions = {
          to: user.email,
          from: process.env.MAIL_USER,
          subject: 'Account Activation',
          text: 'hello'
        };
        transporter.sendMail(mailOptions).then((sentMessage) => {
          console.log(sentMessage);
        }, (error) => {
          console.log(error);
        });

...

Спасибо!

Самый полезный комментарий

Та же проблема, есть какое-то решение?

Все 9 Комментарий

Не могу подтвердить. Вот что я вижу при запуске примера сценария:

[2018-03-17 10:03:28] DEBUG Creating transport: nodemailer (4.6.3; +https://nodemailer.com/; SMTP/4.6.3[client:4.6.3])
[2018-03-17 10:03:28] DEBUG Sending mail using SMTP/4.6.3[client:4.6.3]
[2018-03-17 10:03:29] INFO  [eH7FPchPnoc] Secure connection established to 173.194.222.108:465
[2018-03-17 10:03:29] INFO  [syLy5C7WFlc] Secure connection established to 173.194.222.108:465
[2018-03-17 10:03:29] DEBUG [eH7FPchPnoc] SMTP handshake finished
[2018-03-17 10:03:29] DEBUG [syLy5C7WFlc] SMTP handshake finished
[2018-03-17 10:03:29] INFO  [eH7FPchPnoc] User "[email protected]" authenticated
Server is ready to take our messages
[2018-03-17 10:03:29] INFO  [syLy5C7WFlc] User "[email protected]" authenticated
[2018-03-17 10:03:29] INFO  Sending message <[email protected]> to <[email protected]>
[2018-03-17 10:03:29] DEBUG [eH7FPchPnoc] Closing connection to the server using "end"
[2018-03-17 10:03:29] INFO  [eH7FPchPnoc] Connection closed
[2018-03-17 10:03:30] INFO  [syLy5C7WFlc] <276 bytes encoded mime message (source size 273 bytes)>
[2018-03-17 10:03:31] DEBUG [syLy5C7WFlc] Closing connection to the server using "end"
{ accepted: [ '[email protected]' ],
  rejected: [],
  envelopeTime: 815,
  messageTime: 1127,
  messageSize: 276,
  response: '250 2.0.0 OK 1521281011 t68-v6sm91451lfe.59 - gsmtp',
  envelope: { from: '[email protected]', to: [ '[email protected]' ] },
  messageId: '<[email protected]>' }
[2018-03-17 10:03:31] INFO  [syLy5C7WFlc] Connection closed

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

Спасибо @andris9 , попробую копнуть глубже ...

У меня такая же проблема при тестировании с помощью Jest, даже если письмо отправлено правильно:

    const mailConfig = {
        host: 'smtp.gmail.com',
        port: 465,
        secure: true,
        auth: {
            user: 'user',
            pass: 'pass',
        },
    },

    test('production', (done) => {
        const transporter = nodemailer.createTransport(mailConfig);
        mailOptions.subject = 'Test production e-mail ✔';

        transporter.sendMail(mailOptions, (error, info) => {
            if (error) {
                console.log(error);
                throw new Error('failed');
            }
            expect(info.accepted.length).toBe(1);
            expect(info.accepted[0]).toEqual(recipient);
            expect(info.response).toEqual('250 Great success');
            expect(info.envelope.from).toEqual('[email protected]');
            // console.log(info);
            done();
        });
    }, 10000);

В итоге получаю Timeout - Async callback was not invoked within the 10000ms timeout specified by jest.setTimeout. . Это не тот случай, когда я тестирую его с помощью MailGun.

Журналы:

console.log node_modules/nodemailer/lib/shared/index.js:369
    [2018-06-11 16:22:55] INFO  [OAz0YIaTUc] <658 bytes encoded mime message (source size 655 bytes)>

  console.log node_modules/nodemailer/lib/shared/index.js:369
    [2018-06-11 16:22:56] DEBUG [OAz0YIaTUc] S: 250 2.0.0 OK 1528734176 132-v6sm16324480wmr.33 - gsmtp

  console.log node_modules/nodemailer/lib/shared/index.js:369
    [2018-06-11 16:22:56] DEBUG [OAz0YIaTUc] Closing connection to the server using "end"

  console.log node_modules/nodemailer/lib/shared/index.js:369
    [2018-06-11 16:22:56] ERROR Callback error for <[email protected]>: expect(received).toEqual(expected)

Привет, пожалуйста, помогите мне, у меня проблема с nodemailer.

подключить ETIMEDOUT 108.177.97.109:465
Ошибка: подключить ETIMEDOUT 108.177.97.109:465
в Object._errnoException (util.js: 992: 11)
в _exceptionWithHostPort (util.js: 1014: 20)
в TCPConnectWrap.afterConnect [как при завершении] (net.js: 1186: 14)

Та же проблема, есть какое-то решение?

У меня странная ошибка, из-за которой transporter.sendmail не работает, несмотря на включение менее безопасного подключения приложений в Gmail. Он работал раньше, но внезапно перестал работать, несмотря на то, что ничего не менял. Я бы хотел помочь прямо сейчас

@okabamac Та же проблема, у кого-нибудь есть работа? Работает, вдруг нет.
Запрос не завершится через 2 минуты.

{ Error: Connection timeout
    at SMTPConnection._formatError (/sites/project/production/active/web/backend/node_modules/nodemailer/lib/smtp-connection/index.js:606:19)
    at SMTPConnection._onError (/sites/project/production/active/web/backend/node_modules/nodemailer/lib/smtp-connection/index.js:579:20)
    at Timeout._connectionTimeout.setTimeout (/sites/project/production/active/web/backend/node_modules/nodemailer/lib/smtp-connection/index.js:261:18)
    at ontimeout (timers.js:469:11)
    at tryOnTimeout (timers.js:304:5)
    at Timer.listOnTimeout (timers.js:264:5) code: 'ETIMEDOUT', command: 'CONN' }

Получение такой же проблемы! Не изменилось ни капли. Вдруг перестал работать. Пожалуйста помоги!

@RohitGalgali Привет, спасибо за поддержку в этой теме, лол.

Я провел обширное исследование этой проблемы для своего случая, и она на стороне Google, и они не говорят, почему это может быть что-то вроде того, как ваши электронные письма каким-то образом обнаруживаются как спам. Я переключился на mailgun и использовал этот пакет: nodemailer-mailgun-transport в качестве быстрой альтернативы. Их служба бесплатна до определенного количества электронных писем.

Честно говоря, у меня раньше была эта проблема с сервером laravel и postfix, это всегда сторона Google, и я собираюсь избегать использования Gmail в качестве SMTP.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги