隨著網路應用普及,自動化訊息傳遞成為提升效率的關鍵。本文將深入探討如何利用 Python 程式語言,結合 EZGmail、ntfy 等工具,實作郵件、簡訊與推播通知的自動化,並示範如何整合客戶資料,客製化訊息內容,滿足不同應用場景的需求。同時,也會探討簡訊閘道的使用方法和限制,以及如何使用 ntfy 服務建立更可靠的推播通知機制。
自動化郵件、簡訊和推播通知
自動化郵件、簡訊和推播通知可以節省大量時間,尤其是在處理大量客戶資料或需要即時通知的任務時。以下將介紹如何使用 Python 實作這些功能。
使用 EZGmail 傳送郵件
EZGmail 是一個簡單的 Gmail API,用於傳送和讀取郵件。首先,您需要安裝 EZGmail 模組:
pip install ezgmail
然後,您可以使用以下程式碼傳送郵件:
import ezgmail
# 登入 Gmail 帳戶
ezgmail.init()
# 設定收件人郵件地址和郵件內容
to = '[email protected]'
subject = 'Hello from Python!'
body = 'This is a test email sent from Python.'
# 傳送郵件
ezgmail.send(to, subject, body)
使用 ntfy 服務傳送推播通知
ntfy 是一個免費的推播通知服務,允許您在不同裝置之間傳送通知。首先,您需要註冊 ntfy 服務並取得 API 金鑰。
然後,您可以使用以下程式碼傳送推播通知:
import requests
# 設定 ntfy API 金鑰和通知內容
api_key = 'YOUR_API_KEY'
message = 'This is a test notification sent from Python.'
# 傳送推播通知
response = requests.post(
f'https://ntfy.sh/{api_key}',
json={'message': message}
)
# 檢查是否成功傳送
if response.status_code == 200:
print('Notification sent successfully!')
else:
print('Error sending notification:', response.text)
自動化郵件任務
您可以使用 Python 自動化郵件任務,例如傳送不同形式的信件給客戶,根據他們的年齡和位置詳細資訊。
以下是範例程式碼:
import ezgmail
import pandas as pd
# 載入客戶資料
customers = pd.read_csv('customers.csv')
# 設定郵件內容
for index, customer in customers.iterrows():
to = customer['email']
subject = 'Hello from Python!'
body = f'Dear {customer["name"]}, this is a test email.'
# 傳送郵件
ezgmail.send(to, subject, body)
使用 Gmail API 和 EZGmail 進行郵件操作
安裝 EZGmail
首先,您需要安裝 EZGmail 這個 Python 套件。EZGmail 是根據官方 Gmail API 開發的,提供了一個簡單易用的介面來控制您的 Gmail 帳戶。您可以按照附錄 A 中的指示來安裝 EZGmail。
啟用 Gmail API
在開始編寫程式碼之前,您需要啟用 Gmail API。這個過程與啟用 Google Sheets API 類別似,因此不再贅述。您需要建立一個新專案,並啟用 Gmail API。完成後,您將會有一個憑證檔和一個 token 檔。
初始化 EZGmail
在 Python 的互動式 shell 中,輸入以下程式碼來初始化 EZGmail:
>>> import ezgmail
>>> ezgmail.init()
如果沒有出現錯誤,則表示 EZGmail 已經正確安裝。
傳送郵件
一旦 EZGmail 組態完成,您就可以使用單一函式呼叫來傳送郵件:
>>> ezgmail.send('收件人郵件地址', '郵件主題', '郵件內容')
如果您想要附加檔案到郵件中,您可以提供一個額外的列表引數給 send() 函式:
>>> ezgmail.send('收件人郵件地址', '郵件主題', '郵件內容', ['附加檔案1.jpg', '附加檔案2.mp3'])
請注意,Gmail 的安全性和反垃圾郵件功能可能會阻止重複傳送具有相同文字的郵件,或包含 .exe 或 .zip 檔案附件的郵件。
您也可以提供選擇性的關鍵字引數 cc 和 bcc 來傳送 carbon 副本和盲 carbon 副本:
>>> ezgmail.send('收件人郵件地址', '郵件主題', '郵件內容', cc='carbon副本收件人郵件地址', bcc='盲carbon副本收件人郵件地址')
讀取郵件
Gmail 將相關的郵件組織成對話執行緒。當您登入 Gmail 時,您實際上是在檢視郵件執行緒,而不是個別的郵件。
EZGmail 有 GmailThread 和 GmailMessage 物件來代表對話執行緒和個別郵件。GmailThread 物件有一個 messages 屬性,其中包含了一個 GmailMessage 物件列表。unread() 函式傳回一個 GmailThread 物件列表,代表 25 個最新的未讀郵件執行緒,您可以將其傳遞給 ezgmail.summary() 函式來列印執行緒的摘要:
>>> unread_threads = ezgmail.unread()
>>> ezgmail.summary(unread_threads)
summary() 函式很方便地顯示了郵件執行緒的摘要,但如果您想要存取特定的郵件或郵件部分,您需要檢查 GmailThread 物件的 messages 屬性。messages 屬性包含了一個 GmailMessage 物件列表,這些物件具有 subject、body、timestamp、sender 和 recipient 屬性來描述郵件:
>>> thread = ezgmail.unread()[0]
>>> message = thread.messages[0]
>>> print(message.subject)
>>> print(message.body)
圖表翻譯:
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam rectangleBackgroundColor #F5F5F5
skinparam rectangleBorderColor #333333
skinparam arrowColor #333333
title 圖表翻譯:
rectangle "啟用" as node1
rectangle "初始化" as node2
rectangle "附加檔案" as node3
rectangle "讀取郵件" as node4
rectangle "messages" as node5
rectangle "subject" as node6
rectangle "body" as node7
node1 --> node2
node2 --> node3
node3 --> node4
node4 --> node5
node5 --> node6
node6 --> node7
@enduml
內容解密:
以上程式碼示範瞭如何使用 EZGmail 來傳送和讀取郵件。首先,初始化 EZGmail 並啟用 Gmail API。然後,使用 send() 函式來傳送郵件,並附加檔案或指定 carbon 副本和盲 carbon 副本。接著,使用 unread() 函式來取得未讀郵件執行緒,並使用 summary() 函式來列印執行緒的摘要。最後,檢查 GmailThread 物件的 messages 屬性來存取特定的郵件或郵件部分。
使用 ezgmail 搜尋和管理 Gmail 郵件
ezgmail 是一個 Python 函式庫,允許您輕鬆地存取和管理您的 Gmail 郵件。以下是如何使用 ezgmail 來搜尋和管理您的郵件。
安裝 ezgmail
首先,您需要安裝 ezgmail 函式庫。您可以使用 pip 來安裝:
pip install ezgmail
使用 ezgmail.unread() 取得未讀郵件
您可以使用 ezgmail.unread() 函式來取得您的未讀郵件。這個函式會傳回一個列表,包含您的未讀郵件。
unread_threads = ezgmail.unread()
使用 ezgmail.recent() 取得最近郵件
您可以使用 ezgmail.recent() 函式來取得您的最近郵件。這個函式會傳回一個列表,包含您的最近郵件。
recent_threads = ezgmail.recent()
使用 ezgmail.search() 搜尋郵件
您可以使用 ezgmail.search() 函式來搜尋您的郵件。這個函式會傳回一個列表,包含符合搜尋條件的郵件。
result_threads = ezgmail.search('RoboCop')
使用搜尋運算元
您可以使用搜尋運算元來篩選郵件。例如,您可以使用 label:UNREAD 來搜尋未讀郵件,使用 subject:hello 來搜尋主題包含 “hello” 的郵件,使用 has:attachment 來搜尋包含附件的郵件。
result_threads = ezgmail.search('label:UNREAD')
result_threads = ezgmail.search('subject:hello')
result_threads = ezgmail.search('has:attachment')
處理郵件
您可以使用 ezgmail 函式庫來處理郵件。例如,您可以使用 ezgmail.summary() 函式來顯示郵件的摘要,使用 ezgmail.thread() 函式來顯示郵件的詳細內容。
ezgmail.summary(result_threads)
ezgmail.thread(result_threads[0])
下載附件
GmailMessage 物件具有 attachments 屬性,這是一個包含郵件附件檔案名稱的清單。您可以將這些名稱傳遞給 GmailMessage 物件的 downloadAttachment() 方法來下載附件。或者,您也可以使用 downloadAllAttachments() 方法一次下載所有附件。
以下是使用 downloadAttachment() 和 downloadAllAttachments() 方法的範例:
import ezgmail
#搜尋包含 "vacation photos" 的郵件
threads = ezgmail.search('vacation photos')
#下載第一封郵件的第一個附件
threads[0].messages[0].downloadAttachment('tulips.jpg')
#下載第一封郵件的所有附件到指定目錄
threads[0].messages[0].downloadAllAttachments(downloadFolder='/path/to/download/folder')
如果附件的檔案名稱已經存在於當前工作目錄中,下載的附件將會自動覆寫現有的檔案。
SMS 電子郵件閘道
由於人們更有可能在手機附近,因此簡訊通常比電子郵件更可靠的方式來傳送立即通知。此外,簡訊通常更短,因此更有可能被閱讀。最簡單(但不是最可靠)的方式來傳送簡訊是透過 SMS 電子郵件閘道,這是一個由手機提供商設立的電子郵件伺服器,接收電子郵件並將其轉發給收件人作為簡訊。
您可以使用 EZGmail 或 smtplib 模組編寫程式來傳送這些電子郵件。手機號碼和手機公司的電子郵件伺服器組成收件人的電子郵件地址。例如,要傳送簡訊給 Verizon 的客戶,其手機號碼為 212-555-1234,您需要傳送電子郵件到 [email protected],其中主體為簡訊內容。
您可以透過搜尋「sms 電子郵件閘道提供商名稱」來找到手機提供商的 SMS 電子郵件閘道。表 20-1 列出了幾個流行提供商的閘道。許多提供商都有單獨的電子郵件伺服器用於 SMS(限制訊息為 160 個字元)和多媒體簡訊服務(MMS)(無字元限制)。如果您想要傳送照片,您需要使用 MMS 閘道並將檔案附加到電子郵件中。
如果您不知道收件人的手機提供商,您可以嘗試使用營運商查詢網站來查詢。您可以透過搜尋「查詢手機號碼的提供商」來找到這些網站。許多這些網站允許您免費查詢數字(雖然它們可能會對於查詢數百或數千個電話號碼透過其 API 收取費用)。
表 20-1:手機提供商的 SMS 電子郵件閘道
| 手機提供商 | SMS 閘道 | MMS 閘道 |
|---|---|---|
| Verizon | @vtext.com | @vzwpix.com |
| AT&T | @txt.att.net | @mms.att.net |
| T-Mobile | @tmomail.net | @tmompix.com |
| Sprint | @messaging.sprintpcs.com | @pm.sprint.com |
注意:此表僅列出了幾個流行的手機提供商。如果您需要查詢其他提供商的閘道,您可以在網上搜尋相關資訊。
行動通訊閘道技術:SMS與MMS
行動通訊技術在現代生活中扮演著重要角色,其中SMS(簡短訊息服務)和MMS(多媒體訊息服務)是兩種常用的行動通訊方式。然而,當我們想要透過電子郵件與行動電話使用者進行通訊時,就需要使用SMS email閘道。
SMS Email閘道的優缺點
雖然SMS email閘道是一種免費且簡單的通訊方式,但它也有一些重大缺點:
- 無法保證訊息送達:您無法確保訊息會及時送達或是否送達成功。
- 無法追蹤訊息狀態:您無法得知訊息是否送達失敗。
- 無法回覆:收件人無法透過SMS email閘道回覆您的訊息。
- 閘道封鎖風險:如果您傳送太多電子郵件,SMS閘道可能會封鎖您的帳戶,而您也無法得知什麼樣的傳送量會被視為「太多」。
行動電話提供商的SMS和MMS閘道
不同的行動電話提供商提供了各自的SMS和MMS閘道,例如:
- Boost Mobile
- Google Fi
- Metro PCS
- Republic Wireless
- Sprint(現已合併至T-Mobile)
每個提供商都有自己的閘道設定和限制,因此在使用SMS email閘道之前,瞭解這些設定和限制是非常重要的。
使用 HTTP Pub-Sub 服務傳送推播通知
在上一節中,我們討論瞭如何使用 SMS 閘道傳送簡訊。然而,這種方法有一些限制,例如簡訊閘道可能不穩定,且每天只能傳送有限數量的簡訊。為瞭解決這些問題,我們可以使用 HTTP Pub-Sub 服務傳送推播通知。
什麼是 HTTP Pub-Sub 服務?
HTTP Pub-Sub 服務是一種允許您傳送和接收短暫、可丟棄的訊息的服務。這種服務使用 HTTP 請求傳送訊息,允許您輕鬆地與其他使用者進行通訊。
使用 ntfy 服務傳送推播通知
ntfy 是一種免費的線上服務,允許您傳送和接收推播通知。要使用 ntfy 服務,您需要在手機上安裝 ntfy 應用程式,並在您的電腦上安裝 Requests 函式庫。
安裝 ntfy 應用程式
您可以在 Android 和 iPhone 的應用商店中找到 ntfy 應用程式。安裝後,您就可以在手機上接收推播通知。
安裝 Requests 函式庫
您可以使用 pip 安裝 Requests 函式庫:
pip install requests
傳送推播通知
要傳送推播通知,您需要使用 Requests 函式庫傳送 HTTP 請求給 ntfy 服務。以下是範例程式碼:
import requests
topic = "AlSweigartZPgxBQ42" # 將此替換為您的秘密主題
message = "Hello, world!"
response = requests.post(f"https://ntfy.sh/{topic}", data=message)
if response.status_code == 200:
print("推播通知已成功傳送")
else:
print("傳送推播通知失敗")
在此範例中,我們使用 requests.post() 函式傳送 HTTP POST 請求給 ntfy 服務。請求中包含了推播通知的主題和訊息內容。
訂閱推播通知
要訂閱推播通知,您需要在手機上安裝 ntfy 應用程式,並在應用程式中輸入您想要訂閱的主題。當有人傳送推播通知給此主題時,您將在手機上接收到通知。
ntfy 服務的限制
ntfy 服務有一些限制,包括:
- 免費使用者每天只能傳送 250 條訊息
- 每條訊息最多隻能包含 4,096 個位元組
- 洪水攻擊可能導致您的 IP 地址被暫時封鎖
如果您需要超越這些限制,您可以在 ntfy 網站上購買付費帳戶。
使用 ntfy 實作 Python 程式的通知功能
ntfy 是一款開源的通知服務,允許使用者透過 HTTP 請求傳送和接收通知。以下是使用 ntfy 的基本步驟:
安裝 ntfy
首先,您需要在手機上安裝 ntfy 應用程式,並訂閱一個主題(topic)。
傳送通知
要傳送通知,您只需要兩行程式碼:
import requests
requests.post('https://ntfy.sh/您的主題名稱', data='您的通知內容')
這將傳送一條通知到您的手機上。
傳輸元資料
ntfy 還允許您傳輸元資料,例如標題、優先順序和標籤。您可以透過在 HTTP 請求中新增標頭來傳輸元資料:
import requests
headers = {'Title': '重要:請閱讀!", 'Tags': '🚨'}
requests.post('https://ntfy.sh/您的主題名稱', data='您的通知內容', headers=headers)
這將傳送一條通知,包含標題和標籤。
接收通知
您的 Python 程式也可以接收通知。您可以使用 requests.get() 函式來接收通知:
import requests
resp = requests.get('https://ntfy.sh/您的主題名稱/json?poll=1')
這將傳回一個 JSON 物件,包含所有通知的內容。
解析通知
您可以使用 json.loads() 函式來解析通知:
import json
notifications = []
for line in resp.text.splitlines():
notification = json.loads(line)
notifications.append(notification)
這將傳回一個包含所有通知的列表。
通知格式
每個通知都是一個 JSON 物件,包含以下鍵值對:
id: 通知的唯一識別符time: 通知的建立時間(Unix 時間戳)expires: 通知的過期時間(Unix 時間戳)message: 通知的內容topic: 通知的主題名稱title: 通知的標題priority: 通知的優先順序tags: 通知的標籤
篩選通知
您可以使用 since 引數來篩選通知。例如:
resp = requests.get('https://ntfy.sh/您的主題名稱/json?poll=1&since=10m')
這將傳回所有在過去 10 分鐘內傳送的通知。
通知與郵件服務
在本章中,我們將探討如何使用Python程式與郵件服務和通知系統進行互動。這包括使用Gmail API、SMS郵件閘道以及ntfy通知服務。
Gmail API
Gmail API是一種強大的工具,允許您使用Python指令碼存取您的Gmail帳戶。為了使用Gmail API,您需要設定一個專門的Gmail帳戶,並啟用OAuth 2.0驗證。這樣可以確保您的程式可以安全地存取您的郵件帳戶。
import ezgmail
# 初始化ezgmail
ezgmail.init()
# 查詢包含附件的郵件
results = ezgmail.search('has:attachment')
# 列印查詢結果
for result in results:
print(result)
SMS郵件閘道
SMS郵件閘道是一種允許您透過郵件傳送簡訊的服務。然而,這種方法需要知道收件人的電信營運商,並且不是傳送訊息的可靠方式。
import smtplib
# 設定SMTP伺服器
server = smtplib.SMTP('smtp.gmail.com', 587)
# 登入郵件帳戶
server.starttls()
server.login('[email protected]', 'your_password')
# 傳送簡訊
server.sendmail('[email protected]', 'recipient_phone_number@carrier_gateway.com', 'Hello, world!')
# 關閉SMTP連線
server.quit()
ntfy通知服務
ntfy是一種簡單的通知服務,允許您透過網際網路傳送和接收通知。您可以使用Requests函式庫在Python中存取ntfy服務。
import requests
# 設定ntfy主題
topic = 'AlSweigartZPgxBQ42'
# 設定通知內容
notification = {
'event': 'message',
'topic': topic,
'title': '重要:請閱讀!',
'message': '租金太高了!',
'priority': 5,
'tags': ['warning', 'neutral_face']
}
# 傳送通知
response = requests.post(f'https://ntfy.sh/{topic}', json=notification)
# 列印回應狀態碼
print(response.status_code)
練習題目
- 使用Gmail API時,什麼是憑證和令牌檔案?
- 在Gmail API中,什麼是「執行緒」和「訊息」物件之間的區別?
- 使用ezgmail.search(),如何查詢包含檔案附件的郵件?
- 使用SMS郵件閘道傳送簡訊的缺點是什麼?
- 哪個Python函式庫可以傳送和接收ntfy通知?
練習程式
為了練習,請撰寫程式來完成以下任務。
雨傘提醒:撰寫一個程式,當天氣預報預測會下雨時,向使用者傳送雨傘提醒通知。
綜觀自動化通知服務的技術生態,從電子郵件、簡訊到推播通知,實作方式日趨多元。透過 Python 的 ezgmail、smtplib 以及 requests 等函式庫,搭配 ntfy 等線上服務,開發者能輕易整合不同通知管道,大幅提升應用程式的使用者經驗。然而,技術限制依然存在。簡訊閘道服務的穩定性與送達率仍有待提升,ntfy 等免費服務也存在訊息數量和大小的限制。此外,資料隱私與安全性考量也不容忽視,尤其在處理大量客戶資料時,更需謹慎選擇合規的服務供應商。
深入剖析各項技術的特性,ezgmail 簡化了 Gmail API 的操作,讓郵件傳送和管理更便捷,但仍受限於 Gmail 的安全策略。SMS 閘道雖然能快速傳送簡訊,但其可靠性和成本效益仍需仔細評估。ntfy 作為輕量級的推播通知服務,易於使用且免費,但在訊息傳輸的可靠性和安全性方面仍有提升空間。開發者需要根據實際應用場景,權衡不同方案的優劣,選擇最合適的技術組合。
展望未來,隨著雲端服務的普及和 5G 技術的發展,預計將出現更多功能更強大、更可靠的自動化通知服務。例如,整合 AI 技術的智慧通知系統,能根據使用者行為和偏好,自動選擇最佳的通知管道和時機,進一步提升通知的有效性和使用者經驗。同時,去中心化通知協定的發展也值得關注,其有望打破中心化平臺的限制,賦予使用者更大的資料控制權。對於追求高效能和使用者友善的應用程式開發者而言,持續關注並學習這些新興技術至關重要。玄貓認為,結合不同通知服務,並根據應用情境彈性調整策略,將是未來自動化通知技術的主流趨勢。