〔ESP32-WROOM-32E〕
〔マイコンのトップに戻る〕
[準備編]
[module編]
[GPIO編]
[通信編]
[ファイル編]
[OLED編]
[WiFi編]
[並行処理編]
[色々編]
import time from ubinascii import b2a_base64 import network import socket import ssl # 各々で設定情報を書き換える ESSID = "BBUser" # Wi-Fi 接続先のネットワーク識別名 Password = "" # SSIDのパスワード MailServerName = "smtp.mail.yahoo.co.jp" # メールサーバー名 HostName = "192.168.4.1" # ESP8266のIPアドレス FromName = "txnww????@yahoo.co.jp" # メールの送信者 ToName = "txnww????@ybb.ne.jp" # メールの送り先 UserName = "txnww????" # プロバイダーのアカウント(ユーザー名) UserPass = "xxxxxxx" # プロバイダーのパスワード # メールコマンドの発行を行う def MsgCMD(sdt): _s = '%s\r\n' % sdt soc.write(_s) print(_s, end='') _s = soc.readline() print(_s) if int(_s.decode()[0:3]) < 400: return True else: return False # 認証コマンドの発行を行う def AUTHCMD(sdt): _s = '%s\r\n' % sdt soc.write(_s) print(_s, end='') while True: _s = soc.readline() print(_s) if _s[0:3] == b'334' or _s[0:3] == b'235': _ans = True break if _s[0:3] == b'500' or not _s: _ans = False break return _ans # 実験用に30秒後に実行する(この間にREPLを起動しましょう) time.sleep(30) # Wi-Fi 接続を設定する為にクライアントオブジェクトのインターフェースを作成する sta_if = network.WLAN(network.STA_IF) if not sta_if.isconnected(): sta_if.active(True) sta_if.connect(ESSID, Password) # ステーションインターフェイスを有効にする while not sta_if.isconnected(): # WiFiネットワークに接続する pass print('\r\n[network config]\r\n', sta_if.ifconfig()) # 指定されたアドレスファミリ、ソケットタイプ、プロトコル番号を使い、新しいソケットを作成する addr = socket.getaddrinfo(MailServerName, 465)[0][-1] soc = socket.socket() soc.connect(addr) # メールサーバーに接続 print('listening on', addr) soc = ssl.wrap_socket(soc) # SSL通信 while True: # 応答を待つ bMsg = soc.readline() print(bMsg) if bMsg.decode()[0:3] == '220': # 挨拶 ans = MsgCMD('EHLO ' + HostName) if not ans: break else: break # SMTP認証 AUTHCMD('AUTH LOGIN') s = b2a_base64(UserName).decode() # BASE64に変換、bytes型オブジェクトで返る AUTHCMD(s[0:len(s)-1]) # データ後ろの改行文字を省く(例:b'UGFzc3dv\n') s = b2a_base64(UserPass).decode() ans = AUTHCMD(s[0:len(s)-1]) if not ans: break # 送信者 ans = MsgCMD('MAIL FROM: ' + FromName) if not ans: break # 送り先 ans = MsgCMD('RCPT TO: ' + ToName) if not ans: break # メールデータ ans = MsgCMD('DATA') if not ans: break # データのヘッダ soc.write('To: ' + ToName + '\r\n') soc.write('From: ' + FromName + '\r\n') soc.write('Subject: ' + 'Mail test' + '\r\n\r\n') # データの本文 soc.write('Did you receive the mail?' + '\r\n') ans = MsgCMD('.') if not ans: break # メール終了 soc.write('QUIT\r\n') break # ソケットを閉じる soc.close() # アクセスポイントインターフェイスを無効にする sta_if.active(False)--------------------------------------------------------------------------------------------------
import time from ubinascii import b2a_base64 import network import socket import ssl # 各々で設定情報を書き換える ESSID = "BBUser" # Wi-Fi 接続先のネットワーク識別名 Password = "" # SSIDのパスワード MailServerName = "smtp.mail.yahoo.co.jp" # メールサーバー名 HostName = "192.168.4.1" # ESP8266のIPアドレス FromName = "txnww????@yahoo.co.jp" # メールの送信者 ToName = "txnww????@ybb.ne.jp" # メールの送り先 UserName = "txnww????" # プロバイダーのアカウント(ユーザー名) UserPass = "xxxxxxx" # プロバイダーのパスワード # マルチパートヘッダ MultiHead = "MIME-version: 1.0\r\nContent-type: multipart/mixed; boundary=\"border\"\r\n" # メールコマンドの発行を行う def MsgCMD(sdt): _s = '%s\r\n' % sdt soc.write(_s) print(_s, end='') _s = soc.readline() print(_s) if int(_s.decode()[0:3]) < 400: return True else: return False # 認証コマンドの発行を行う def AUTHCMD(sdt): _s = '%s\r\n' % sdt soc.write(_s) print(_s, end='') while True: _s = soc.readline() print(_s) if _s[0:3] == b'334' or _s[0:3] == b'235': _ans = True break if _s[0:3] == b'500' or not _s: _ans = False break return _ans # 実験用に30秒後に実行する(この間にREPLを起動しましょう) time.sleep(30) # Wi-Fi 接続を設定する為にクライアントオブジェクトのインターフェースを作成する sta_if = network.WLAN(network.STA_IF) if not sta_if.isconnected(): sta_if.active(True) sta_if.connect(ESSID, Password) # ステーションインターフェイスを有効にする while not sta_if.isconnected(): # WiFiネットワークに接続する pass print('\r\n[network config]\r\n', sta_if.ifconfig()) # 指定されたアドレスファミリ、ソケットタイプ、プロトコル番号を使い、新しいソケットを作成する addr = socket.getaddrinfo(MailServerName, 465)[0][-1] soc = socket.socket() soc.connect(addr) # メールサーバーに接続 print('listening on', addr) soc = ssl.wrap_socket(soc) # SSL通信 while True: # 応答を待つ bMsg = soc.readline() print(bMsg) if bMsg.decode()[0:3] == '220': # 挨拶 ans = MsgCMD('EHLO ' + HostName) if not ans: break else: break # SMTP認証 AUTHCMD('AUTH LOGIN') s = b2a_base64(UserName).decode() # BASE64に変換、bytes型オブジェクトで返る AUTHCMD(s[0:len(s)-1]) # データ後ろの改行文字を省く(例:b'UGFzc3dv\n') s = b2a_base64(UserPass).decode() ans = AUTHCMD(s[0:len(s)-1]) if not ans: break # 送信者 ans = MsgCMD('MAIL FROM: ' + FromName) if not ans: break # 送り先 ans = MsgCMD('RCPT TO: ' + ToName) if not ans: break # メールデータ ans = MsgCMD('DATA') if not ans: break # データのヘッダ soc.write('To: ' + ToName + '\r\n') soc.write('From: ' + FromName + '\r\n') soc.write('Subject: ' + 'Mail test(File attachment)' + '\r\n') soc.write(MultiHead + '\r\n') # パート1のヘッダ soc.write('--border\r\n') soc.write('Content-type: text/plain\r\n\r\n') # パート1のデータの本文 soc.write('Did you receive the mail?' + '\r\n') soc.write('Have you receive the file?' + '\r\n') # パート2のヘッダ soc.write('--border\r\n') soc.write('Content-type: text/html\r\n' 'Content-Disposition: attachment; filename=\"hello.html\"\r\n\r\n') # パート2のファイルデータ with open('hello.html', 'rt') as f: for i in f: soc.write(i) # メールデータ終了 soc.write('--border--\r\n') ans = MsgCMD('.') if not ans: break # メール終了 soc.write('QUIT\r\n') break # ソケットを閉じる soc.close() # アクセスポイントインターフェイスを無効にする sta_if.active(False)--------------------------------------------------------------------------------------------------
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2021 Shigehiro Kimura All Rights Reserved.