取引先60社への月末メールをExcelリストから読んでPythonで一括送信できるようにした話

月末の請求書メール地獄

月末の足音が近づいてくると、無意識にため息が出てしまいます。取引先60社へ請求書をメールで送る作業が待っているからです。これは毎月恒例となっている単純作業です。まずは取引先のリストが載ったExcelを開きます。次にメールソフトのOutlookを立ち上げます。リストの1行目からメールアドレスをコピーします。それを宛先欄に貼り付けます。会社名と担当者名を見比べます。宛名を手打ちし、いつもの定型文をコピペします。

デスクトップにはPDFの山が散乱しています。そこから該当する請求書を探し出します。メール画面にファイルをドラッグ&ドロップします。これを60回繰り返します。30件目あたりで指先が攣りそうになります。まばたきを忘れた目は乾ききってしまいます。送信ボタンを押すたびに確認をします。「添付ファイルは間違っていないか」を見ます。「宛名は正しいか」を指差しで確かめます。1通あたり3分かかると60社で3時間です。確認や修正を含めると1時間以上は確実に奪われます。月末の貴重な業務時間が消えていくのです。時間的なプレッシャーと単純作業が重なります。すると人はミスを犯しやすい状態に陥ります。

コピペミスの代償:失われる信用と時間

まず、コピペ運用には構造的な問題があります。ヒューマンエラーを生み出す温床だからです。どれだけ注意深く作業していても限界があります。人間の脳は同じ景色を見続けると麻痺します。すると異常を検知できなくなるのです。宛名の会社名を書き換えるルールすら忘れます。疲労の前では、注意などは脆く崩れ去ってしまいます。

前月のメールを再利用しようとした時のことです。「全員へ返信」をベースに内容を書き換えていました。本文の宛先を手修正したつもりでいました。しかし数社に「株式会社旧社名 御中」で送りました。一斉送信の中にミスが混ざっていたのです。取引先から冷やかな返信を受信しました。「宛名が違いますよ」という指摘の内容です。その瞬間、胃がひっくり返るような鈍痛を感じました。慌てて正しい宛名でお詫びメールを作りました。すぐに再送の手続きを取りました。上司に顛末を報告する事態になります。再発防止策を厳しく問いつめられることもあります。たった一つのミスが余計な時間を食いつぶします。30分以上の時間が無駄になります。さらに会社の信用もわずかに削り取ってしまうのです。

人間の注意力に頼った運用には限界があります。システムとしてミスを防ぐ仕組みが必要です。物理的に防がなければ悲劇は繰り返されます。同じようなミスは何度でも起こってしまうのです。

Pythonメール自動化:連携と認証突破

手作業による悲劇を根絶しましょう。機械に仕事を委ねるのが最善の方法です。Excelのリストを上から順に読み込ませます。Pythonに本文を組み立てさせるのです。「pandas」というライブラリを使用します。Excelデータは表形式のまま扱えます。プログラム上で自由に操作が可能になります。一行ごとに会社名や担当者名を取り出します。f文字列というフォーマット機能に流し込みます。宛名や本文のテンプレートを用意します。すると変数部分が自動的に置き換わっていくのです。

メール自動化の認証と効率的な学習法

次に、メールを外へ送り出します。これは標準ライブラリのsmtplibが担います。SMTP_SSLと周辺機能を組み合わせます。通信経路を暗号化してやり取りを行います。安全にGmailやOutlookのサーバーと接続します。非エンジニアの方がここで必ず躓きます。サーバーの認証エラーが発生するからです。普段のログインパスワードは使えません。そのままコードに書いても拒否されてしまいます。

メール設定から「アプリパスワード」を取得します。これは専用の暗号番号となります。それを環境変数に隠して読み込ませるのが鉄則です。

独学でエラー画面と向き合う時間はもったいないです。侍エンジニアなどのスクールも有効です。実務直結のコードを体系的に学べるからです。あるいはAmazonのPythonメール自動化実務書を読みます。コードの背景にある仕組みを効率よく補完できます。仕組みさえ理解すればプログラムは味方になります。決して裏切らない強固な味方となってくれるはずです。

VBA・Pythonをもっと本格的に学ぶなら

VBAやPythonを実務レベルまで引き上げたい方には「侍エンジニア」がおすすめです。マンツーマン指導・オーダーメイドカリキュラムで、文系出身でも挫折しにくい環境が整っています。無料カウンセリングだけでも学習ロードマップが明確になります。

侍エンジニア 無料カウンセリングを予約する →

