uni-app 云函数连接smtp 调用发送邮件函数无反应

uni-app 云函数连接smtp 调用发送邮件函数无反应

示例代码:

'use strict';

const nodemailer = require('nodemailer');
const moment = require('moment');

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

exports.main = async (event, context) => {

    nodemailer.createTestAccount((err, account) => {
        // 填入自己的账号和密码
        let transporter = nodemailer.createTransport({
            host: 'smtp.163.com',
            port: 25,
            secure: false, // 如果是 true 则port填写465, 如果 false 则可以填写其它端口号
            auth: {
                user: "xxxx@163.com", // 发件人邮箱
                pass: "xxxx" //163IMAP/SMTP授权码密匙
            }
        });

        // 获取当前时间
        let sendTime = moment().format('MMMM Do YYYY, h:mm:ss a');

        // 填写发件人, 收件人
        let mailOptions = {
            // 发件人地址
            from: 'xxxx@163.com',
            // 收件人列表, 向163邮箱, gmail邮箱, qq邮箱各发一封
            to: 'xxxx@qq.com',
            // 邮件主题
            subject: '系统管理员回复',
            // 文字内容
            text: '天气正好',
            // html内容
            html: '<b>发送时间:' + sendTime + '</b>',

        };

        // 发送邮件
        transporter.sendMail(mailOptions, (error, info) => {
            if (error) {
                console.log(error);
                return error;
            }
            console.log("邮件发送成功~");
            return "hahhaha";
        });
    });

    await sleep(3000)
};

操作步骤:

  • 上传云函数,url调用

预期结果:

  • 发邮件

实际结果:

  • 没有发

bug描述:

根据这篇文章操作的,https://blog.csdn.net/qq_41767945/article/details/111770418 在本地用node运行,邮件成功发送。但是换到云函数怎么都不成功


更多关于uni-app 云函数连接smtp 调用发送邮件函数无反应的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

云端不支持回调, 得用async + await 的组合

更多关于uni-app 云函数连接smtp 调用发送邮件函数无反应的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在使用 uni-app 云函数连接 SMTP 发送邮件时,如果调用发送邮件函数无反应,可能有多种原因。以下是一些常见的问题和解决方法:

1. 检查云函数代码

确保你的云函数代码正确配置了 SMTP 服务的参数(如主机、端口、用户名、密码等),并且正确调用了发送邮件的逻辑。以下是一个使用 nodemailer 发送邮件的示例:

const nodemailer = require('nodemailer');

exports.main = async (event, context) => {
  // 创建一个SMTP传输对象
  let transporter = nodemailer.createTransport({
    host: 'smtp.example.com', // SMTP服务器地址
    port: 465, // SMTP服务器端口
    secure: true, // 使用SSL
    auth: {
      user: 'your-email@example.com', // 邮箱账号
      pass: 'your-email-password', // 邮箱密码
    },
  });

  // 定义邮件内容
  let mailOptions = {
    from: '"Your Name" <your-email@example.com>', // 发件人
    to: event.to, // 收件人
    subject: event.subject, // 邮件主题
    text: event.text, // 邮件正文
  };

  // 发送邮件
  try {
    let info = await transporter.sendMail(mailOptions);
    return {
      code: 0,
      message: '邮件发送成功',
      info: info,
    };
  } catch (error) {
    return {
      code: -1,
      message: '邮件发送失败',
      error: error.message,
    };
  }
};

2. 检查云函数部署

确保你的云函数已经正确部署到云端。你可以通过以下步骤检查:

  • 在 uni-app 项目根目录下运行 npm run deploy:cloudnpm run deploy:functions 部署云函数。
  • 在 uniCloud 控制台中查看云函数是否成功部署。

3. 检查 SMTP 配置

确保你使用的 SMTP 服务器配置正确,特别是以下参数:

  • host: SMTP 服务器地址(如 smtp.gmail.comsmtp.qq.com)。
  • port: SMTP 服务器端口(如 465 或 587)。
  • secure: 是否使用 SSL/TLS(通常为 true)。
  • auth: 包含邮箱账号和密码的对象。

4. 检查网络和权限

确保云函数能够正常访问 SMTP 服务器。有些网络环境可能会限制外部访问,或者 SMTP 服务器可能需要特定的 IP 白名单。

5. 查看日志和返回信息

在调用云函数后,查看返回的信息和日志,以了解是否有错误发生。你可以在 uniCloud 控制台中查看云函数的日志,或者在代码中捕获并返回错误信息。

6. 测试本地环境

在本地开发环境中测试云函数,确保代码在本地可以正常运行。你可以使用 uniCloud.callFunction 调用本地云函数进行测试。

uniCloud.callFunction({
  name: 'sendEmail', // 云函数名称
  data: {
    to: 'recipient@example.com',
    subject: 'Test Email',
    text: 'This is a test email.',
  },
  success(res) {
    console.log('邮件发送成功', res);
  },
  fail(err) {
    console.error('邮件发送失败', err);
  },
});

7. 检查依赖包

确保 nodemailer 或其他依赖包已经正确安装。你可以在云函数的 package.json 中添加依赖:

{
  "dependencies": {
    "nodemailer": "^6.7.0"
  }
}
回到顶部