[Python]透過Gmail SMTP讓Python自動化發送郵件

[Python]透過Gmail SMTP讓Python自動化發送郵件


#Python #Gmail #Python自動化 #SMTP #自動發信 #驗證碼

[Python]透過Gmail SMTP讓Python自動化發送郵件

透過Gmail SMTP服務自動發送郵件

本篇部落格將會詳細介紹如何使用Gmail SMTP設定並透過Python自動化發送郵件。

SMTP代表簡單郵件傳輸協定(SMTP)。它是一種郵件協定,允許你從一個郵件帳戶發送郵件到一個或多個郵件地址。沒有SMTP,郵件通訊將無法正確發送、接受。為SMTP是用於在服務器之間通信,並確定哪些服務器接收或路由你的消息。

設定Gmail SMTP服務

一般來說Gmail SMTP有以下三種設定方式(參考官網)

  • Gmail的SMTP服務器
  • SMTP中繼服務(適用於Google Workspace)
  • 限制的Gmail SMTP服務器

本文則著重於第一種發送方式原因如下:

因為中繼服務僅適用於Google Workspace用戶(付費),用於發送大量郵件,如通訊,觸發/自動發送的郵件或系統郵件作為通知。限制的Gmail服務器則限制了向其他Google Workspace或Gmail郵件地址發送郵件。而Gmail SMTP服務器則沒有這些限制。

如何使用Gmail SMTP設定?

如果你在你的Google帳戶上啟用了雙因素驗證,則可以直接使用SMTP服務器。僅需要額外生成一個應用程序密碼作為存取憑證

***如果你尚未啟用2FA,請參考網路教學先進行啟動***

生成一個應用程序密碼:

  1. 在登錄到你的Google帳戶時,點我連結(轉到你的Google帳戶>安全>登錄到Google>應用程式密碼)
    Google改版應用程式密碼的版面很難找,建議直接透過上方進行搜尋
Google應用程式密碼-Python自動化發送郵件

接著可以輸入自訂的應用程式的名稱我這邊採用Python-Gmail作為名稱

Google應用程式密碼-Python自動化發送郵件

設定完成後會跑出16碼的應用程式密碼,後續就要依靠該密碼憑證讓Python進行STMP的連結並且發送信件

透過Python進行自動發送郵件(Gmail)

可以參考以下的Python程式碼進行測試,以下程式碼主要是想透過Python藉由Gmail的SMTP進行註冊用戶的信箱認證。

主要更改的地方是自己的信箱以及應用程式密碼,信件內容則可以透過HTML格式進行客製化更改

同時參考以下表格將對應的部分進行修改,如果不是採用Gmail請修改成服務商的對應資訊

以下是你需要輸入的Gmail SMTP設置:

  • Gmail SMTP服務器地址:smtp.gmail.com
  • Gmail SMTP名稱:你的全名
  • Gmail SMTP用戶名:你的Gmail地址
  • Gmail SMTP密碼:你的Gmail登錄密碼 or 應用程式密碼
  • Gmail SMTP端口(TLS):587
  • Gmail SMTP端口(SSL):465
  • 是否需要SSL:是
  • 是否需要TLS:是
  • 是否需要/使用身份驗證:是
  • 是否需要/使用安全連接:是
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

def send_verification_email(email: str, verification_link: str):
    try:
        sender_email = "your-email@example.com"  # 這裡填入你的郵箱地址
        receiver_email = email
        password = "your-password"  # 這裡填入你的郵箱密碼或應用密碼

        message = MIMEMultipart("alternative")
        message["Subject"] = "Verify Your Email Address"
        message["From"] = sender_email
        message["To"] = receiver_email

        # 郵件的正文內容
        html = f"""\
        <html>
          <body>
            <p>Hi,<br>
               Thank you for registering with us. Please click on the link below to verify your email address:<br>
               <a href="{verification_link}">Verify Email</a>
            </p>
          </body>
        </html>
        """
        part = MIMEText(html, "html")
        message.attach(part)

        # 創建SMTP連接
        with smtplib.SMTP_SSL('smtp.example.com', 465) as server:  # 這裡的 SMTP 服務器地址需要替換成您的SMTP服務提供商的地址
            server.login(sender_email, password)
            server.sendmail(sender_email, receiver_email, message.as_string())
            print("Verification email sent successfully!")
    except Exception as e:
        print(f"Failed to send verification email: {e}")
  • 郵箱地址和密碼:這裡需要設定發送郵件的郵箱地址和密碼,通常密碼是指應用程序專用密碼
  • 郵件主題和收件人:設定郵件的發送者、接收者和主題。
  • HTML內容:這是郵件的正文部分,使用HTML格式便於添加格式化的文字和連結。
  • SMTP連線:使用SMTP協議與郵件服務提供者的服務器建立安全的連線,通常使用SSL加密。
  • 錯誤處理:加入了基本的錯誤處理機制,以在發送郵件過程中捕捉並報告錯誤。(Email發送非常容易出現例外錯誤)

分享

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *