[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 接続が拒否される