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()