Pythonで自動化で様々な処理を自動化することが多いですが,エラー通知などをメールを送信できるとさらに便利になります.
Pythonでの送信にはsmtplib
が有力なツールです.
この記事では,smptlib
を使用したメールを送信する処理を記載しています.
目次
コピペ用コード
Gmail用のメール送信プログラムです.コピペしてアカウントやメッセージを変更することで使用できるはずです.
テキストメール用のコード
from email.mime.text import MIMEText
import smtplib
from email import policy
account = "example@gmail.com"
password = "password"
to_email = "foo@example.com"
from_email = "example@gmail.com"
smtp_host = "smtp.gmail.com"
smtp_port = 587
subject = "Subject"
message = "This is test."
msg = MIMEText(message, "plain", policy=policy.default)
msg["Subject"] = subject
msg["To"] = to_email
msg["From"] = from_email
with smtplib.SMTP(smtp_host, smtp_port) as smtp:
smtp.starttls()
smtp.login(account, password)
smtp.send_message(msg)
HTMLメール用のコード
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib
from email import policy
account = "example@gmail.com"
password = "password"
to_email = "foo@example.com"
from_email = "example@gmail.com"
smtp_host = "smtp.gmail.com"
smtp_port = 587
subject = "Subject"
msg = MIMEMultipart('alternative')
msg["Subject"] = subject
msg["To"] = to_email
msg["From"] = from_email
text = "This is Plain Message"
html = """
<html>
<head></head>
<body>
<p>This is HTML Message</p>
</body>
</html>
"""
msg.attach(MIMEText(text, 'plain', policy=policy.default))
msg.attach(MIMEText(html, 'html', policy=policy.default))
with smtplib.SMTP(smtp_host, smtp_port) as smtp:
smtp.starttls()
smtp.login(account, password)
smtp.send_message(msg)
コードの解説と手順
Gmailのアプリパスワードを取得
Gmailアカウントを使用するにあたり,アプリパスワードを設定します.
アプリパスワードの設定方法に関しては,下記記事をご覧ください.
解説:テキストメール用のコード
まずは,必要なライブラリをインポートします.
from email.mime.text import MIMEText
import smtplib
from email import policy
...
アカウントを変数に代入します.ここでは,Gmailを用いることを想定しています.
...
account = "example@gmail.com"
password = "password"
to_email = "foo@example.com"
from_email = "example@gmail.com"
smtp_host = "smtp.gmail.com"
smtp_port = 587
...
account
:Gmailのメールアドレスpassword
:アプリパスワードto_email
:送信先メールアドレスfrom_email
:送信元メールアドレス(基本的にaccout
と同じでOK)smtp_host
:SMTPサーバのホスト名smtp_port
:SMTPサーバのポート番号
次にメールの内容について設定します.
...
subject = "Subject"
message = "This is test."
msg = MIMEText(message, "plain", policy=policy.default)
msg["Subject"] = subject
msg["To"] = to_email
msg["From"] = from_email
...
subject
:メールの件名message
:メールの内容
最後がメールを送信するルーチンです.
...
with smtplib.SMTP(smtp_host, smtp_port) as smtp:
smtp.starttls()
smtp.login(account, password)
smtp.send_message(msg)
解説:HTMLメール用のコード
ライブラリをインポートします.上記のテキストメールで必要だったライブラリに加え,MIMEMultipartをインポートします.
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib
from email import policy
...
次に,メールアカウントの設定をします.ここでは,テキストメールと全く同様です.
...
account = "example@gmail.com"
password = "password"
to_email = "foo@example.com"
from_email = "example@gmail.com"
smtp_host = "smtp.gmail.com"
smtp_port = 587
...
次に,HTMLメールの内容に関して設定します.
マルチパート形式にするため,テキスト用(text=
)とHTML用(html=
)のメッセージを設定します.
...
subject = "Subject"
msg = MIMEMultipart('alternative')
msg["Subject"] = subject
msg["To"] = to_email
msg["From"] = from_email
text = "This is Plain Message"
html = """
<html>
<head></head>
<body>
<p>This is HTML Message</p>
</body>
</html>
"""
msg.attach(MIMEText(text, 'plain', policy=policy.default))
msg.attach(MIMEText(html, 'html', policy=policy.default))
...
最後がメールを送信するルーチンであり,テキストメールと同様です.
with smtplib.SMTP(smtp_host, smtp_port) as smtp:
smtp.starttls()
smtp.login(account, password)
smtp.send_message(msg)