对于登录注册或者一些监控、数据处理的定时任务,可能需要发送邮件的能力。

    今天分享一下使用node server发送邮件的流程。

    发送邮件的过程是,你的客户端给邮件服务器发信息,然后邮件服务器发给目标邮件服务器,目标邮件服务器再通知到客户端,目标用户就收到了。

    使用nodejs发送邮件 - 图1

    如果我们使用网易客户端可以直接用账号密码登录自己的邮箱。使用node server发邮件,相当于第三方客户端。

    第三方客户端指的就是除了网易自己的客户端外的其他客户端。

    发邮件流程变成了

    使用nodejs发送邮件 - 图2

    这里有个问题,使用网易客户端可以直接通过账号密码登录邮箱,第三方客户端使用账号密码登录肯定不安全,因此网易163邮箱提供了授权码,第三方客户端可以通过授权码以用户身份访问邮箱服务器。由于授权码的权限可以控制,比如可以关闭服务,第三方客户端就无法使用授权码登录了,因此授权码比较安全。

    node server发送邮件时候就是一个第三方客户端。

    使用nodejs发送邮件的操作流程是:

    1. 从163邮箱获取授权码
    2. 安装nodemailer
    3. 发送邮件

    接下来详细介绍上述过程。

    获取授权码

    这里以163邮箱为例

    登录邮箱,点击设置,选择POP3/SMTP/IMAP选项使用nodejs发送邮件 - 图3

    选择开启服务

    使用nodejs发送邮件 - 图4


    使用nodejs发送邮件 - 图5

    发送短信验证

    使用nodejs发送邮件 - 图6

    获取到授权码,记录下来

    使用nodejs发送邮件 - 图7

    要注意,授权码只显示一次,因此弹窗时候要记录下来。

    获取到授权码后,就可以用node发送邮件了。

    使用nodemailer发送邮件

    1. import nodemailer from 'nodemailer';
    2. const transporter = nodemailer.createTransport({
    3. service: '163', // 邮箱
    4. secure: true, // 安全的发送模式
    5. auth:{
    6. user: 'lingtiku@163.com', // 发件人邮箱
    7. pass: 'XXXXXXXXXXX' // 授权码
    8. }
    9. });
    10. transporter.sendMail(
    11. {
    12. // 发件人邮箱
    13. from: 'lingtiku@163.com',
    14. // 邮件标题
    15. subject: '灵题库 验证码',
    16. // 目标邮箱
    17. to: 'target@xxx.com',
    18. // 邮件内容
    19. text: `您的验证码是:1234,如非本人操作,请忽略`
    20. },
    21. (err, data) => {
    22. if (err) {
    23. console.error(err);
    24. }
    25. else{
    26. console.log(data);
    27. }
    28. }
    29. );

    关注「灵题库」,更多技术干货。