Skip to content

Instantly share code, notes, and snippets.

@uchida
Last active August 29, 2015 13:56
Show Gist options
  • Save uchida/9183520 to your computer and use it in GitHub Desktop.
Save uchida/9183520 to your computer and use it in GitHub Desktop.
メール送信コマンド (python 2.6 以上で動作)

使い方

設定名は後述する設定ファイルで設定します。

$ /path/to/mail.py '設定名' '宛先アドレス' '題名' '本文'

設定

SMTP サーバー毎に設定名を設定します。 mail.py を配置したディレクトリに mail.ini を以下の形式で書きます。

[設定名]
host = 利用する SMTP サーバのホスト名
port = 利用する SMTP サーバのポート番号
use_smtps = SMTPS を利用するかどうか
use_starttls = SMTP+STARTTLS を利用するかどうか
user = アカウント名
password = パスワード
from = 差し出し元アドレス

デフォルトで以下に利用できる雛形を用意しています。

  • localhost
  • gmail
  • yahoo (yahoo.co.jp)
  • outlook (outlook.com/outlook.jp/live.jp/hotmail.co.jp)
[localhost]
host = 127.0.0.1
port = 25
from = pandora@localhost
[gmail]
host = smtp.gmail.com
port = 465
use_smtps = yes
user = <アカウント名>@gmail.com
password = <パスワード>
[yahoo]
host = smtp.mail.yahoo.co.jp
port = 465
use_smtps = yes
user = <アカウント名>
password = <パスワード>
from = <アカウント名>@yahoo.co.jp
[outlook]
host = smtp-mail.outlook.com
port = 587
use_starttls = yes
user = <アカウント名>
password = <パスワード>
from = <アカウント名>@outlook.com
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from ConfigParser import SafeConfigParser
import os.path
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate
import smtplib
if __name__ == "__main__":
# 引数を処理
section, to, subject, body = sys.argv[1:5]
# ini ファイルのデフォルト値を設定
defaults = {
'host': '127.0.0.1', 'port': 25,
'use_smtps': 'no',
'use_starttls': 'no',
'user': None, 'password': None,
'from': 'pandora@localhost',
'encoding': 'iso-2022-jp',
}
# ini ファイルを読み込む
config = SafeConfigParser(defaults)
conf_path = os.path.join(os.path.dirname(__file__), 'mail.ini')
config.read(conf_path)
c = dict()
for key, value in config.items(section):
c[key] = value
for key in ['use_smtps', 'use_starttls']:
c[key] = config.getboolean(section, key)
# email メッセージの作成
msg = MIMEText(body, 'plain', c['encoding'])
msg['Subject'] = Header(subject, c['encoding'])
msg['From'] = c['from']
msg['To'] = to
msg['Date'] = formatdate(localtime=True)
# 送信
if c['use_smtps']:
smtp = smtplib.SMTP_SSL(c['host'], c['port'])
else:
smtp = smtplib.SMTP(c['host'], c['port'])
if c['use_starttls']:
smtp.starttls()
if c['user'] and c['password']:
smtp.login(c['user'], c['password'])
smtp.sendmail(c['from'], to.split(','), msg.as_string())
smtp.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment