Skip to content

Pythonによるメール送信

smtplibとemailは、Pythonでメールアプリケーションを作成するためのライブラリです。Customers Mail Cloudは、DNSラウンドロビンによるシステム冗長化に対応したPythonライブラリを提供します。

SMTPホスト名

以下のSMTPホスト名を、cmclib.Transportの引数に指定します。

サービスプラン SMTPホスト名
無料トライアル sandbox.smtps.jp
Standard te.smtps.jp
Pro SUBDOMAIN.smtps.jp (SUBDOMAINは各ユーザに割り当てたドメイン)

ライブラリ

Python標準のsmtplib.SMTPクラスの代わりに使用することができるcmclib.Transportクラスを提供します。

cmclib.TransportはDNSラウンドロビンに対応しており、メールトラフィックを2台以上のリレーサーバに負荷分散するとともに、障害発生時は正常に動作しているメールサーバにSMTP接続を自動的にリトライする制御を行っています。

ライブラリは、以下をダウンロードして使用してください。本ライブラリは、Apache License Version 2.0 で提供します。

サンプルコード

emailパッケージとcmclib.Transportクラスを使用したサンプルソースコードです。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import cmclib
import smtplib

from email.mime.text import MIMEText
from email.header import Header
from email.utils import formatdate

class MailSample:

    encode = 'shift_jis'
    from_addr = 'sample@smtps.jp'
    to_addr = 'sample@smtps.jp'

    def create(self, from_addr, to_addr):
        # メール本文を生成
        message = MIMEText(
            u'HENNGE株式会社\r\n' +
            u'山田太郎様\r\n' +
            u'\r\n' +
            u'この度は当社サービスへのお問い合わせ誠にありがとうございます。\r\n' +
            u'お問い合わせにつきまして折り返しご連絡いたします。\r\n' +
            u'今しばらくお時間頂けますよう宜しくお願いいたします。\r\n',
            'plain', self.encode);

        # 宛先(To)アドレスを設定
        message['To'] = to_addr

        # 差出人(From)アドレスを設定
        message['From'] = from_addr

        # 送信日時(Date)を設定
        message['Date'] = formatdate()

        # メールの件名を設定
        message['Subject'] = Header(
            u'【自動返信】お問い合わせについて', self.encode)

        return message

    # SMTP認証を使ってメールを送信する
    # username, password にはAPIユーザ設定にて作成した
    # APIユーザ名とAPIキーを指定します。
    def sendWithAuth(self):
        # メールを生成する
        msg = self.create(self.from_addr, self.to_addr)
        # メールを送信する
        cmcserv = cmclib.Transport('SUBDOMAIN.smtps.jp')
        cmcserv.set_debuglevel(1)
        cmcserv.ehlo()
        cmcserv.login('username', 'password')
        cmcserv.sendmail(self.from_addr, [self.to_addr], msg.as_string())
        cmcserv.quit()

    # SMTP認証を使わずにメールを送信する
    # サービスプラン Pro でIPアクセス認証を設定した場合、
    # SMTP認証無しでメールを送信することができます。
    def send(self):
        # メールを生成する
        msg = self.create(self.from_addr, self.to_addr)
        # メールを送信する
        cmcserv = cmclib.Transport('SUBDOMAIN.smtps.jp')
        cmcserv.set_debuglevel(1)
        cmcserv.sendmail(self.from_addr, [self.to_addr], msg.as_string())
        cmcserv.quit()

if __name__ == '__main__':
    sample = MailSample()
    print "===== send ====="
    sample.send()
    print "===== sendWithAuth ====="
    sample.sendWithAuth()