uni-app小程序云开发发送邮件
<p><span style="font-size: 18px"><strong>1、发件箱要开通POP3/SMTP服务</strong></span></p><p>步骤:进入QQ邮箱,点击设置--账户--开启</p>
<h3><img src="https://img2020.cnblogs.com/blog/2254149/202106/2254149-20210608174109828-1746833468.png"></h3>
<p> </p>
<p> <img src="https://img2020.cnblogs.com/blog/2254149/202106/2254149-20210608174123629-539550617.png"></p>
<p> </p>
<p> <img src="https://img2020.cnblogs.com/blog/2254149/202106/2254149-20210608174146635-819793715.png"></p>
<p> </p>
<p> 开启服务后,获取<span style="color: rgba(255, 0, 0, 1)">授权码。</span></p>
<p><span style="font-size: 18px"><strong><span style="color: rgba(0, 0, 0, 1)">2、在注册后的小程序下开通云开发、创建环境</span></strong></span></p>
<p><span style="color: rgba(0, 0, 0, 1)">此步骤在微信开发者工具下操作。注意:要用注册过的APPID,测试号不行(无云开发环境)</span></p>
<p><span style="color: rgba(0, 0, 0, 1)">1)在uni-app项目的mainifest.json中配置云函数路径</span></p>
<p><span style="color: rgba(0, 0, 0, 1)"><img src="https://img2020.cnblogs.com/blog/2254149/202106/2254149-20210608175448037-1024991524.png"></span></p>
<p> </p>
<p> </p>
<p> 2)创建/cloudfunctions 目录(uni-app不会主动生成,需手动创建,另外,此文件夹不要为空,可随便加个文件进去)</p>
<p><img src="https://img2020.cnblogs.com/blog/2254149/202106/2254149-20210608175548385-2068374260.png"></p>
<p> </p>
<p> 3)初始化云环境</p>
<p>在 App.vue的 onLanuch 生命周期中初始化</p>
<div class="cnblogs_code" style="text-align: left">
<pre><span style="color: rgba(0, 0, 0, 1)">wx.cloud.init({
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> env 参数说明:
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> env 参数决定接下来小程序发起的云开发调用(wx.cloud.xxx)会默认请求到哪个云环境的资源
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 此处请填入环境 ID, 环境 ID 可打开云控制台查看
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 如不填则使用默认环境(第一个创建的环境)</span>
env: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">XXXXXX</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
traceUser: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
})</span></pre>
</div>
<p>配置好后运行代码,运行后会在 <em>/unpackage/dist/dev</em> 中生成微信小程序代码。但我们先前建的 /cloudfunctions 文件夹并未打包进去,</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(255, 0, 0, 1)">这是因为新建的 /cloudfunctions 并不属于uni-app默认的目录结构,默认不会被打包。<br>解决思路:通过webpack包管理工具的复制插件将/cloudfunctions 复制到项目包中。</span></pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/2254149/202106/2254149-20210609093427951-1301041797.png"></p>
<p> 针对以上打包的小程序代码包中无/cloudfunctions 文件夹的问题,按以下步骤处理</p>
<p>首先,先安装 copy-webpack-plugin,即用命令行窗口打开<span style="color: rgba(255, 0, 0, 1)">项目根目录</span>,在命令窗口输入</p>
<div class="cnblogs_code">
<pre>npm install -save copy-webpack-plugin@5.1.1 //注:请使用版本5,版本6报错</pre>
</div>
<p>其次,在uni-app项目的根目录下创建vue.config.js文件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">const</span> path = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">path</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">const</span> CopyWebpackPlugin = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">copy-webpack-plugin</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
module.exports </span>=<span style="color: rgba(0, 0, 0, 1)"> {
configureWebpack: {
plugins: [
</span><span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> CopyWebpackPlugin([
{
</span><span style="color: rgba(0, 0, 255, 1)">from</span>: path.join(__dirname, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">cloudfunctions</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">),
to: path.join(__dirname, </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">unpackage/dist</span><span style="color: rgba(128, 0, 0, 1)">'</span>, process.env.NODE_ENV === <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">development</span><span style="color: rgba(128, 0, 0, 1)">'</span> ? <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">dev</span><span style="color: rgba(128, 0, 0, 1)">'</span> : <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">build</span><span style="color: rgba(128, 0, 0, 1)">'</span>, process.env.UNI_PLATFORM, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">cloudfunctions</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
}
])
]
}
}</span></pre>
</div>
<p>配置好运行代码,发现 /cloudfunctions 文件夹已经包含在里面了</p>
<p>4)建立云函数</p>
<p>运行代码到微信开发者工具中,发现已经建立了我们之前建立的云文件夹(有云符号和环境ID或环境名)。右击 cloudfunctions 文件夹,选择新建 Node.js 云函数,名为Email(可自行命名)</p>
<p>随后,右键Email选择上传并部署:云端安装依赖(此过程需要时间,可打开云开发控制台在云函数项下查看部署状态)</p>
<p><img src="https://img2020.cnblogs.com/blog/2254149/202106/2254149-20210609100411511-1193032670.png"></p>
<p> </p>
<p> </p>
<p> 若部署失败,可以先把部署的项目删除后再重新部署。</p>
<p>部署成功后,<span style="color: rgba(255, 0, 0, 1)">复制Email文件夹到HBuilder的pages同层目录下(对应你在mainifest.json中配置云函数路径),<span style="color: rgba(0, 0, 0, 1)">比如我就放在“</span></span><span style="color: rgba(0, 0, 0, 1)">cloudfunctions”文件夹下</span></p>
<p>现在,可以在HBuildder里面编写云函数了。</p>
<p><strong><span style="font-size: 18px">3、编写云函数发送邮件</span></strong></p>
<p><span style="color: rgba(0, 0, 0, 1)"> 在HBuilder的“<span style="color: rgba(255, 0, 0, 1)">cloudfunctions</span>”文件夹下的Email文件夹的index.js文件里,编写以下代码</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 云函数入口文件</span>
<span style="color: rgba(0, 0, 255, 1)">const</span> cloud = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">wx-server-sdk</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
cloud.init({
env: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">XXXXXXXXXXX</span><span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">云开发环境ID</span>
<span style="color: rgba(0, 0, 0, 1)">})
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">自己的代码start
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">引入发送邮件的类库</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> nodemailer = require(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">nodemailer</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建一个SMTP客户端配置</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> config =<span style="color: rgba(0, 0, 0, 1)"> {
host:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">smtp.qq.com</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">网易163邮箱smtp.163.com</span>
port:<span style="color: rgba(128, 0, 128, 1)">465</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">网易邮箱端口 25</span>
<span style="color: rgba(0, 0, 0, 1)"> auth:{
user:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">XXXXXXXX@qq.com</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
pass:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">XXXXXXX</span><span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">授权码</span>
<span style="color: rgba(0, 0, 0, 1)"> }
};
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建一个SMTP客户端对象</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> transporter =<span style="color: rgba(0, 0, 0, 1)"> nodemailer.createTransport(config);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">end
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 云函数入口函数</span>
exports.main = <span style="color: rgba(0, 0, 255, 1)">async</span> (<span style="color: rgba(0, 0, 255, 1)">event</span>, context) =><span style="color: rgba(0, 0, 0, 1)"> {
let _text
let _recipients
</span><span style="color: rgba(0, 0, 255, 1)">const</span> wxContext =<span style="color: rgba(0, 0, 0, 1)"> cloud.getWXContext()
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">此处接受从前端js传过来的数据</span>
_text = <span style="color: rgba(0, 0, 255, 1)">event</span><span style="color: rgba(0, 0, 0, 1)">._text
_recipients </span>= <span style="color: rgba(0, 0, 255, 1)">event</span><span style="color: rgba(0, 0, 0, 1)">._recipients
console.log(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">参数:</span><span style="color: rgba(128, 0, 0, 1)">"</span>+_text+<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">:</span><span style="color: rgba(128, 0, 0, 1)">"</span>+<span style="color: rgba(0, 0, 0, 1)">_recipients)
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建一个邮件对象</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> mail =<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">发件人</span>
<span style="color: rgba(0, 0, 255, 1)">from</span>:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">来自XX <XXXXXXXX@qq.com></span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">主题</span>
subject:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">您有新消息啦</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">收件人</span>
to:_recipients, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">接收人
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">邮件内容,text或HTML格式</span>
text:_text, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">邮件内容 </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">可以是链接,也可以是验证码</span>
<span style="color: rgba(0, 0, 0, 1)">};
let res </span>= <span style="color: rgba(0, 0, 255, 1)">await</span><span style="color: rgba(0, 0, 0, 1)"> transporter.sendMail(mail);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> res;
}</span></pre>
</div>
<p><span style="color: rgba(255, 0, 0, 1)">注意:<span style="color: rgba(0, 0, 0, 1)"> </span><span style="color: rgba(0, 0, 0, 1)">要用npm安装依赖包</span></span><span style="color: rgba(0, 0, 0, 1)">nodemailer (电脑首先要安装Node工具),选择<span style="color: rgba(255, 0, 0, 1)">云函数文件夹Email,即cloudfunctions文件夹下的Email文件夹(在外部目录下安装,调用云函数失败)</span>右键选择在终端打开,在打开的命令窗口输入</span></p>
<div class="cnblogs_code">
<pre>npm install nodemailer</pre>
</div>
<p>等待类库安装,安装成功后会显示nodemailer的版本号,此依赖包安装后Email文件夹下出现以下文件</p>
<p><img src="https://img2022.cnblogs.com/blog/2254149/202202/2254149-20220211120926746-1473363954.jpg"></p>
<p> </p>
<p>最后,编写代码后记得<span style="color: rgba(255, 0, 0, 1)">上传并部署到云端</span></p>
<p><strong><span style="font-size: 18px">4、调用云函数发送邮件</span></strong></p>
<p><span style="color: rgba(255, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)">你可以在你想要调用云函数的方法中,编写以下代码</span></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">wx.cloud.callFunction({
name: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Email</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">js携带参数传到云端</span>
<span style="color: rgba(0, 0, 0, 1)"> data:{
_text:</span><span style="color: rgba(0, 0, 255, 1)">this</span>.textMsg, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">邮件内容
</span> _recipients:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">XXXXXX@qq.com</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">收件人</span>
<span style="color: rgba(0, 0, 0, 1)"> },
success(res) {
console.log(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">发送成功</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, res)
},
fail(res) {
console.log(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">发送失败</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, res)
}
})</span></pre>
</div>
<p>随后邮箱就可以收到信息啦。</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>此随笔是自己在做项目时第一次用到小程序云开发,总结一下学习内容,参考以下文章</p>
<p>https://blog.csdn.net/qiushi_1990/article/details/98660081</p>
<p>https://developers.weixin.qq.com/community/minihome/doc/000ee4d6158da04fecaa90f2951c00</p>
<p><span>https://blog.csdn.net/YNEWA/article/details/106019518?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242</span></p>
<p> </p><br><br>
来源:https://www.cnblogs.com/debstu/p/14863941.html
頁:
[1]