【Python】PythonでGmailを送る

本ページはプロモーションが含まれています

マクロでGmailを送信する方法は前にまとめましたが、同じくPythonでもGmailを送る要件が出てきたのでまとめました

API使うのが正攻法かもですがSMTPの方が楽なので今回はマクロの時と同じくSMTP版を紹介

2段階承認プロセスを有効化

まずはGoogleアカウントページから”2 段階認証プロセス“ページへ

次ページで迷うことなく”2 段階認証プロセスを有効にする“を

はい、完了

ホームに戻るとそれらしき項目が変わったり増えたり

アプリパスワードを生成

続いてアプリパスワードをするためもう一度”2 段階認証プロセス“画面を開いて下部にある”アプリ パスワード“メニューから作成・・・

したい所ですが、いつの頃からか表示されなくなってしまいました・・・(アプリパスワードの設定がされていれば表示されます)

アプリ パスワードは推奨されておらず、ほとんどの場合は不要です。アカウントを安全に保つため、[Google でログイン] を使用してアプリを Google アカウントに接続してください。

とあるのでGoogle的には非推奨なのでしょうが、直リンクなら今でも開けるので↓↓から

https://myaccount.google.com/apppasswords

アプリ名“は適当な名前を設定して”作成“ボタンをクリック

無事16桁のパスワードが生成されました!

サンプルプログラム

早速↑↑で生成したパスワードを使ってプログラムを作ります

ちなみに、画面上のパスワードをコピーすると4文字毎にスペースがありますが、このスペースは残しても削除してもどちらでもOK

import os
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

def send_gmail(mail_subject: str, mail_body: str, mail_to: str, mail_cc: str = '', file_path: str = ''):
    # アプリパスワードを生成したGoogleアカウント
    sendAddress = '**********@gmail.com'
    # 生成したアプリパスワード
    password = 'qwko ejar qsve jspg'

    # メール情報をセット
    msg = MIMEMultipart()
    msg['Subject'] = mail_subject
    msg['From'] = sendAddress
    msg['To'] = mail_to
    if mail_cc != '':
        msg['cc'] = mail_cc
    msg.attach(MIMEText(mail_body))

    # 添付ファイルがあれば
    if os.path.isfile(file_path) is True:
        # ファイル読込
        with open(file_path, 'rb') as f:
            attach = MIMEApplication(f.read())
        # ファイル添付
        attach.add_header('Content-Disposition', 'attachment', filename=file_path)
        msg.attach(attach)
    # SMTPサーバに接続
    smtp = smtplib.SMTP('smtp.gmail.com', 587)
    smtp.ehlo()
    smtp.starttls()
    smtp.login(sendAddress, password)
    # 作成したメールを送信
    smtp.send_message(msg)
    smtp.close()

※宛先が複数とか、添付ファイルが複数とか全く考慮していないので必要に応じて修正推奨です・・

あとがき

最近はLINEやChatwork、Teamsなどチャットツール向けに通知することが多いのですが、外部の個人が対企業向けに通知するには難しい場合があり、Gmailで通知する機会がありましてまとめてみました

途中にも書きましたがGoogle的には非推奨で、APIを使うべしなんでしょうが面倒で・・

SMTPはいつか完全に利用できなくなる日が訪れそうなのでその内APIを利用した送信方法もまとめたいです・・

コメント

タイトルとURLをコピーしました