【Python】メールにファイルを添付して送信する方法(smtplibモジュール)

2021.10.04 /

【Python】メールにファイルを添付して送信する方法(smtplibモジュール)

本記事ではPythonメールにファイルを添付して送信する方法について解説していきます。

ここで使用するモジュールはsmtplibモジュールとemail.mimeモジュール(MIMEText、MIMEMultipart、MIMEApplication)です。

Pythonでメール送信を自動化する場合、ファイルの添付もできると自動化の幅が大きく広がります。

ぜひ本記事を通して、メールにファイルを添付して送信する方法を学んでください。

テキスト文のみを送信する方法

まずテキスト文のみを送信する場合の方法を見てみましょう。

import smtplib
from email.mime.text import MIMEText
obj_smtp= smtplib.SMTP('smtp.office54.net', 587)
obj_smtp.starttls()
obj_smtp.login('example@office54.net', 'Password')

body = "メールの本文"
msg = MIMEText(body, "html")
msg['Subject'] = "メールの件名"
msg['To'] = 'test@office54.net '
msg['From'] = 'example@office54.net '

obj_smtp.send_message(msg)
obj_smtp.quit()

上記のようにテキスト文のみの場合、email.mimeモジュールのMIMETextクラスを使用します。
MIMETextクラスはテキストを扱うMIMEオブジェクトを生成します。

より詳しいsmtplibモジュールを利用したメール送信の方法については以下記事をご参照ください。

ファイルを添付してメール送信する方法

メールにファイルを添付するには、email.mimeモジュールのMIMETextクラス、MIMEMultipartクラス、MIMEApplicationクラスを利用します。

IT用語の確認

MIME(Multipurpose Internet Mail Extensions:マイム)とは、電子メールで文字や画像などのデータを転送するための規格

メールにファイルを添付するために、異なる複数のコンテンツを扱えるMIMEMultipartクラスを利用します。

以下にファイルを添付してメール送信する例を記します。

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
smtp_obj = smtplib.SMTP('smtp.office54.net', 587)
smtp_obj.starttls()
smtp_obj.login('from@office54.net', 'Password')

body = "メールの本文"
msg = MIMEMultipart()
msg['Subject'] = "メールの件名"
msg['To'] = 'to@office54.net'
msg['From'] = 'from@office54.net '
msg.attach(MIMEText(body))

with open(r"C:\test.xlsx", "rb") as f:
    attachment = MIMEApplication(f.read())

attachment.add_header("Content-Disposition", "attachment", filename="test.xlsx")
msg.attach(attachment)
smtp_obj.send_message(msg)
smtp_obj.quit()

上記のようにMIMEMultipartクラスでmultipart形式のMIMEオブジェクトを生成します。そしてキーワード引数でメール情報(件名、送信元アドレス、宛先アドレス)を指定します。

またMIMEApplicationクラスは、添付したいファイルのFileオブジェクト(open関数で開いたファイル)をread()メソッドで開いたものを引数に指定します。

attachment = MIMEApplication(f.read())

メールにファイルを添付するには、MIMEMultipartクラスのattach()メソッドを使います。

msg.attach(attachment)

まとめ

本記事「【Python】メールにファイルを添付して送信する方法(smtplibモジュール)」はいかがでしたか。

ぜひPythonでファイルを添付したメール送信を自動化するプログラムを作ってみてください。