はじめに
この記事では、Pythonを使用してメールを送信するスクリプトの作成方法を紹介します。このスクリプトは、JSONファイルから設定を読み込み、SMTPサーバーを介してメールを送信し、必要に応じてファイルを添付する機能を持っています。
サンプルコードはGitHubリポジトリで確認できます: python-mail-sender
使用するライブラリ
このスクリプトでは以下のライブラリを使用しています。これらは標準ライブラリに含まれているため、追加のインストールは不要です。
-
json
: JSONファイルから設定を読み込むために使用します。 -
smtplib
: SMTPサーバーを介してメールを送信するために使用します。 -
email.mime
: メールの作成に必要な各種MIMEタイプを扱います。 -
os
: ファイルパスの操作やファイル名の抽出に使用します。
スクリプトの概要
このスクリプトは以下の3つの主要な部分で構成されています。
- 設定の読み込み: メールアドレスやSMTPサーバーの設定、メールの件名や本文をテンプレートから読み込みます。
- メールの作成と送信: 設定に基づいてメールを作成し、SMTPサーバーを介して送信します。
- ファイルの添付: 必要に応じてファイルをメールに添付します。
設定の読み込み
まず、メールアドレスや件名、本文のテンプレートをJSONファイルやテキストファイルから読み込みます。
def load_email_settings():
with open('mail/mail_address.json', 'r', encoding='utf-8') as f:
email_settings = json.load(f)["email_settings"]
with open('mail/mail_subject.txt', 'r', encoding='utf-8') as f:
mail_subject = f.read().strip()
with open('mail/mail_body.txt', 'r', encoding='utf-8') as f:
body_template = f.read().strip()
return email_settings, mail_subject, body_template
SMTPサーバーの設定の読み込み
次に、SMTPサーバーの設定をJSONファイルから読み込みます。
with open('settings/smtp.json', 'r', encoding='utf-8') as f:
smtp_settings = json.load(f)
メールの作成と送信
以下のコードは、メールを作成し、SMTPサーバーを介して送信する部分です。
def send_email_with_attachment(email_settings, subject, body_template, result_data, attachment_path):
msg = MIMEMultipart()
msg['From'] = f"{email_settings['FromName']} <{email_settings['From']}>"
msg['To'] = ", ".join(email_settings['TO'])
msg['Cc'] = ", ".join(email_settings['CC'])
msg['Subject'] = subject
msg['Date'] = formatdate(localtime=True)
body_filled = body_template.format(
total_count=result_data['totalCount'],
succeed_count=result_data['succeededCount'],
added_count=result_data['addedCount'],
error_count=result_data['failedCount']
)
msg.attach(MIMEText(body_filled, 'plain', 'utf-8'))
with open(attachment_path, "rb") as attachment:
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
filename = os.path.basename(attachment_path)
part.add_header('Content-Disposition', 'attachment', filename=filename)
msg.attach(part)
with smtplib.SMTP(smtp_settings['smtp_host'], smtp_settings['smtp_port']) as server:
smtp_user = smtp_settings.get('smtp_user')
smtp_password = smtp_settings.get('smtp_password')
if smtp_user and smtp_password:
server.login(smtp_user, smtp_password)
server.send_message(msg)
ここでは、MIMEMultipartオブジェクトを使用してメールを作成し、本文を設定し、ファイルを添付しています。その後、smtplib.SMTPを使用してSMTPサーバーに接続し、メールを送信します。
まとめ
このスクリプトを使用することで、簡単にメールを自動化して送信できるようになります。設定ファイルを適切に準備することで、様々なメールを動的に作成し、送信することが可能です。