Introduction to Python Applications 2021 - Lecture ?
===
###### tags: `Python` `Python and Its Application 2021`
## Sending E-mail from Your NYCU Account
### 取得寄信用密碼
登入 Gmail
![](https://i.imgur.com/oaI9aoq.png)
選擇安全性
![](https://i.imgur.com/h1aW8Kz.png)
啟動二階段認證後,選擇應用程式密碼。
![](https://i.imgur.com/uViu6VF.png)
選擇其他,並自訂名稱。
![](https://i.imgur.com/RBqE0MT.png)
取得可用來寄信的密碼。建議用完後刪除。
![](https://i.imgur.com/X8gWwY6.png)
## 基本寄信範例
先養成好習慣,將帳號密碼用另外一個本地檔案存放,例如在 PyCharm 中另開一個檔案叫 `mysecret.py` :
```python=
# 帳號密碼
account = "mzshieh@nycu.edu.tw"
password = "xhqqojzofcteytet"
```
接下來使用以下範例程式:
```python=
from email.mime.text import MIMEText
from smtplib import SMTP
from mysecret import account, password
# 帳號密碼如果不用 mysecret 就用下面的兩行,但會隨著程式碼散布你的帳密
# account = "mzshieh@nycu.edu.tw"
# password = "xhqqojzofcteytet"
# 收件人
receiver = "mzhsieh@csie.nctu.edu.tw"
# 寄件人
sender = "mzshieh@nycu.edu.tw"
# 標題與訊息
subject = "Python應用概論期末專題繳交期限"
message = """原定 2021/06/17 截止,如需延長,請來信說明何時繳交。<br/>
除非有授課老師認可之重大變故,不得晚於2021/06/25。<br/><br/>
授課老師謝旻錚"""
# 信件格式設定
msg = MIMEText(message, "html")
msg["Subject"] = subject
msg["To"] = receiver
msg["From"] = sender
# 寄信部分
# 連線到 Gmail 寄信伺服器
server = SMTP("smtp.gmail.com", 587)
# 啟動安全連線
server.starttls()
# 登入:如無申請應用程式密碼,將無法順利登入。
server.login(account, password)
# 送信:真的要送的時候,要把下面的註解取消
# server.send_message(msg)
# 斷線
server.quit()
```
## 客製化寄信範例
使用本範例程式,需準備一個 `students.csv` 作為姓名與 Email address 的對照表,格式大概如下:
```csv=
大學生,mzhsieh@csie.nctu.edu.tw
碩士生,truckski.cs93g@nctu.edu.tw
```
範例程式如下
```python=
from email.mime.text import MIMEText
from smtplib import SMTP
from mysecret import account, password
# 帳號密碼如果不用 mysecret 就用下面的兩行,但會隨著程式碼散布你的帳密
# account = "mzshieh@nycu.edu.tw"
# password = "xhqqojzofcteytet"
# 開學生資料CSV檔案
with open('students.csv', encoding='utf8') as FILE:
# 每個學生執行一次
for line in FILE:
# 取得收件人姓名與 E-mail address
name, address = line.strip().split(",")[:2]
# 收件人
receiver = address
# 寄件人
sender = "mzshieh@nycu.edu.tw"
# 標題與訊息:可針對不同收信人客製化內容
subject = "Python應用概論期末專題繳交期限"
message = f"""{name}同學您好,<br/><br/>
原定 2021/06/17 截止,如需延長,請來信說明何時繳交。<br/>
除非有授課老師認可之重大變故,不得晚於2021/06/25。<br/><br/>
授課老師謝旻錚"""
# 信件格式設定
msg = MIMEText(message, "html")
msg["Subject"] = subject
msg["To"] = receiver
msg["From"] = sender
# 寄信部分
# 連線到 Gmail 寄信伺服器
server = SMTP("smtp.gmail.com", 587)
# 啟動安全連線
server.starttls()
# 登入:如無申請應用程式密碼,將無法順利登入。
server.login(account, password)
# 送信提示:
print(f"Sending to {name}: {address}")
# 送信:真的要送的時候,要把下面的註解取消
# server.send_message(msg)
# 斷線
server.quit()
```