zoukankan      html  css  js  c++  java
  • node.js发送邮件email

      通常我们做node项目时,可能我们会碰到做一个简单的邮件反馈,那么我们今天就来讨论一下,其中遇到的各种坑。

      总的来说做这个东西,我们可能需要node第三方依赖模块,来实现我们要达到的效果。

      这里我推荐两个模块:https://github.com/pingfanren/Nodemailer

    npm install nodemailer   //这个模块不错,github上星也比较多,还经常有维护,但是坑也比较多

      另一个,https://github.com/eleith/emailjs

    npm install emailjs  --save 

      这里我用的是nodemailer模块,毕竟用的人比较多,跟随主流呢

       它的特点:

    • 使用Unicode编码
    • 支持Windows系统,不需要安装依赖
    • 支持纯文本和HTML格式
    • 支持发送附件(包括大型附件)
    • 在HTML中嵌入图片
    • 支持SSL/STARTTLS安全协议
    • 不同的传输方法,可以使用内置也可以使用外部插件的形式
    • 提供自定义插件支持(比如增加DKIM签名,使用markdown代替HTML等等)
    • 支持XOAUTH2登录验证(以及关于更新的令牌反馈)

    安装使用

    npm install nodemailer --save

      使用内置传输发送邮件,可以查看支持列表:https://github.com/andris9/nodemailer-wellknown#supported-services 

    var nodemailer = require('nodemailer');
    var transporter = nodemailer.createTransport({
        //https://github.com/andris9/nodemailer-wellknown#supported-services 支持列表
        service: 'qq',
        port: 465, // SMTP 端口
        secureConnection: true, // 使用 SSL
        auth: {
            user: '768065158@qq.com',
            //这里密码不是qq密码,是你设置的smtp密码
            pass: '*****'
        }
    });
    
    // NB! No need to recreate the transporter object. You can use
    // the same transporter object for all e-mails
    
    // setup e-mail data with unicode symbols
    var mailOptions = {
        from: '768065158@qq.com', // 发件地址
        to: '528779822@qq.com', // 收件列表
        subject: 'Hello sir', // 标题
        //text和html两者只支持一种
        text: 'Hello world ?', // 标题
        html: '<b>Hello world ?</b>' // html 内容
    };
    
    // send mail with defined transport object
    transporter.sendMail(mailOptions, function(error, info){
        if(error){
            return console.log(error);
        }
        console.log('Message sent: ' + info.response);
    
    });

      发送邮件成功以后我们很少会有操作,但也有极少数情况需要在成功以后会处理一些特殊信息的,这时候info对象就能发挥余热了。info对象中包含了messageId、envelop、accepted和response等属性,具体看文档我不一一介绍了。

      使用其他传输插件   https://github.com/andris9/nodemailer-smtp-transport

    npm install nodemailer-smtp-transport  --save

      其他代码类似,差别只是在创建transport上,所以这里我就写一部分代码:

    var nodemailer = require('nodemailer');
    var smtpTransport = require('nodemailer-smtp-transport');
    
    // 开启一个 SMTP 连接池
    var transport = nodemailer.createTransport(smtpTransport({
      host: "smtp.qq.com", // 主机
      secure: true, // 使用 SSL
      secureConnection: true, // 使用 SSL
      port: 465, // SMTP 端口
      auth: {
        user: "gaolu19901228@qq.com", // 账号
        pass: "******" // 密码
      }
    }));
     
    // 设置邮件内容
    var mailOptions = {
      from: "768065158<768065158@qq.com>", // 发件地址
      to: "528779822@qq.com", // 收件列表
      subject: "Hello world", // 标题
      text:"hello",
      html: "<b>thanks a for visiting!</b> 世界,你好!" // html 内容
    }
     
    // 发送邮件
    transport.sendMail(mailOptions, function(error, response) {
      if (error) {
        console.error(error);
      } else {
        console.log(response);
      }
      transport.close(); // 如果没用,关闭连接池
    });

      下面列出了一些发邮件的字段:

    • from 发送者邮箱
    • sender 发送者区域显示的信息
    • to 接收者邮箱
    • cc 抄送者邮箱
    • bcc 密送者邮箱
    • subject 邮箱主题
    • attachments 附件内容
    • watchHtml apple watch指定的html版本
    • text 文本信息
    • html html内容
    • headers 另加头信息
    • encoding 编码格式

      邮件内容使用UTF-8格式,附件使用二进制流。

      附件

      附件对象包含了下面这些属性:

    • filename 附件名
    • content 内容
    • encoding 编码格式
    • path 文件路径
    • contentType 附件内容类型 

    常见错误

      1.账号未设置该服务

    { [AuthError: Invalid login - 454 Authentication failed, please open smtp flag first!]
      name: 'AuthError',
      data: '454 Authentication failed, please open smtp flag first!',
      stage: 'auth' }

      解决方案:
      QQ邮箱 -> 设置 -> 帐户 -> 开启服务:POP3/SMTP服务

      2.发件账号与认证账号不同

    { [SenderError: Mail from command failed - 501 mail from address must be same as authorization user]
    name: 'SenderError',
    data: '501 mail from address must be same as authorization user',
    stage: 'mail' }

      3.登录认证失败,可能由于smpt独立密码错误导致 我在qq设置的时候就遇到过

    Invalid login - 535 Authentication failed 

      解决方案:

      qq邮箱在测试smtp邮件服务器时,一,在qq邮箱,设置,账户设置中.开启下smtp.二,设置一下独立密码.三,在配置smtp服务器的密码时,注意一定要填你设置的独立密码.不要用邮箱登录密码.否则会提示535 Authentication failed错误.

      

    资料参考:

      qq邮箱smpt设置独立密码:http://wap.yzmg.com/app/103426.html

      nodejs使用 nodemailer发送邮件

      Nodejs发邮件组件Nodemailer

      用nodemailer组件发邮件

      nodemailer使用过程中发现的一些问题

      nodeemail wellkown

  • 相关阅读:
    POJ 1426 Find The Multiple(数论——中国同余定理)
    POJ 2253 Frogger(Dijkstra变形——最短路径最大权值)
    POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)
    POJ 3278 Catch That Cow(模板——BFS)
    HDU 1071 The area
    HDU 1213 How Many Tables(模板——并查集)
    POJ 1611 The Suspects
    light oj 1214 Large Division
    POJ 1258 Agri-Net(Prim算法求解MST)
    POJ 2387 Til the Cows Come Home(模板——Dijkstra算法)
  • 原文地址:https://www.cnblogs.com/pingfan1990/p/4864822.html
Copyright © 2011-2022 走看看