代码之家  ›  专栏  ›  技术社区  ›  JacobB

使用NodeEmailer和Webpack时无法解析dns和child\u进程

  •  8
  • JacobB  · 技术社区  · 9 年前

    我正在尝试使用NodeEmailer发送一封简单的电子邮件,但遇到以下问题。问题似乎出在网页包上。我已经包括了有问题的错误和代码。谢谢

    控制台日志:

    ERROR in ./~/nodemailer/lib/mailer/index.js
    Module not found: Error: Can't resolve 'dns' in 
    '/Users//Users/user/Projects/world-domination/project-folder/node_modules/nodemailer/lib/mailer'
    @ ./~/nodemailer/lib/mailer/index.js 14:12-26
    @ ./~/nodemailer/lib/nodemailer.js
    @ ./src/app/components/contact/contact.component.ts
    @ ./src/app/app.module.ts
    @ ./src/main.ts
    @ multi webpack-dev-server/client?http://localhost:4200 ./src/main.ts
    
    ERROR in ./~/nodemailer/lib/sendmail-transport/index.js
    Module not found: Error: Can't resolve 'child_process' in 
    '/Users/user/Projects/world-domination/project-folder/node_modules/nodemailer/lib/sendmail-transport'
    @ ./~/nodemailer/lib/sendmail-transport/index.js 3:14-38
    @ ./~/nodemailer/lib/nodemailer.js
    @ ./src/app/components/contact/contact.component.ts
    @ ./src/app/app.module.ts
    @ ./src/main.ts
    @ multi webpack-dev-server/client?http://localhost:4200 ./src/main.ts
    

    import { Component, OnInit } from '@angular/core';
    import * as nodemailer from 'nodemailer';
    
    @Component({
      selector: 'app-contact',
      templateUrl: './contact.component.html',
      styleUrls: ['./contact.component.scss']
    })
    export class ContactComponent implements OnInit {
        public sendMessage(): void {
            let transporter = nodemailer.createTransport({
              host: 'smtp.example.com',
              port: 465,
              secure: true,
              auth: {
                user: 'sampleAddress@gmail.com',
                pass: 'samplePassword'
             }
        });
    
        let mailOptions = {
            from: '"Mr. Sender" <sampleAddress@gmail.com>',
            to: 'sampleRecipient@gmail.com',
            subject: 'Test email subject',
            text: 'Test email body'
        };
    
        transporter.sendMail(mailOptions, (error, info) => {
          if (error) {
            return console.log(error);
          }
          console.log('Message %s sent: %s', info.messageId, info.response);
        })
      }
    }
    
    2 回复  |  直到 9 年前
        1
  •  24
  •   Abdullah Adeeb    9 年前

    你根本不能让nodemailer在前端。NodeEmailer和其他依赖它的项目(即gmail send)是为nodejs在后端使用而设计的。

        2
  •  1
  •   JacobB    9 年前

    @阿卜杜拉·阿德卜是正确的。我最终只使用了AWS-SE,并从前端调用它。

    /// <reference types="aws-sdk" />
    import { Component } from '@angular/core';
    import * as aws from 'aws-sdk';
    import { SES } from 'aws-sdk'
    import { AwsConfig } from '../../../awsConfig';
    
    @Component({
      selector: 'app-contact',
      templateUrl: './contact.component.html',
      styleUrls: ['./contact.component.scss']
    })
    export class ContactComponent {
    
      private _ses: SES;
    
      constructor() {
        this.configureSES();
      }
    
      public sendMessage(): void {
        let params;
          params = {
            Destination: {
              ToAddresses: [ 'recipient@sample.com' ]
            },
            Message: {
              Body: {
                Html: {
                  Charset: 'UTF-8',
                  Data: '<h1>HTML needed inside of your email</h1>'
                },
                Text: {
                  Charset: 'UTF-8',
                  Data: 'Or you can use plain text'
                }
              },
              Subject: {
                Charset: 'UTF-8',
                Data: 'Sample message subject'
              }
            },
            Source: 'sender@sample.com' // Must be registered with AWS
          };
          this.sendEmail(params);
        }
      }
    
      private configureSES(): void {
        aws.config.credentials = {
          accessKeyId: AwsConfig.accessKeyId,
          secretAccessKey: AwsConfig.secretAccessKey
        };
        aws.config.update({
          region: AwsConfig.region
        });
        this._ses = new SES({
          apiVersion: '2010-12-01'
        });
      }
    
      private sendEmail(params): void {
        this._ses.sendEmail(params, function(err, data) {
          if (err) {
            console.log(err, err.stack);
          } else {
            console.log(data);
          }
        });
      }
    }