前言
在使用 Raspberry Pi(以下簡稱為 Pi)時,如果每一次都要佔用一個電腦的 USB port 非常不方便,而且電腦輸出電壓不一定夠,如果條件允許,我們會希望將 Pi 用變壓器獨立插在插座上,再使用 SSH 這類的工具遠端操作。
但是要 SSH 前必須要知道 IP,我們希望讓 Pi 在開機完畢後自動將 IP 發送至自己的信箱。如此一來之後只要 Pi 有取得 IP 的話就會自動寄信,我們不必再透過 USB 線材以及 screen 指令進行連線。
寄信方式
要寄信的方式有兩種,一種是直接架設 SMTP server 來寄信,但是通常收信方會因為該信件的來源沒有 Domain Name 而不收信(惡意郵件),或是直接將信箱放置垃圾信件處理,所以不建議此種方式。
第二種方法則是利用 Gmail 提供的 SMTP server 來寄信(要自備 Gmail 帳號)。該方式需要先到 Google 低安全性應用程式存取權 允許低安全性應用程式來存取你的帳戶,請斟酌使用。
寄信腳本
請將以下欄位自行填入,並且賦予該腳本執行權限。(建議使用 Python2)
- to
- gmail_user
- gmail_password
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| import subprocess import smtplib import socket from email.mime.text import MIMEText import datetime
to = 'XXX'
gmail_user = 'XXX' gmail_password = 'XXX'
smtpserver = smtplib.SMTP('smtp.gmail.com', 587) smtpserver.ehlo() smtpserver.starttls() smtpserver.login(gmail_user, gmail_password) today = datetime.date.today()
arg='ip route list' p=subprocess.Popen(arg,shell=True,stdout=subprocess.PIPE) data = p.communicate() split_data = data[0].split() ipaddr = split_data[split_data.index('src')+1] my_ip = 'Your ip is %s' % ipaddr msg = MIMEText(my_ip) msg['Subject'] = 'IP For RaspberryPi on %s' % today.strftime('%b %d %Y') msg['From'] = gmail_user msg['To'] = to smtpserver.sendmail(gmail_user, [to], msg.as_string()) smtpserver.quit()
|
開機時執行
在 /etc/rc.local
中執行 Script(mail.py)
1 2 3 4 5 6 7
| _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" /home/pi/mail.py fi
exit 0
|