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
云端不支持回调, 得用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:cloud或npm run deploy:functions部署云函数。 - 在 uniCloud 控制台中查看云函数是否成功部署。
3. 检查 SMTP 配置
确保你使用的 SMTP 服务器配置正确,特别是以下参数:
host: SMTP 服务器地址(如smtp.gmail.com或smtp.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"
}
}

