Pythonでメールを送信する(SMTP)
前の記事に「Pythonでメールを受信する(POP)」としてPythonでメールを受信するサンプルを書いたが、次に今回は送信する方法を書く。
送信は受信とは違い、相手の環境に合わせた文字コードの変換処理などが必要ないため非常に簡単に書ける。一点アホほど詰まったことがあるが、それは次の記事にする。
- 作者: Mark Lutz,夏目大
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/02/26
- メディア: 大型本
- 購入: 12人 クリック: 423回
- この商品を含むブログ (133件) を見る
いつものように書いたサンプルコードは記事下部に貼り付けておく。
日本語メールは本来「ISO-2022-JP」でやりとりするが、最近はUTF-8を理解するメーラが標準であるかと思うのでUTF-8にてメールを送信することにする。そうすればエンコード処理なども必要なく、送信側も受信側も単純なコードで済むようになる。
このサンプルはメールサーバの認証方式に左右されるので環境によっては動かないかもしれない。lolipopのメールサーバで動作を確認した。
#!/usr/bin/python # coding: UTF-8 import email import smtplib cfg = { "smtp_server": 'YOUR_SMTP_SERVER', "user_name": 'YOUR_SMTP_SERVER_ACCOUNT', "password": 'YOUR_SMTP_SERVER_PASSWORD', "smtp_port": 587, } def send_mail( cfg, from_addr, to_addr, subject, body, encode="utf-8"): def create_message( from_addr, to_addr, subject, body, encode): message = email.MIMEText.MIMEText( body, "plain", encode) message["Date"] = email.Utils.formatdate() message["Subject"] = email.Header.Header( subject, encode) message["From"] = from_addr message["To"] = to_addr return message def send( from_addr, to_addr, message): smtp = smtplib.SMTP( cfg["smtp_server"], cfg["smtp_port"]) smtp.login( cfg["user_name"], cfg["password"]) smtp.sendmail( from_addr, [ to_addr,], message.as_string()) smtp.close() message = create_message( from_addr, to_addr, subject, body, encode) send( from_addr, to_addr, message) send_mail( cfg, "from@example.jp", "to@example.jp", "こんにちわ", "本文だよ")
- 作者: Mark Lutz,夏目大
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/02/26
- メディア: 大型本
- 購入: 12人 クリック: 423回
- この商品を含むブログ (133件) を見る
パーフェクトPython (PERFECT SERIES 5)
- 作者: Pythonサポーターズ,露木誠,ルイス・イアン,石本敦夫,小田切篤,保坂翔馬,大谷弘喜
- 出版社/メーカー: 技術評論社
- 発売日: 2013/03/05
- メディア: 大型本
- 購入: 1人 クリック: 65回
- この商品を含むブログ (30件) を見る
- 作者: Tarek Ziade,稲田直哉,渋川よしき,清水川貴之,森本哲也
- 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
- 発売日: 2010/05/28
- メディア: 大型本
- 購入: 33人 クリック: 791回
- この商品を含むブログ (90件) を見る
- 作者: ビープラウド
- 出版社/メーカー: 秀和システム
- 発売日: 2012/03/26
- メディア: 単行本
- 購入: 6人 クリック: 765回
- この商品を含むブログ (27件) を見る