2018年10月18日 星期四

Python 學習筆記 : 以 Hinet 寄送郵件的方法

我的 Hinet 信箱通常用來申請有的沒的網路服務, 因此每天會有一大堆垃圾信丟過來. 雖然不像 Gmail 那般好用, 但畢竟是我的主要信箱, 因此在做完 Gmail 的寄信測試後, 打鐵趁熱也來測試用 Python 程式透過 Hinet 郵件主機寄信.

事實上在鄉下家的 Raspberry Pi 3 裡面就一直在跑著一支 Python 程式, 用來不斷監視 ADSL 外網 IP 是否有變動, 有的話就會透過我的 Hinet 郵件主機寄一封 E-mail 通知我, 方便我隨時從外地連線回去, 參考 :


不過那程式是參考網路上別人分享的範例修改來的, 當時對 smtplib 還不熟, 只要程式修改後能跑會正常運作即可. 既然現在摸得較熟了, 應該模仿 Gmail 做一個較完整的測試才對.

用 Python 程式透過 Gmail 寄信的測試參考 :

Python 學習筆記 : 以 Gmail 寄送郵件的方法 (一)
Python 學習筆記 : 以 Gmail 寄送郵件的方法 (二)

模組 smtplib 詳細文件參考 :

https://docs.python.org/3/library/smtplib.html

本篇測試主要參考了下列書籍 :

Python 入門邁向高手之路-王者歸來 (深石, 洪錦魁) 第 26 章
Python:網路爬蟲與資料分析入門實戰 (博碩, 林俊瑋) 第 8 章

用 Hinet 郵件主機寄信方式與 Gmail 沒甚麼不同, 其方便之處是沒有 Gmail 兩段式驗證須使用應用程式專用密碼的問題, 但要注意的是, Hinet 郵件主機的位址是 "msr.hinet.net", 不是 ms1, ms2, ... msa 等等, 測試紀錄如下 : 


測試 1 : 傳送 HTML

import smtplib
from email.mime.text import MIMEText

html="""
<!doctype html>
<html>
<head>
  <meta charset='utf-8'>
  <title>HTML mail</title>
</head>
<body>
  <b>HTML 郵件測試</b>
</body>
</html>
"""
mime=MIMEText(html, "html", "utf-8")
mime["Subject"]="Hinet mail sent by Python scripts(HTML)"
mime["From"]="Your best friend"
mime["To"]="mailgroup"
mime["Cc"]="myyahoomail@yahoo.com"
msg=mime.as_string()
print(msg)

smtp=smtplib.SMTP("msr.hinet.net")
smtp.ehlo()
smtp.starttls()
smtp.login("myhinetmail@ms5.hinet.net", "hinetmailpassword")
from_addr="myhinetmail@ms5.hinet.net"
to_addr=["mygmail@gmail.com", "mycompanymail@blablabla.com.tw"]
status=smtp.sendmail(from_addr, to_addr, msg)
if status=={}:
    print("郵件傳送成功!")
else:
    print("郵件傳送失敗!")
smtp.quit()





測試 2 : 傳送文字檔

import smtplib
from email.mime.text import MIMEText

with open("test.txt", "rb") as file:
    filecontent=file.read()

mime=MIMEText(filecontent, "base64", "utf-8")   
mime["Content-Type"]="application/octet-stream"   
mime["Content-Disposition"]='attachment; filename="test.txt"'
mime["Subject"]="Hinet mail sent by Python scripts(TEXT)"
mime["From"]="Your best friend"
mime["To"]="mailgroup"
mime["Cc"]="myyahoomail@yahoo.com"
msg=mime.as_string()
print(msg)

smtp=smtplib.SMTP("msr.hinet.net")
smtp.ehlo()
smtp.starttls()
smtp.login("myhinetmail@ms5.hinet.net", "hinetmailpassword")
from_addr="myhinetmail@ms5.hinet.net"
to_addr=["mygmail@gmail.com", "mycompanymail@blablabla.com.tw"]
status=smtp.sendmail(from_addr, to_addr, msg)
if status=={}:
    print("郵件傳送成功!")
else:
    print("郵件傳送失敗!")
smtp.quit()





測試 3 : 傳送圖片 

import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

with open("桌面_海灣.jpg", "rb") as file:
    filecontent=file.read()

mime=MIMEImage(filecontent, "image/jpeg")
mime["Content-Type"]="image/jpeg"
mime["Content-Disposition"]='attachment; filename="桌面_海灣.jpg"'
mime["Subject"]="Hinet mail sent by Python scripts(圖片附檔測試)"
mime["From"]="Your best friend"
mime["To"]="mailgroup"
mime["Cc"]="myyahoomail@yahoo.com"
msg=mime.as_string()
print(msg)

smtp=smtplib.SMTP("msr.hinet.net")
smtp.ehlo()
smtp.starttls()
smtp.login("myhinetmail@ms5.hinet.net", "hinetmailpassword")
from_addr="myhinetmail@ms5.hinet.net"
to_addr=["mygmail@gmail.com", "mycompanymail@blablabla.com.tw"]
status=smtp.sendmail(from_addr, to_addr, msg)
if status=={}:
    print("郵件傳送成功!")
else:
    print("郵件傳送失敗!")
smtp.quit()




Python 關於 Email 處理的部分總算測完啦! 最近雖然在追韓劇 (百日的郎君 & 我身後的陶斯), 但對 Python 的學習還是非常積極, Python 真的是非常棒的程式語言, 甚麼死骨頭的應用都有專家與高手開發免費的第三方模組, 永遠都找得到巨人的肩膀! 

沒有留言 :