さり海馬

Thoughts walk away, blog stays.

smtplib でメール出そうとしたらエラー出た件

環境: windows XP sp3, python 2.5.1

いつもお世話になってますな「こちら」を参考にコード書いたんですが、encoding 周りでエラーとか出て、うまく行きませんでした。そんなわけであちこちぐぐってさまよった結果、以下のようなコードで、なんとか回避しましたよ、とメモ。

import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate

def create_message( from_addr, to_addr, subject, body, encoding='iso-2022-jp' ):
    """ creates MIMEText object """
    msg = MIMEText(body.encode(encoding), 'plain', encoding )
    msg['Subject'] = Header(subject.encode(encoding), charset=encoding,
                        header_name = 'Subject' )
    msg['From'] = from_addr
    msg['To'] = to_addr
    msg['Date'] = formatdate()
    return msg


def send( from_addr, to_addr, msg ):
    """ send message using SMTP """
    s = smtplib.SMTP('smtpserver@fraud.jp',25)

    s.sendmail( from_addr, [to_addr], msg.as_string())
    s.close()

main():
    from_addr = 'oreore@fraud.jp'
    to_addr = 'easytarget@somewhere.jp'
    subj = u"お得な情報"
    buf = u"""
今あなただけに秘密でお得な情報を
お知らせします。"""
    subj = subj + unicode(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    msg = create_message( from_addr, to_addr, subj, buf )
    send( from_addr, to_addr, msg )

分かると思いますが、このスクリプトは認証を使わないサーバーへの接続用です。認証があったり、携帯向けに顔文字を使ったりする場合のスクリプトは、やっぱこちらが参考になりますよ。