Python2/3でgmailからメールを送信する(gmailライブラリ使用編)

エントリPython2.7でGMailから日本語メールを送信するではテキストメールを送れるスクリプトを書きましたが、HTMLメールだとか添付ファイルはつけられないので、すぐに不満がでてくると思います。というか出てきました。手元では都度少しづつ改造して使っていますが、ライブラリを使うのが効率が良いと思います。

ということで、PyPIを"gmail"で検索して一番に出てくるライブラリを使ってみました。gmailという名前です。直球ですね。

インストール方法

pip install gmail

テキストメールを送信する

#! /usr/bin/python2.7
# coding: utf-8

import gmail
import os

username = 'XXXXX@gmail.com'
password = 'XXXXXXXXXXXXXXX'

client = gmail.GMail(username, password)
message = gmail.Message(u'サブジェクト:こんにちわ世界', to=username, text=u'ボディ:これはテストメッセージです')
client.send(message)
client.close()

HTMLメールを送信する

#! /usr/bin/python2.7
# coding: utf-8

import gmail
import os

username = 'XXXXX@gmail.com'
password = 'XXXXXXXXXXXXXXX'

client = gmail.GMail(username, password)

body_html = u"""<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>テストメッセージ</title>
  </head>
  <body>
    <h1>ほげ!</h1>
  </body>
</html>
"""

message = gmail.Message(u'サブジェクト:こんにちわ世界', to=username, html=body_html)
client.send(message)
client.close()

HTMLメールを添付ファイル付きで送信する

#! /usr/bin/python2.7
# coding: utf-8

import gmail
import os

username = 'XXXXX@gmail.com'
password = 'XXXXXXXXXXXXXXX'

client = gmail.GMail(username, password)

body_html = u"""<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>テストメッセージ</title>
  </head>
  <body>
    <h1>ほげ!</h1>
  </body>
</html>
"""

message = gmail.Message(u'サブジェクト:こんにちわ世界', to=username, html=body_html, attachments=[u'c:/temp/無題2.png'])
client.send(message)
client.close()

コマンドラインからメール送信

cliツールも提供されています。 -m gmail.cli で使用可能。

> python -m gmail.cli --help
usage: cli.py [-h] --username USERNAME [--password PASSWORD] --to TO [--cc CC]
              --subject SUBJECT [--body BODY] [--html HTML]
              [--attachment ATTACHMENT] [--debug]

Send email message via GMail account

optional arguments:
  -h, --help            show this help message and exit
  --username USERNAME, -u USERNAME
                        GMail Username
  --password PASSWORD, -p PASSWORD
                        GMail Password
  --to TO, -t TO        To (multiple allowed)
  --cc CC, -c CC        Cc (multiple allowed)
  --subject SUBJECT, -s SUBJECT
                        Subject
  --body BODY, -b BODY  Message Body (text)
  --html HTML, -l HTML  Message Body (html)
  --attachment ATTACHMENT, -a ATTACHMENT
                        Attachment (multiple allowed)
  --debug, -d           Debug
>python -m gmail.cli ^
--username %GMAIL_USERNAME% ^
--password %GMAIL_PASSWORD% ^
--to=%GMAIL_USERNAME% ^
--subject こんにちわサブジェクト ^
--html "<html><body><h1>foobarbaz</h1></body></html>" ^
--attachment c:\temp\xx.png

Python2.7で添付ファイルのパス文字列に日本語を含んだらUnicodeDecodeErrorで失敗した。Python3.6だと成功。バグかな?
やっぱり自分で書いた方が安心感あるかもしれない…