14浏览
查看: 14|回复: 0

[ESP8266/ESP32] 基于ESP32的邮件发送器Outlook版

[复制链接]
【极简低成本小终端】多 WiFi 自动连・3 键选消息・一键发 Outlook 邮件
(DFRobot ESP32 成品方案,无需电脑、无需后台,到手即用)



一、它是什么?
一个超小、超便宜、超稳定的离线一键发邮件工具。
提前写好 WiFi、收件人、邮件内容,按一个键,自动联网 → 自动发送到指定邮箱。
不用手机、不用电脑、不用点开任何软件。




二、核心功能(你想要的全都有)
提前存多个 WiFi(家里 / 公司 / 学校 / 场地都能用)
进入信号范围自动连接
3 个独立按键 = 3 条不同消息 + 3 个不同收件人
完美支持 Outlook / Office365
✅ 上电即用、断网重连、掉电不丢配置
✅ DFRobot 正品硬件,稳定可靠




三、应用场景(真实可落地)
1. 工地 / 设备 / 机房 —— 状态上报
  • 按键 1:设备正常 → 发给管理员
  • 按键 2:需要巡检 → 发给运维
  • 按键 3:紧急告警 → 发给负责人
    不用扫码、不用登账号,工人老人都能一键操作。

2. 校园 / 班级 / 机构 —— 简易通知
  • 老师 / 值班人员一键发:
    已到岗、教室正常、水电关闭、活动结束
    邮件直接进老师 / 领导邮箱,留痕可查。

3. 家庭 / 老人 / 小孩 —— 安全求助
  • 老人一键发:我已到家
  • 一键发:身体正常
  • 一键发:需要帮助
    自动连家里 WiFi,邮件秒发到子女邮箱。

4. 商铺 / 小店 / 仓库 —— 日常报备
  • 到货、清仓、盘点、异常、关门确认
    不用打字,不用登微信,一键邮件存档。

5. 无人值守 / 物联网小站
  • 环境触发、人工确认、事件上报
    低成本替代:云平台、短信费、复杂设备。



四、硬件清单(最便宜 DFRobot 方案)
  • DFRobot FireBeetle ESP32 主控(WiFi 核心)
  • 3 个轻触按键(选择消息、一键发送)
  • 杜邦线
  • 5V USB 供电(充电宝 / 充电头均可)
    可选:0.96 寸 OLED 屏幕(显示联网状态、发送成功 / 失败)



五、为什么选它?
比手机简单:不用解锁、不用打字、不会误触
比对讲机正式:邮件可留档、可追溯、可转发
比云平台便宜:一次做好,永久 0 服务费
比电脑方便:上电就用,随处可放




六、一句话总结
它就是:一个不用屏幕、不用账号、一键发 Outlook 邮件的极简小终端。
适合:告警、上报、通知、求助、巡检、存档。


操作方法:


极简接线图(超好接,不会烧板)
代码在下面,按键一端接 GPIO,一端接 GND


  • 按键 1 → GPIO14
  • 按键 2 → GPIO27
  • 按键 3 → GPIO26
  • 三个按键另一端 全部共接 GND



