使用 TypeScript 实现发送 SMTP 邮件的示例代码

// npm install nodemailer --save
import nodemailer from 'nodemailer';

const user = process.env.USER;
const pass = process.env.PASS;
async function sendMail() {
    try {
        // 创建发送邮件的 transporter 对象
        let transporter = nodemailer.createTransport({
            host: 'smtp.163.com',
            port: 465,
            secure: true,
            auth: {
                user,
                pass
            },
        });

        // 配置邮件内容
        let mailOptions = {
            // from 字段的值与您要使用的发件人地址完全一致。SMTP 服务器可能会拒绝来自不受信任的发件人地址的邮件
            from: user,
            // 收件人列表,
            to: '1026911109@qq.com',
            subject: 'Test email',
            // text: 'Hello from Nodemailer!',
            html: `
    <div style="background-color: #f2f2f2; padding: 20px;">
      <h1>您的验证码是:123456</h1>
      <p>请在 5 分钟内使用此验证码进行身份验证。</p>
      <a href="https://example.com/" style="background-color: #007bff; color: #fff; padding: 10px 20px; text-decoration: none;">验证账户</a>
    </div>
  `,
        };

        // 发送邮件
        let info = await transporter.sendMail(mailOptions);
        console.log('Email sent: ' + info.response);
    } catch (error) {
        console.error(error);
    }
}
sendMail();

使用是需要配置环境变量

USER=[发件人邮件]@163.com;PASS=[这里不是密码是SMTP开启时候给你的授权码];ts-node src/mail.ts


发邮件失败通常如下情况

检查发件人地址是否正确
确保在配置邮件内容时,from 字段的值与您要使用的发件人地址完全一致。SMTP 服务器可能会拒绝来自不受信任的发件人地址的邮件。

检查 SMTP 服务器配置是否正确
检查创建 transporter 对象时,auth 对象中的 user 字段是否设置为 SMTP 服务器授权的用户名。这是 SMTP 服务器用来验证发件人身份的方式,如果该用户名不正确,则 SMTP 服务器可能会拒绝发送邮件。

检查 SMTP 服务器配置是否授权了发件人地址
如果发件人地址与 SMTP 服务器配置中授权的地址不一致,则 SMTP 服务器可能会拒绝发送邮件。确保您的 SMTP 服务器已经授权了您要使用的发件人地址。

检查 SMTP 服务器是否启用了安全验证
如果 SMTP 服务器启用了安全验证,则需要配置 transporter 对象的 secure 字段为 true,同时检查 SMTP 服务器的端口号是否正确。

如果您仍然无法解决这个错误,请联系您的 SMTP 服务器管理员以获取更多帮助。