Flutter中无需服务器发送SMS/Email的实现方案求助
无需服务器在Flutter中发送SMS/Email的免费方案
一、发送Email的无服务器方案
不用自己搭建服务器,直接借助第三方免费邮箱的SMTP服务就能实现,推荐用mailer这个Flutter库,步骤如下:
- 添加依赖到
pubspec.yaml:
dependencies: mailer: ^6.1.0 crypto: ^3.0.3 # 用于SMTP加密
- 编写发送代码(以Gmail为例,注意Gmail需要开启两步验证并生成应用密码,不能使用原账号密码):
import 'package:mailer/mailer.dart'; import 'package:mailer/smtp_server/gmail.dart'; void sendEmail() async { final smtpServer = gmail('你的Gmail邮箱地址', '你的Gmail应用密码'); final message = Message() ..from = Address('你的Gmail邮箱地址', '你的应用名称') ..recipients.add('收件人邮箱地址') ..subject = '测试邮件' ..text = '这是一封无需服务器发送的测试邮件'; try { final sendReport = await send(message, smtpServer); print('邮件发送成功: ${sendReport.toString()}'); } on MailerException catch (e) { print('邮件发送失败: ${e.toString()}'); for (var p in e.problems) { print('问题详情: ${p.code}: ${p.msg}'); } } }
- 其他可选邮箱:Outlook(SMTP地址
smtp.office365.com,端口587)、Yahoo(smtp.mail.yahoo.com),配置对应SMTP参数即可。 - 注意:免费邮箱有发送限额,比如Gmail每天最多发500封,适合个人或小流量场景。
二、发送SMS的无服务器方案
免费无服务器的SMS服务大多是新用户赠送额度,用完需付费,推荐两个靠谱的选项:
1. Twilio
新用户注册会赠送一定额度的免费短信,无需自己搭服务器,直接通过API调用发送:
- 添加
twilio_flutter依赖:
dependencies: twilio_flutter: ^0.0.1
- 编写发送代码:
import 'package:twilio_flutter/twilio_flutter.dart'; void sendSMS() { TwilioFlutter twilioFlutter = TwilioFlutter( accountSid: '你的Twilio Account SID', // 从Twilio控制台获取 authToken: '你的Twilio Auth Token', // 从Twilio控制台获取 twilioNumber: '你的Twilio电话号码' // 从Twilio控制台申请的号码 ); twilioFlutter.sendSMS( toNumber: '收件人电话号码', // 格式如+8613xxxxxxxxx messageBody: '测试短信' ); }
2. Plivo
同样新用户有免费额度,可直接用HTTP请求调用API,无需额外库:
import 'package:http/http.dart' as http; import 'dart:convert'; void sendPlivoSMS() async { final url = Uri.parse('https://api.plivo.com/v1/Account/你的Plivo Auth ID/Message/'); final response = await http.post( url, headers: { 'Authorization': 'Basic ' + base64Encode(utf8.encode('你的Plivo Auth ID:你的Plivo Auth Token')), 'Content-Type': 'application/json', }, body: jsonEncode({ 'src': '你的Plivo号码', 'dst': '收件人号码', 'text': '测试短信' }), ); if (response.statusCode == 202) { print('短信发送成功'); } else { print('短信发送失败: ${response.body}'); } }
- 注意:不要把Auth Token、SID这些敏感信息硬编码在代码里,可通过Flutter的环境变量管理(比如用
flutter_dotenv库),避免打包后泄露。
关于email_auth库的问题
这个库主要用于邮箱验证流程,依赖Firebase或自建服务器发送验证邮件,并非用于直接发送任意邮件,所以不适合你的无服务器发送需求,换用SMTP类的库更直接。
内容的提问来源于stack exchange,提问作者life hack
相关产品推荐
相关产品推荐

