標籤:des msm login sage tp伺服器 plain comm 代碼 ica
由於我使用樹莓派的情境大多數是在沒有顯示器、只用terminal串連它的情況下,所以,它的IP地址有時會在重啟之後變掉(DHCP的),導致我無法通過terminal串連上它。然後我又要很麻煩地登入路由器的管理介面裡,去看它被分配到的新IP是什麼,然後用terminal重連,太麻煩了,不是嗎?作為一個樹莓派玩家,這種麻煩簡直是無法接受的!
為瞭解決這個問題,我讓Pi開機的時候,自動向我指定的Email發送一封郵件,告訴我它此次開機時的IP地址。
步驟: 開機時執行一個指令碼,檢測網路可用性→網路通暢後擷取自己的IP地址→發送郵件到指定的郵箱。
下面一一道來。
1、開機啟動項
開機執行一個指令碼是怎麼做到的?
只需要向 /etc/rc.local 檔案中添加一句話,即可開機執行一個指令碼了:
# send a mail to notify the IP address of Pi/root/data/source/send-ip-mail.sh >> /root/data/source/send-ip-mail.log 2>&1
2、上報IP地址的指令碼實現
send-ip-mail.sh指令碼的內容如下:(vim不會自動建立指定目錄)
#!/bin/bash # check network availabilitywhile truedo TIMEOUT=5 SITE_TO_CHECK="www.126.com" RET_CODE=`curl -I -s --connect-timeout $TIMEOUT $SITE_TO_CHECK -w %{http_code} | tail -n1` if [ "x$RET_CODE" = "x200" ]; then echo "Network OK, will send mail..." break else echo "Network not ready, wait..." sleep 1s fidone # get the IP address of eth0, e.g. "192.168.16.5"ETH0_IP_ADDR=`ifconfig eth0 | sed -n "2,2p" | awk ‘{print substr($2,1)}‘` # send the Emailecho "Current time: `date ‘+%F %T‘`. Enjoy it" | mutt -s "IP Address of Raspberry Pi: $ETH0_IP_ADDR" [email protected]
指令碼很簡單,分為3部分:第一部分檢測網路可用性;第二部分取樹莓派的eth0網卡的IP地址;第三部分發送郵件到指定的Email。
其中,第一部分是必須要有的,因為經過我實驗,在本指令碼執行時,樹莓派的網路還沒有初始化好,此時你直接發郵件是發不出去的。在這裡我通過訪問www.126.com來確定網路可用性。
第三部分需要你預先配置好mutt和msmtp。
3、安裝配置mutt和msmtp
配置好mutt和msmtp後,就可以像上面一樣,通過一句代碼將郵件發送出去。
首先要在Pi上安裝mutt和msmtp:
pacman -S msmtppacman -S mutt
安裝後,先配置msmtp。在你使用者的根目錄下建立檔案 .msmtprc,內容如下:
account defaulthost smtp.126.comfrom [email protected]auth plainuser [email protected]password your_passwordlogfile /var/log/msmtp.log
其中,smtp.126.com是我使用的郵箱的SMTP伺服器位址,[email protected]是我用於發送郵件的郵箱,your_password是郵箱密碼,你要根據你的情況修改。
然後配置mutt。在你使用者的根目錄下建立檔案 .muttrc,內容如下:
set sendmail="/usr/bin/msmtp"set use_from=yesset realname="Alarm"set editor="vim"
其中,realname是寄件者的名字,接收到的郵件中會顯示出來。
4、msmtp測試
測試組態檔案:msmtp -P測試smtp伺服器:msmtp -S
[email protected]:~$ msmtp --host=smtp.163.com --serverinfoSMTP server at smtp.163.com (smtp.163.gslb.netease.com [220.181.12.18]), port 25: 163.com Anti-spam GT for Coremail System (163com[20121016])Capabilities: PIPELINING: Support for command grouping for faster transmission STARTTLS: Support for TLS encryption via the STARTTLS command AUTH: Supported authentication methods: PLAIN LOGINThis server might advertise more or other capabilities when TLS is active.
從返回資訊中我們可以看到,這個smtp是支援TLS的,驗證方式支援 PLAIN 和 LOGIN
5、測試郵件
命令列輸入:
echo "test" |mutt -s "my_first_test" [email protected]
6、至此全部搞定,以後每次Pi開機的時候,就會“自報家門”,我們再也不愁找不到Pi啦!
7、常見問題:
錯誤1:
msmtp: account default not found: no configuration file available
msmtp有bug,必須手動指定對應的設定檔
更改/etc/Muttrc中set sendmail="/usr/bin/msmtp"為set sendmail="/usr/bin/msmtp -C .msmtprc"
錯誤2:
msmtp: GNU SASL: Base 64 coding error in SASL library
遇到Base 64 編碼錯誤
更改~/.msmtprc中auth login
為 auth plain
錯誤3:
語句:echo "testtest"|mutt -F/home/spider/.muttrc -s "tttttttt" [email protected]
發郵件時提示:寄送訊息出現在錯誤,子程式已結束 127 (Exec error.).
無法寄出信件
一般是設定檔案出現問題了,
先使用msmtp進行發送測試
[[email protected] ~]# /usr/local/msmtp/bin/msmtp -SSMTP server at smtp.sohu.com ([220.181.90.34]), port 25: zw_71_37 ESMTP readyCapabilities: STARTTLS: Support for TLS encryption via the STARTTLS command AUTH: Supported authentication methods: PLAIN LOGINThis server might advertise more or other capabilities when TLS is active.
發現沒有問題
再利用msmtp查看當前檔案路徑
[[email protected] ~]# /usr/local/msmtp/bin/msmtp -Ploaded system configuration file /usr/local/msmtp/etc/msmtprcignoring user configuration file /root/.msmtprc: No such file or directoryfalling back to default accountusing account default from /usr/local/msmtp/etc/msmtprchost = smtp.sohu.comport = 25timeout = offprotocol = smtpdomain = localhostauth = LOGINuser = zabbix2018password = *passwordeval = (not set)ntlmdomain = (not set)tls = offtls_starttls = ontls_trust_file = (not set)tls_crl_file = (not set)tls_fingerprint = (not set)tls_key_file = (not set)tls_cert_file = (not set)tls_certcheck = ontls_force_sslv3 = offtls_min_dh_prime_bits = (not set)tls_priorities = (not set)auto_from = offmaildomain = (not set)from = [email protected]dsn_notify = (not set)dsn_return = (not set)keepbcc = offlogfile = /var/log/zabbix/msmtp.logsyslog = (not set)aliases = (not set)reading recipients from the command line
從上面顯示設定檔也沒有什麼問題,但是查看.muttrc時同時注意到雙引號字元錯誤。修改鍵盤配置。
錯誤4:
[email protected]:~/Desktop/python$ sudo echo hello world | mutt -s "test mail" [email protected]
msmtp: authentication failed (method PLAIN)
msmtp: server message: 550 User is locked
msmtp: could not send mail (account default from /home/ding/.msmtprc)
Error sending message, child exited 77 (Insufficient permission.).
Could not send the message.
沒有開啟SMTP服務,新註冊的使用者預設好像是關閉的,一些郵箱是預設關閉smtp服務的,需要手動開啟。
開啟SMTP服務後,將163郵箱伺服器發給的授權密碼作為/home/ding/.msmtprc 檔案中的password=授權碼
參考:http://jingyan.baidu.com/article/3f16e003e327772591c1039f.html?st=2&os=0&bd_page_type=1&net_type=2
錯誤5:
[email protected]:/u1/str0101>mutt -s dfdf [email protected] <.tmp
Error sending message, child exited 69 (Service unavailable.).
Segmentation fault (core dumped)
郵件伺服器限制,查看sent記錄檔。(我由QQ更換為網易郵箱)
擴充:
使用標準pc104鍵盤
國內多使用標準104鍵盤,下面就開始樹莓派的設定。
1、sudo raspi-config
2、進入國際化配置選項
3、修改鍵盤配置
4、選擇PC104標準鍵盤
5、選擇美國標準
6、選擇鍵盤預設布局
7、compose key設定
8、ctrl+alt+backspace按鍵組合,類似於windows的ctrl+alt+delete。
9、完成設定
Raspberry Pi開發之旅-發送郵件記錄時間及IP