個別ファイル送付の自動化

同じ定型文を送るだけなら難易度は低いです。実務では個別の添付が必要になります。取引先A社にはA社のPDFを送ります。B社にはB社のPDFを添えなければなりません。寸分の狂いもなく紐付ける必要があります。PythonではMIMEMultipartというコンテナを使います。そこにテキストの本文を入れます。さらにPDFファイルを詰め込んでいく構造です。

最大のポイントはファイル名のルールです。「取引先コード」などの規則で保存します。プログラムはExcelから読み取ったコードを使います。それをもとに合致するPDFを探しに行きます。もしファイルが存在しない場合も想定します。エラーで止めずにスキップさせます。その旨をログに記録する分岐を入れるのが安全です。この仕組みを応用すれば切り分けも容易です。カタログや請求書を自動で分けることができます。複雑な送付業務も簡単に実現が可能です。

PDF生成からあらゆるファイル送付を自動化

請求書PDFの自動生成と連携させれば、より強力なシステムになります。給与明細の個別配布にも活用できます。アルバイトへのシフト表通知も可能です。さらに月次レポートの配信まで自動化できます。あらゆるファイル送付がこのコードで完結します。業務の延長線上で幅広く応用できるのです。

自動化の二重送信防止と記録の徹底

プログラムが完成しても油断は禁物です。無邪気に実行ボタンを押すのは危険です。処理の途中でネットワークが切れるかもしれません。スクリプトを二度動かす事故も起こり得ます。同じ請求書を何通も送るのは避けたい事態です。プログラムには必ず「ブレーキ」を入れます。「記録係」の機能もセットで組み込んでください。

1通送信を終えるごとに記録を残します。「sent_log.csv」というファイルを使います。送信日時や宛先、ステータスを追記します。次回プログラムを動かす際にこれを読み込みます。「今月分は送信済みか」を厳格に調べます。assert文でチェックを行うのが有効です。過去の記録が残っていれば警告を出します。「二重送信を防止しました」と画面に表示します。そして処理を安全にスキップさせます。

一括送信スクリプトの必須機能:ログと待機時間

初めて一括送信を動かした時の失敗談です。途中でエラーが出て突然停止してしまいました。どこまで送れたのか全く分からなくなりました。取引先に電話で確認する羽目になったのです。「重複していませんか」と聞くのは辛いものです。あの冷や汗をかく経験以来、ログは必須となりました。進捗と結果を1行ずつCSVに書き出します。さらに「time.sleep(2)」を記述します。送信の間に2秒の待機時間を設けるためです。これで迷惑メール判定のリスクを下げられます。サーバーへの負荷も抑えることができるのです。

Pythonによるメール自動化で月末業務効率化

毎月1時間以上奪われていた作業があります。それがスクリプト一つで数分に圧縮されました。実現に向けた手順は3つのステップです。

まずはExcelをpandasで読み込みます。f文字列で本文を組み立てるのが最初の関門です。次にMIMEMultipartを駆使します。PDFを正確に添付して送信を行います。最後に証拠をCSVに刻み込みます。二重送信を防ぐ安全装置を張って完成です。

請求書の発行処理と組み合わせる方法もあります。「PDF生成から送信」までを完全自動化できます。給与明細やシフト表の通知にも使えます。コピペミスに怯える月末はもう終わりにしましょう。効率的なシステムで余裕を手に入れてください。

関連リンクとチェックリスト

無料プレゼント

Excel業務を自動化する前に確認するチェックリスト(PDF)

自動化していい作業かどうか、VBAかPythonか、最初に避けるべき落とし穴。実務でよく迷うポイントを1枚にまとめました。メールアドレスだけで受け取れます。

無料でチェックリストを受け取る

¥980 ミニキット

コピペで動かせる3スクリプト+自動化チェックリスト

最新ファイルの自動選択・部署名ゆれの正規化・CSV文字コード確認の3本セット。今週の作業を1つだけ楽にするための最小キットです。

ミニキットを見る(¥980)

関連書籍

Python業務自動化関連書籍を、手元で見返せる形にしておきたい場合

Pythonやデータ処理の自動化は、作りながら同じ基礎を何度も確認する場面が多いです。手元で見返せる本があると、調べ直しの時間を減らしやすいです。

Python業務自動化関連書籍をAmazonで探す

学習サービスとアンケート

このスキルを活かしてさらに前へ進むなら

Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。

プログラミングスクール Enjoy Tech!(エンジョイテック) →

[アンケート] この記事は役に立ちましたか?

1問だけ回答する