配套必做设置(我给你打包好)
  • 安装库:SimpleMail
  • Outlook 开启双重验证 → 获取应用密码
  • 代码内填入:
    • 3 组预设 WiFi 名 + 密码
    • 发件 Outlook 账号 + 应用密码
    • 3 个收件邮箱、3 组标题 + 正文
    • DFRobot FireBeetle ESP32 按键接线实拍示意图(极简版)
      接线规则(内部上拉,无需电阻)
      • 按键一端接 ESP32 指定 GPIO
      • 按键另一端统一接 GND
      • 代码已配置内部上拉,按下为低电平触发

      实物接线图
      [img=0,24]data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20 ... eight=%27192%27/%3e[/img]










      3 按键对应引脚(和代码完全匹配)
      • 按键 1(消息 1) → GPIO14
      • 按键 2(消息 2) → GPIO27
      • 按键 3(消息 3) → GPIO26
      • 三个按键的另一脚全部短接,接开发板任意 GND

      接线步骤(文字版)
      • 取 3 个轻触按键,用杜邦线分别将一端连到 GPIO14、GPIO27、GPIO26
      • 三个按键的另一端用一根杜邦线连在一起,再接到 ESP32 的 GND 引脚
      • 供电:MicroUSB 线插开发板,另一端接 5V 电源 / 充电宝 / 电脑 USB
      • (可选)OLED 屏:SDA→GPIO21,SCL→GPIO22,VCC→3.3V,GND→GND



      二、Outlook 应用密码获取步骤(必须开启双重验证)
      前提
      • 必须是 outlook.com / hotmail.com / live.com 个人账号
      • 企业 / 学校邮箱(Office365)需管理员允许应用密码
      • 必须先开启双重验证(2FA),否则看不到 “应用密码” 选项

      步骤 1:登录微软账户安全中心

      步骤 2:开启双重验证(未开的先做)
      • 进入 “安全” → 找到 “高级安全选项”(找不到就点 “查看全部”)
      • 找到 “双重验证” → 点击 “开启
      • 按提示绑定手机号或 Microsoft Authenticator,完成验证
      • 开启成功后,刷新页面

      步骤 3:生成应用密码(ESP32 发邮件专用)
      • 回到 “高级安全选项” → 找到 “应用密码”(开启 2FA 后才出现)
      • 点击 “创建新应用密码” → 名称随便填(如 ESP32-Mail)
      • 系统生成一串无空格的 16 位密码(只显示一次!)
      • 立即复制并保存到记事本,后面填到代码里


        步骤 4:代码中填写(替换你的信息)
        // 发件邮箱配置(Outlook)#define SMTP_SERVER "smtp.office365.com"#define SMTP_PORT 587#define SMTP_USER "你的outlook邮箱@outlook.com"#define SMTP_PASS "这里粘贴你生成的应用密码"
        代码环节:


        #include <WiFi.h>#include <SimpleMail.h>// ===================== 【1、预设3组WiFi】=====================const char* ssidList[] = {  "WiFi_1_Name",  "WiFi_2_Name",  "WiFi_3_Name"};const char* pwdList[] = {  "wifi1_pass",  "wifi2_pass",  "wifi3_pass"};#define WIFI_NUM  3// ===================== 【2、Outlook发件配置】=====================#define SMTP_HOST   "smtp.office365.com"#define SMTP_PORT   587#define MAIL_FROM   "你的Outlook邮箱@outlook.com"#define MAIL_PASS   "你的微软应用密码"// ===================== 【3、3个收件邮箱】=====================String mailTo[3] = {  "user1@qq.com",  "user2@outlook.com",  "user3@163.com"};// ===================== 【4、3条预设邮件内容】=====================String mailTitle[3] = {  "设备通知 ①",  "设备通知 ②",  "设备通知 ③"};String mailBody[3] = {  "这是第一条预设消息:\n设备正常运行。",  "这是第二条预设消息:\n请注意检查现场状态。",  "这是第三条预设消息:\n紧急提醒,请尽快处理。"};// ===================== 【5、按键引脚】=====================#define KEY1  14#define KEY2  27#define KEY3  26SimpleMail mail;// 自动遍历、扫描、连接可用预设WiFibool autoConnectWifi(){  if (WiFi.status() == WL_CONNECTED) return true;  WiFi.disconnect(true);  WiFi.mode(WIFI_STA);  // 扫描周边WiFi  int scanCnt = WiFi.scanNetworks();  for (int i = 0; i < scanCnt; i++)  {    String nowSSID = WiFi.SSID(i);    for (int j = 0; j < WIFI_NUM; j++)    {      if (nowSSID == String(ssidList[j]))      {        WiFi.begin(ssidList[j], pwdList[j]);        unsigned long t = millis();        while (millis() - t < 8000)        {          if (WiFi.status() == WL_CONNECTED)          {            Serial.print("已连接:");            Serial.println(ssidList[j]);            return true;          }          delay(200);        }      }    }  }  Serial.println("未扫描到预设WiFi");  return false;}// 发送邮件函数void sendMail(int idx){  if (!autoConnectWifi())  {    Serial.println("联网失败,无法发送");    return;  }  mail.begin(SMTP_HOST, SMTP_PORT, MAIL_FROM, MAIL_PASS);  mail.sendTo(mailTo[idx]);  mail.setSubject(mailTitle[idx]);  mail.setText(mailBody[idx]);  if (mail.send())  {    Serial.print("✅ 第");    Serial.print(idx+1);    Serial.println(" 封邮件发送成功");  }  else  {    Serial.println("❌ 发送失败:" + mail.errorReason());  }  mail.end();}void setup(){  Serial.begin(115200);  pinMode(KEY1, INPUT_PULLUP);  pinMode(KEY2, INPUT_PULLUP);  pinMode(KEY3, INPUT_PULLUP);  // 上电自动连WiFi  autoConnectWifi();}void loop(){  // 按键按下 = 对应编号邮件发送  if (digitalRead(KEY1) == LOW)  {    delay(80);    if (digitalRead(KEY1) == LOW)    {      sendMail(0);      while(digitalRead(KEY1)==LOW) delay(10);    }  }  if (digitalRead(KEY2) == LOW)  {    delay(80);    if (digitalRead(KEY2) == LOW)    {      sendMail(1);      while(digitalRead(KEY2)==LOW) delay(10);    }  }  if (digitalRead(KEY3) == LOW)  {    delay(80);    if (digitalRead(KEY3) == LOW)    {      sendMail(2);      while(digitalRead(KEY3)==LOW) delay(10);    }  }  // 30秒重检一次网络  static unsigned long netCheckTimer = 0;  if (millis() - netCheckTimer > 30000)  {    autoConnectWifi();    netCheckTimer = millis();  }  delay(50);}














您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2026 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail