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であれば以下のように表示されます。
メールの送信には別途メールサーバー(SMTPサーバー)が必要です。例えばGmailをSMTPサーバーとして使用する場合には以下の情報を準備しておきます。
使用する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を埋め込むことも可能ですが、セキュリティ上の理由から大半のメールクライアントではスクリプトの実行は行われません。