2017年8月12日土曜日

2段階認証プロセスを使用した Google アカウントを使って Python からメール送信

Google のメールサーバーを使って Python からメール送信する場合、スクリプト内部にて Google アカウントでメールサーバーにログインする必要があります。

しかし、ログインに使用する Google アカウントに 2段階認証プロセスが使われている場合は Google サービスへのログインパスワードではなく、アプリパスワードを Google のサイトで生成し、このアプリパスワードでメールサーバーにログインする必要があります。


Google アカウントのアプリパスワードを生成

このあたりを参考にしてアプリパスワードを生成します。

https://support.google.com/mail/answer/185833?hl=ja


Python スクリプトからメール送信

以下の内容でメールを送信するサンプルコードです。

サンプルコード

#!/usr/bin/env python3

from smtplib import SMTP
from email.mime.text import MIMEText
from email.header import Header

GOOGLE_ACCOUNT = 'example@gmail.com'
APP_PASSWORD = 'xxxxxxxxxxxxxxxx'

def send_mail(to_addrs, subject, mail_body, sub_type='plain'):
    smtp_server = 'smtp.gmail.com'
    port = 587
    from_addr = GOOGLE_ACCOUNT
    encoding = 'utf-8'

    msg = MIMEText(mail_body.encode(encoding), sub_type, encoding)
    msg['Subject'] = Header(subject, encoding)
    msg['From'] = from_addr
    msg['To'] = ', '.join(to_addrs)

    server = SMTP(smtp_server, port)
    server.starttls()
    server.login(GOOGLE_ACCOUNT, APP_PASSWORD)
    server.sendmail(from_addr, to_addrs, msg.as_string())
    server.quit()

body = '''
ほげほげ
ふがふが
ぴよぴよ
'''.strip()

send_mail(['addr1@xxx.example.net', 'addr2@yyy.example.net', 'addr3@zzz.example.net'], 'テストメール', body)

HTML メールを送信

HTML メールを送信する場合は send_mail() の引数 sub_type に ‘html’ を指定します。

html_body = '''
<table border=1>
    <tr><th></th><th>あああ</th><th>いいい</th></tr>
    <tr><td>ううう</td><td>えええ</td><td>おおお</td></tr>
    <tr><td>かかか</td><td>ききき</td><td>くくく</td></tr>
    <tr><td>けけけ</td><td>こここ</td><td>さささ</td></tr>
</table>
'''.strip()

send_mail(['addr1@xxx.example.net', 'addr2@yyy.example.net', 'addr3@zzz.example.net'], 'テスト HTML メール', html_body, 'html')

0 件のコメント:

コメントを投稿