【Python】メールにファイルを添付して送信する方法(smtplibモジュール)
2021.10.04 /
本記事では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モジュールを利用したメール送信の方法については以下記事をご参照ください。
【Python】メールを英語・日本語で送信する方法(smtplibモジュール)
ファイルを添付してメール送信する方法
メールにファイルを添付するには、email.mimeモジュールのMIMETextクラス、MIMEMultipartクラス、MIMEApplicationクラスを利用します。
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でファイルを添付したメール送信を自動化するプログラムを作ってみてください。