はじめに
Python で Email を送るプログラムを一から順に説明しながら追っていきたいと思います。
環境は Mac で PyCharm を使用しています。
ホットメールは Outlook を使用します。
import
まずemailからmessageというものがあるのでそちらとsmtplibを import します。
smtplibは smtp サーバをー使用してメール送るものとなっています。
from email import message
import smtplib
設定
メールを送信する際の設定に関して記述していきます。
メールを送るサーバーを指定します。
ホットメールでsmtp.live.comというものが存在するので、ホストに指定します。
from email import message
import smtplib
smtp_host = 'smtp.live.com'
次にポートを記述します。
今回は587を使用します。
from email import message
import smtplib
smtp_host = 'smtp.live.com'
smtp_port = 587
メールの送信元のアドレスを記述します。
メールアドレスはxxxx@outlook.jpとしていますが自分のメールアドレスを記述すれば大丈夫です。
from email import message
import smtplib
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
送信元が完了したら送信先のアドレスもto_emailとして記述します。
from email import message
import smtplib
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
次にusernameを記述します。
こちらはホットメールのアカウントのユーザーネームなのでメールアドレスがそのまま記述されると思います。
from email import message
import smtplib
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
最後にアカウントのパスワードを記述します。
from email import message
import smtplib
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'
上記の内容でメールを誰から誰に送るかの設定とホットメールにログインするための情報が記述できました。
メッセージ
メッセージを作成します。
先ほど import してきたmessageの中にEmailMessage()というオブジェクトがあるので使用します。
from email import message
import smtplib
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'
msg = message.EmailMessage()
メッセージ内容を記述していきます。
set_content()を使用して()内にメールの本文を打ちます。
from email import message
import smtplib
# メールの設定
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'
msg = message.EmailMessage()
msg.set_content('こんにちは')
メールの件名と送信元、送信先を記述します。
件名はSubject、送信元はFrom、送信先はToになります。
送信元、送信先に関しては先ほど記述したfrom_emailとto_emailの変数を使用します。
from email import message
import smtplib
# メールの設定
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'
msg = message.EmailMessage()
msg.set_content('こんにちは')
msg['Subject'] = 'Test email'
msg['From'] = from_email
msg['To'] = to_email
サーバーの設定
上記で記述したメッセージをサーバーに送るための設定を記述していきます。
サーバーの指定に import してきたsmtplibのSMTPクラスを使用します。
smtplib.SMTP()とし()の中にホストとポートを入れます。
from email import message
import smtplib
# メールの設定
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'
# メッセージ内容
msg = message.EmailMessage()
msg.set_content('こんにちは')
msg['Subject'] = 'Test email'
msg['From'] = from_email
msg['To'] = to_email
server = smtplib.SMTP(smtp_host, smtp_port)
smtp とのコネクションの手順として、まずserver.ehlo()でsmtpサーバーと
今からやりとりしますよと呼んであげます。
from email import message
import smtplib
# メールの設定
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'
# メッセージ内容
msg = message.EmailMessage()
msg.set_content('こんにちは')
msg['Subject'] = 'Test email'
msg['From'] = from_email
msg['To'] = to_email
server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()
セキュアにするためにserver.starttls()と記述した後に
もう一度server.ehlo()とします。
from email import message
import smtplib
# メールの設定
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'
# メッセージ内容
msg = message.EmailMessage()
msg.set_content('こんにちは')
msg['Subject'] = 'Test email'
msg['From'] = from_email
msg['To'] = to_email
server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()
server.starttls()
server.ehlo()
次にホットメールでログインするための情報が聞かれるので
server.login()を使用して()の中にusernameとpasswordを記述します。
from email import message
import smtplib
# メールの設定
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'
# メッセージ内容
msg = message.EmailMessage()
msg.set_content('こんにちは')
msg['Subject'] = 'Test email'
msg['From'] = from_email
msg['To'] = to_email
server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()
server.starttls()
server.ehlo()
server.login(username,password)
ログインできたらsend_message()を使用して()の中に作成したメッセージ内容を入れます。
from email import message
import smtplib
# メールの設定
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'
# メッセージ内容
msg = message.EmailMessage()
msg.set_content('こんにちは')
msg['Subject'] = 'Test email'
msg['From'] = from_email
msg['To'] = to_email
server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()
server.starttls()
server.ehlo()
server.login(username,password)
server.send_message(msg)
一番最後にもうサーバーとやりとりしないので終了させるためにserver.quit()とします。
from email import message
import smtplib
# メールの設定
smtp_host = 'smtp.live.com'
smtp_port = 587
from_email = 'xxxx@outlook.jp'
to_email = 'xxxx@outlook.jp'
username = 'xxxx@outlook.jp'
password = 'xxxxxxxxxxxx'
# メッセージ内容
msg = message.EmailMessage()
msg.set_content('こんにちは')
msg['Subject'] = 'Test email'
msg['From'] = from_email
msg['To'] = to_email
# サーバーとのやりとり
server = smtplib.SMTP(smtp_host, smtp_port)
server.ehlo()
server.starttls()
server.ehlo()
server.login(username,password)
server.send_message(msg)
server.quit()
実行
上記の内容でメールを自分宛にして
実行してみると実際にメールが送信されたことが確認できます。
最後に
このメール送信してくれるプログラムを他のプログラムと紐づけて
いろんなことができたらと思います。
