【Python】コピペで簡単にメール送信

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)

Pythonによる自動化に関する書籍

よかったらシェアしてね!
目次