↑ページトップへ

PythonでHTMLメールを送る

Python 3

HTMLメールの送信

PythonでHTMLメールを送るには標準ライブラリ―のsmtplibとemailを使用します。

以下の例では平文メールとHTMLメールをまとめて1つのメールとして送信しています。これによってHTMLを表示できないメールクライアントでは平文メールが表示されるようになります。


import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formataddr

# メール送信に必要な情報
to_address = "your.name@example.com" # 送信先メールアドレス
from_address = "my.name@example.com"  # 送信元メールアドレス
smtp_host = "smtp.serveraddress.com" # SMTPサーバーアドレス
smtp_port = 587 # SMTPポート(通常は587)
smtp_username = "my.name@example.com" # SMTPサーバーのログインユーザー名
smtp_password = "my-password" # SMTPサーバーのログインパスワード

# メッセージコンテナの作成
msg = MIMEMultipart("alternative") # MIME type は multipart/alternative
msg["Subject"] = "Python でメールを送信するサンプル" # メール表題
msg["From"] = formataddr(("MyName", from_address)) # 送信元の名前とメールアドレスの設定。メールアドレス直接指定でも可。
msg["To"] = to_address # 送信先のメールアドレスの設定

# 平文でのメッセージ本体の作成
text = f"""\
	テキストメッセージはここに書きます。\n
	下の URL で Python 公式ページが開きます。
	https://www.python.org/
	"""

# HTMLでのメッセージ本体の作成
html = f"""\
	<!DOCTYPE html>
	<html>
	<head>
		<title>Python HTML メールサンプル</title>
		<style>
			body {
				background-color: #f6f9fc;
			}
			.container {
				margin: auto;
				width: 60%;
				padding: 10px;
				border-radius: 20px;
				background-color: white;
			}
			.link {
				background-color: #007fff;
				width: fit-content;
				margin: 5px;
				padding: 10px 20px;
				border-radius: 5px;
			}
			.link a{
				color: aliceblue;
				text-decoration: none;
			}
		</style>
	</head>
	<body>
		<div class="container">
			<p>
				HTML メッセージはここに書きます。<br/>
				下のボタンを押すと Python 公式ページが開きます。
			</p>
			<div class="link"><a href="https://www.python.org/">Python 公式ページ</a></div>
		</div>
	</body>
	</html>
	"""

# メッセージコンテナにメッセージ本体を設定
msg.attach(MIMEText(text, "plain"))
msg.attach(MIMEText(html, "html"))

# SMTPサーバーに接続
server = smtplib.SMTP(smtp_host, smtp_port)
server.login(smtp_username, smtp_password)

# メールの送信
server.sendmail(from_address, to_address, msg.as_string())

# SMTPサーバー接続を切断
server.quit()
		

送信したメールは例えばGmailであれば以下のように表示されます。

スクリーンショット
Gmailで表示した場合

SMTPサーバーについて

メールの送信には別途メールサーバー(SMTPサーバー)が必要です。例えばGmailをSMTPサーバーとして使用する場合には以下の情報を準備しておきます。

  • SMTPサーバーアドレス:smtp.gmail.com
  • SMTP名:自分の氏名または表示名
  • SMTPユーザー名:自分のGmailアドレス(例. my.name@gmail.com)
  • SMTPパスワード:自分のGmailのログインパスワード
  • SMTPポート(TLS): 587
  • SMTPポート(SSL): 465

SSL使用に場合

使用するSMTPサーバーがSSLに対応している場合は以下のようにsmtplib.SMTP()の代わりにsmtplib.SMTP_SSL()を使用することでSMTP over SSL(SMTPs)でメールを送信できます。ポート番号をSSL用(多くの場合465)に変更するのを忘れないよう注意してください。

smtplib.SMTP_SSL(smtp_host, smtp_port)

画像などの外部リソースについて

以下の例のようにHTML内でURLを直接指定することで、多くのメールクライアントではインターネット上のリソースを読み込めます。

<img src="https://mydomain.com/my-image.png" alt="My Image" />

スクリプトについて

<script>タグを使ってHTMLにJavaScriptを埋め込むことも可能ですが、セキュリティ上の理由から大半のメールクライアントではスクリプトの実行は行われません。