プロプログラマ

プログラマーを職業としてます。 Flex,Air,C#,Oracle,HTML+JSの言語ノウハウを中心に情報発信していきます

[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には自分宛て(他の人に迷惑がかからないように!)で行う。


 

== ランキングに参加しています。ぜひクリックお願いします ==

プログラム ブログランキングへ
にほんブログ村 IT技術ブログへ
にほんブログ村

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください