ビジネスパーソン・ガジェット置場 empty lot for business

営業や仕事、それに伴う生活を便利に楽にするツール、ガジェットを作ります。既にあるツールも自分用にカスタマイズ。

複数の取引先への一斉メール 【python + smtplib + mime】

今回の設定はーーー自分の担当である3つの会社に販売数と請求金額をメールで通知するというタスクがあります。ただし、会社として定型文があり、そのフォーマットを使用しなければなりません。今までは1社ずつ定型文をメールに貼り付け会社名や担当者名、販売数、請求金額を手動で修正していました。手間のかかる作業であるとともに、定型文だけに宛先を勘違いしてA社にB社の情報を送ってしまうなどのミスも怖いです。そこで、送り間違いの可能性もなくしつつ、一斉メールで送信できるようにします。

f:id:kslabo51:20220221214828p:plain

複数の取引先への一斉メール送信

定型メール文の会社名、担当者名、販売数、売上の各項目に自動でそれぞれの情報を入力し、一斉に送信するガジェットです。

ガジェットイメージ図

f:id:kslabo51:20220221215356p:plain

 

必要な設定

■データ: サプライヤーリスト(エクセル)

■プログラム言語:Python

■ライブラリ:pandas、datetime、os、json、smtplib、MIMEText、formatdate

■その他:

  • Gmailをアプリケーションで実行する際に使用する設定

Gmailを他のアプリケーションで実行する際に使用する設定は下記の記事をご確認ください。

arachnes-web.hatenablog.jp

※作成したjsonファイルはこれから作成するコードと同じフォルダに格納しておいてください。

手順① サプライヤーリストを準備

f:id:kslabo51:20220221215747p:plain

このリストが肝で各項目を抜き出して下記の定型文の●●の部分に挿入していきます。ただし、一覧表になっているので一目でわかりやすくチェックもしやすいです。

f:id:kslabo51:20220221215932p:plain

手順② コードを作成

一斉送信のコードは下記のようになります。(ファイル名:main.py)

import pandas as pd
import datetime as dt
import os
import json
import smtplib
from email.mime.text import MIMEText
from email.utils import formatdate


def main():
    df = pd.read_excel('supplierslist.xlsx')
    df['売上件数'] = df['売上件数'].astype('int').map('{:,}'.format)
    df['請求金額'] = df['請求金額'].astype('int').map('{:,}'.format)

    for i in range(df.shape[0]):
        mailaddress = df['メールアドレス'][i]
        company = df['会社名'][i]
        sales_person = df['担当者'][i]
        salse = df['売上件数'][i]
        billing = df['請求金額'][i]
        month = dt.datetime.today().month

        with open('basemail.txt', 'r') as f:
            text = f.read()

        _text = text.format(company, sales_person, month, salse, billing)

        with open('secret.json', 'r') as f:
            address_password = json.load(f)

        from_addr = address_password['ADDRESS']
        password = address_password['PASSWORD']

        subject = f'{month}月分請求書'
        body = _text
        to_addr = mailaddress

        smtpobj = smtplib.SMTP('smtp.gmail.com', 587)
        smtpobj.starttls()
        smtpobj.login(from_addr, password)


        msg = MIMEText(body)
        msg['Subject'] = subject
        msg['From'] = from_addr
        msg['To'] = to_addr
        msg['Date'] = formatdate()

        smtpobj.send_message(msg)
        smtpobj.close()

if __name__ == '__main__':
    main()

 

手順③ コードを実行

上記コードをターミナルで実行します。(実行手順は)

  1. cd 上記コードを記載したファイルが置かれているフォルダ
  2. python3 main.py

 

Gmailの送信フォルダを確認すると

f:id:kslabo51:20220221221524p:plain

上のように各社の担当者宛にメールが一斉送信されています。

 

今回は以上です!