仅个人记录用:
基于micropython 实现邮件发送。
163邮箱好像不行,微软邮箱实验成功
代码如下:
下方位umail.py文件,保存与程序同一文件夹

# uMail (MicroMail) for MicroPython
# Copyright (c) 2018 Shawwwn <shawwwn1@gmai.com>
# License: MIT
import usocketDEFAULT_TIMEOUT = 10 # sec
LOCAL_DOMAIN = '127.0.0.1'
CMD_EHLO = 'EHLO'
CMD_STARTTLS = 'STARTTLS'
CMD_AUTH = 'AUTH'
CMD_MAIL = 'MAIL'
AUTH_PLAIN = 'PLAIN'
AUTH_LOGIN = 'LOGIN'class SMTP:def cmd(self, cmd_str):sock = self._sock;sock.write('%s\r\n' % cmd_str)resp = []next = Truewhile next:code = sock.read(3)next = sock.read(1) == b'-'resp.append(sock.readline().strip().decode())return int(code), respdef __init__(self, host, port, ssl=False, username=None, password=None):import usslself.username = usernameaddr = usocket.getaddrinfo(host, port)[0][-1]sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)sock.settimeout(DEFAULT_TIMEOUT)sock.connect(addr)if ssl:sock = ussl.wrap_socket(sock)code = int(sock.read(3))sock.readline()assert code==220, 'cant connect to server %d, %s' % (code, resp)self._sock = sockcode, resp = self.cmd(CMD_EHLO + ' ' + LOCAL_DOMAIN)assert code==250, '%d' % codeif CMD_STARTTLS in resp:code, resp = self.cmd(CMD_STARTTLS)assert code==220, 'start tls failed %d, %s' % (code, resp)self._sock = ussl.wrap_socket(sock)if username and password:self.login(username, password)def login(self, username, password):self.username = usernamecode, resp = self.cmd(CMD_EHLO + ' ' + LOCAL_DOMAIN)assert code==250, '%d, %s' % (code, resp)auths = Nonefor feature in resp:if feature[:4].upper() == CMD_AUTH:auths = feature[4:].strip('=').upper().split()assert auths!=None, "no auth method"from ubinascii import b2a_base64 as b64if AUTH_PLAIN in auths:cren = b64("\0%s\0%s" % (username, password))[:-1].decode()code, resp = self.cmd('%s %s %s' % (CMD_AUTH, AUTH_PLAIN, cren))elif AUTH_LOGIN in auths:code, resp = self.cmd("%s %s %s" % (CMD_AUTH, AUTH_LOGIN, b64(username)[:-1].decode()))assert code==334, 'wrong username %d, %s' % (code, resp)code, resp = self.cmd(b64(password)[:-1].decode())else:raise Exception("auth(%s) not supported " % ', '.join(auths))assert code==235 or code==503, 'auth error %d, %s' % (code, resp)return code, respdef to(self, addrs, mail_from=None):mail_from = self.username if mail_from==None else mail_fromcode, resp = self.cmd(CMD_EHLO + ' ' + LOCAL_DOMAIN)assert code==250, '%d' % codecode, resp = self.cmd('MAIL FROM: <%s>' % mail_from)assert code==250, 'sender refused %d, %s' % (code, resp)if isinstance(addrs, str):addrs = [addrs]count = 0for addr in addrs:code, resp = self.cmd('RCPT TO: <%s>' % addr)if code!=250 and code!=251:print('%s refused, %s' % (addr, resp))count += 1assert count!=len(addrs), 'recipient refused, %d, %s' % (code, resp)code, resp = self.cmd('DATA')assert code==354, 'data refused, %d, %s' % (code, resp)return code, respdef write(self, content):self._sock.write(content)def send(self, content=''):if content:self.write(content)self._sock.write('\r\n.\r\n') # the five letter sequence marked for endingline = self._sock.readline()return (int(line[:3]), line[4:].strip().decode())def quit(self):self.cmd("QUIT")self._sock.close()

下方为验证程序,包含wifi连接

# -*- coding: utf-8 -*-
import umail
import time
import machine
from machine import Pin
import network
try:import usocket as socket
except:import socket
import esp
esp.osdebug(None)
import gc
gc.collect()led = machine.Pin(2,machine.Pin.OUT)
io19 = Pin(19, Pin.IN)
sent_flag = 0#下面五个参数使用时修改成自己的,本例程中邮箱使用微软Hotmail邮箱,其他邮箱未经测试
wifi_ssid ="abc"#本地wifi的ssid名称
wifi_password ='13734606258'      #本地wifi的密码myusername = 'zzwceshi@hotmail.com'  #发送端邮箱地址
mypassword = 'a1473698'           #发送端邮箱密码
target_email = '1482847564@qq.com'#接收端邮箱地址SMTP_SERVER   = 'smtp.office365.com'  #hotmail的smtp服务器地址
SMTP_SERVER_PORT   = 587                    #hotmail的smtp服务器端口#连接本地wifi
def connect_wifi():wlan = network.WLAN(network.STA_IF)wlan.active(True)if not wlan.isconnected(): print("scaning......")       all_ssid=str(wlan.scan())if all_ssid.count(wifi_ssid)>0:print('connecting to:', wifi_ssid)   else:print("not found AP")try:wlan.connect('abc', '13734606258')time.sleep(3)except Exception as e:raise eif wlan.isconnected():pass  else:print("connect wlan fail!!!")while not wlan.isconnected():print("reconnect......")wlan.connect(wifi_ssid, wifi_password)if wlan.isconnected():pass  else:time.sleep(10)print('network config:', wlan.ifconfig())def callback(p):global sent_flagif(io19.value()==1):time.sleep_ms(300)if(io19.value()==1):print("door open")led.value(1)sent_flag = 1connect_wifi()
sent_flag = 1
while(True):if(sent_flag == 1):try:print("door open")smtp = umail.SMTP(SMTP_SERVER, SMTP_SERVER_PORT)smtp.login(myusername, mypassword)smtp.to(target_email)smtp.write("From: Devices<"+myusername+">\r\n")  #windows服务器不能单独识别\n  所以加上\rsmtp.write("To: You<"+target_email+">\r\n")      #如果出现报错可以尝试把\r\n换成\nsmtp.write("Subject: WARNING!!!\r\n\n")smtp.write("苏乐乐大伞兵.\r\n")smtp.send()smtp.quit()print("Email was sent successfully!")led.value(0)except Exception as e:print("ERROR!!!")raise e

