[Python] 添付ファイル付きメールを送信する
Pythonを使って、添付ファイル付きのメールを送信するプログラム例です。
この例では、Office365のメールで送信する記述となっており、Gmailなど他のメールサーバの場合は若干設定が異なると思います。
■mail_lib.py メール送信用クラス
# -*- coding: utf-8 -*- import smtplib from email.mime.text import MIMEText from email.utils import formatdate from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication import os class MailLib(): smtp_server = 'smtp.office365.com' smtp_port = 587 smtp_password = 'xxxxxxxxx' def create_message(self, from_addr: str, to_addr, subject, body) -> MIMEText: ''' メール送信用メッセージを生成する Parameters ---------- from_addr : str 送信元アドレス \n to_addr : str 送信先アドレス(複数ある場合はカンマ区切り) \n subject : str メール件名 \n body : str メール本文 ''' msg = MIMEText(body) msg['Subject'] = subject msg['From'] = from_addr msg['To'] = to_addr msg['Date'] = formatdate() return msg def create_multipart_message(self, from_addr: str, to_addr: str, subject: str, body: str, file_path: str) -> MIMEMultipart: ''' メール送信用メッセージを生成する Parameters ---------- from_addr : str 送信元アドレス \n to_addr : str 送信先アドレス(複数ある場合はカンマ区切り) \n subject : str メール件名 \n body : str メール本文 \n file_path: str 添付ファイルのフルパス ''' msg = MIMEMultipart() msg['Subject'] = subject msg['From'] = from_addr msg['To'] = to_addr msg['Date'] = formatdate() msg.attach(MIMEText(body, 'plain')) # メール本文はテキスト形式で送信する with open(file_path, "rb") as f: mb = MIMEApplication(f.read()) filename = os.path.basename(file_path) mb.add_header("Content-Disposition", "attachment", filename=filename) msg.attach(mb) return msg def send_mail(self, from_addr, to_addr, body_msg) -> None: ''' メールを送信する ''' smtp_obj = smtplib.SMTP(self.smtp_server, self.smtp_port) smtp_obj.ehlo() smtp_obj.starttls() smtp_obj.login(from_addr, self.smtp_password) smtp_obj.sendmail(from_addr, to_addr.split(','), body_msg.as_string()) smtp_obj.close()
■send_mail.py
# mail_lib.pyがlibsフォルダ配下に置いてある場合の記載です from libs.mail_lib import MailLib mail_lib = MailLib() from_address = '[送信元メールアドレスを記載]' to_address = '[送信先メールアドレスを記載]' title = 'メール送信テスト' contents = 'これはメール送信テストです。\n\n以上' file_path = 'c:/test.pdf' msg = mail_lib.create_multipart_message(from_address, to_address, title, contents, file_path) mail_lib.send_mail(from_address, to_address, msg)
テストする際は、to_addressには自分宛て(他の人に迷惑がかからないように!)で行う。
== ランキングに参加しています。ぜひクリックお願いします ==
[Java] 文字列をファイルに書き出す(Java7以降の効率的な書き方) 作成したアプリからのGmail 接続が拒否される