メール送信 (send email)

Python

すべて ASCII 文字だけの場合のシンプルな例。

from email.Utils import formatdate
import smtplib

SMTP_HOST = "your.smtp.host"


fromAdr = "my@mail.address"
toAdr = "your@mail.address"
subject = "Sample Subject"
body = "This is\na sample mail"


msg = "From: %s\n" % fromAdr
msg += "To: %s\n" % toAdr
msg += "Subject: %s\n" % subject
msg += "\n"
msg += body

smtplib.SMTP(SMTP_HOST).smtp.sendmail(fromAdr, toAdr, msg)

日本語の場合は、ヘッダと本文をエンコードし、Content-Type の指定行などを追加すれば良いが、それを行うライブラリがある。

Date は SMTP サーバーが付けてくれるが、ここで設定することもできる。

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

SMTP_HOST = "your.smtp.host"
MAILENC = 'iso-2022-jp'


def headerEncode(str):
	return Header(str, MAILENC).encode()

def bodyEncode(str):
	return str.encode(MAILENC)

fromName = u"わたし"
fromAdr = "my@mail.address"
toName = u"あなた"
toAdr = "your@mail.address"
subject = u"サンプル"
body = u"これは\nサンプル。"


msg = MIMEText(bodyEncode(body), 'plain', MAILENC)
msg["From"]    = headerEncode(fromName) + "<" + fromAdr + ">"
msg["To"]      = headerEncode(toName) + "<" + toAdr + ">"
msg["Subject"] = headerEncode(subject)
msg['Date'] = formatdate()

smtplib.SMTP(SMTP_HOST).sendmail(fromAdr, [toAdr], msg.as_string())

Cc や Bcc は、26 行の To と同じように msg に追加し、32 行の [toAdr] に全部まとめて指定すれば良い。

メニューに戻る

Ruby

すべて ASCII 文字だけの場合のシンプルな例。

Date は SMTP サーバーが付けてくれるが、設定してみている。

require 'net/smtp'
require 'time'

SMTP_HOST = "localhost"


fromAdr = "my@mail.address"  
toAdr = "your@mail.address"  
subject = "Sample Subject"  
body = "This is\na sample mail"  
  
  
msg = "From: #{fromAdr}\n"
msg += "To: #{toAdr}\n"
msg += "Subject: #{subject}\n"
msg += "Date: #{Time.now.rfc2822}\n"
msg += "\n"  
msg += body  
  
Net::SMTP.start(SMTP_HOST) {|smtp|
  smtp.send_mail msg, fromAdr, toAdr
}

メニューに戻る