esp32 smtp发送邮件micropython相关推荐

  1. Lumen / Laravel 使用网易邮箱 SMTP 发送邮件

    Laravel 是目前最流行的PHP框架,而Lumen 是 Laravel 的精简版,主要用于接口开发. Laravel 邮件发送服务基于 Symfony 组件 Swift Mailer. 本文记录了 ...

  2. Lumen / Laravel 5.5 使用网易邮箱 SMTP 发送邮件

    2019独角兽企业重金招聘Python工程师标准>>> Laravel 是目前最流行的PHP框架,而Lumen 是 Laravel 的精简版,主要用于接口开发. Laravel 邮件 ...

  3. Python使用SMTP发送邮件

    1.目标 使用SMTP发送邮件 2.系统环境 操作系统:Win7 64 Python版本:3.7.0 3.代码参考 #config:utf-8                         #强制使 ...

  4. Centos 配置mailx使用外部smtp发送邮件

    今天写定时脚本时,用到监控服务器是否备份成功,配置sentmail和postfix总是出问题,原本想只是接受个信息,没必要那么麻烦,直接配置mailx就能满足了,具体配置如下: 1.安装mailx y ...

  5. python发送qq邮件列表_Python SMTP发送邮件

    发送邮件是个很常用的功能.比如自己写个脚本获取并分析股票或期货数据,如果发现有交易机会.此时可以发个邮件来提醒自己. SMTP即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控 ...

  6. 在.NET中使用SMTP发送邮件

    这是一篇转载,可能对大家很有用啊,放首页看看是否有参考价值.本文提到的方案仍然不能算是完全解决所有问题,最佳的dotNET下通过SMTP(带验证)发送邮件的机制是什么,不知道大家有什么好的看法! 摘要 ...

  7. linux使用外部smtp发送邮件,Centos 配置mailx使用外部smtp发送邮件

    今天写定时脚本时,用到监控服务器是否备份成功,配置sentmail和postfix总是出问题,原本想只是接受个信息,没必要那么麻烦,直接配置mailx就能满足了,具体配置如下: 1.安装mailx y ...

  8. java使用smtp发送邮件问题

    原先使用smtp通过邮箱发送邮件不需要认证,但是后来发现如果使用的是QQ邮箱会报认证失败的异常.原来QQ邮箱是需要ssl认证的,需要先到QQ邮箱里的 设置--账户--POP3/IMAP/SMTP/Ex ...

  9. php mail laravel,Laravel框架实现的使用smtp发送邮件功能示例

    本文实例讲述了Laravel框架实现的使用smtp发送邮件功能.分享给大家供大家参考,具体如下: 1..env文件中配置 MAIL_DRIVER=smtp MAIL_HOST=smtp.邮箱后缀 MA ...

最新文章

  1. 5款常见原型工具,产品特色知多少?
  2. Android系统开机启动流程及init进程浅析
  3. Spring boot删除员工
  4. sed与awk命令小结
  5. 加密算法概念简介--MD5、SHA、DES、3DES、AES、RSA、ECC
  6. linux/ubuntu下安装java开发环境
  7. CCF201809-3 元素选择器(100分)【文本处理】
  8. grafana默认用户名密码_Grafana安装与配置
  9. Camtasia实用技巧之行为效果
  10. 二叉树的镜像(剑指 Offer 27)
  11. 【推荐系统】电影推荐系统(二)
  12. 外贸单证制作常用名称中英互译表
  13. 重新定义QLabel的clicked事件
  14. 基于simulink的微电网虚拟同步发电机vsg控制系统仿真
  15. 【TK精灵】一款界面友好的桌面程序(exe)进程守护管理软件
  16. matlab模拟塞曼图谱,塞曼效应实验中法布里-珀罗标准具的Matlab模拟
  17. 计算机语言圆周率,使用Java如何计算圆周率
  18. 软件测试工程师应该怎样规划自己?成为年薪30W+测试工程师(乾坤未定,皆是黑马)
  19. 数学建模算法与应用【BP神经网络算法】
  20. 模型上线和pmml简介

热门文章

  1. typeof与keyof
  2. 【墨者学院】主机溢出提权漏洞分析
  3. 大商超,小便利,商盟卡统统都能刷
  4. sem竞价账户投放建议技巧学会转化翻倍
  5. lock与unlock
  6. redis分布式锁unlock方法
  7. LabVIEW(十五):右键菜单添加创建VI模版
  8. java生成unix格式文件_Java Windows文本格式和Liunx/Unix文本格式转换
  9. 网易163邮箱无法使用第三方客户端登录问题解决
  10. wolframalpha最新版_WolframAlpha安卓版中文最新版