用Nodemailer发个邮件不算难?


公司一直用邮箱做一些部门间协调的沟通留存,于是乎想用点“编程思维”做些“工作流”来自动化处理;但是公司用的邮箱有点难登呐!

 选用的Nodejs 作为实现语言,那就用Nodemailer来发吧 

上Demo代码测试一下

const nodemailer = require("nodemailer");// async..await is not allowed in global scope, must use a wrapper
async function main() {
  // Generate test SMTP service account from ethereal.email
  // Only needed if you don't have a real mail account for testing
  // let testAccount = await nodemailer.createTestAccount();

  // create reusable transporter object using the default SMTP transport
  let transporter = nodemailer.createTransport({
    host: "mail.***.com.cn",
    port: 587,
    secure: false, // true for 465, false for other ports
    auth: {
        user: 'username', // generated ethereal user
        pass: '********', // generated ethereal password
    },
    ignoreTLS: true,
  });

  // send mail with defined transport object
  let info = await transporter.sendMail({
    from: '"Jimmy 👻" <**@**.com.cn>', // sender address
    to: "***@**.com.cn", // list of receivers
    subject: "Hello ✔", // Subject line
    text: "Hello world?", // plain text body
    html: "<b>Hello world?</b>", // html body
    date: new Date('2021-03-30 23:59:59'),
  });

  console.log("Message sent: %s", info.messageId);
  // Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@example.com>

  // Preview only available when sending through an Ethereal account
  // console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
  // Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...
}

main().catch(console.error);

但等都登不上去  哈哈哈哈果然是难得顺利

于是乎开始全网查资料.....

终于查到一些思绪

需要使用telnet登上服务器看看

telnet  smtp.****.com.cn 587
Connected to mail.****.cn.
Escape character is '^]'.
220 ex01.***.cn Microsoft ESMTP MAIL Service ready at Fri, 23 Apr 2021 18:08:13 +0800
ehlo
250-ex01.****.cn Hello [123.233.***.***]
250-SIZE 1073741824
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-X-ANONYMOUSTLS
250-AUTH GSSAPI NTLM
250-X-EXPS GSSAPI NTLM
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250 XRDST

 

 

 

原来如此  和一般的是不太一样  

继续面向搜索引擎编程~~

找来找去没有比较好的轮子,差点就像自己来造起了

 

在翻翻文档瞧瞧

 

 

发现了个实现过的轮子 wow~

最终经过一番调教终于收到自己给自己发送的邮件

const nodemailer = require("nodemailer");
const nodemailerNTLMAuth = require('nodemailer-ntlm-auth');

// async..await is not allowed in global scope, must use a wrapper
async function main() {
  // Generate test SMTP service account from ethereal.email
  // Only needed if you don't have a real mail account for testing
  // let testAccount = await nodemailer.createTestAccount();

  // create reusable transporter object using the default SMTP transport
  let transporter = nodemailer.createTransport({
    host: "smtp.****.com.cn",
    port: 587,
    secure: false, // true for 465, false for other ports
    auth: {
        type: 'custom',
        method: 'NTLM',
        user: 'username', // generated ethereal user
        pass: '*******', // generated ethereal password
    },
    ignoreTLS: true,
    customAuth: {
        NTLM: nodemailerNTLMAuth,
    }
  });

  // send mail with defined transport object
  let info = await transporter.sendMail({
    from: '"Jimmy 👻" <*****@*****.com.cn>', // sender address
    to: "***@***.com.cn", // list of receivers
    subject: "Hello ✔", // Subject line
    text: "Hello world?", // plain text body
    html: "<b>Hello world?</b>", // html body
    date: new Date('2021-03-30 23:59:59'),
  });

  console.log("Message sent: %s", info.messageId);
  // Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@example.com>

  // Preview only available when sending through an Ethereal account
  // console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
  // Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...
}

main().catch(console.error);

打印邮件ID

Message sent: <466d4875-00e7-e9fa-11dd-e6b65d1b023f@***.com.cn>

OK!待续

EOF

 

posted @ 2021-04-25 10:51  jso0  阅读(81)  评论(0编辑  收藏  举报