エクセル(Excel)のアドレス帳からOutlookで一斉送信したい

エクセル(Excel)でアドレス帳を作成している方は多いのではないでしょうか?。社員名簿やお客様の名簿からメールを送信したいときはよくあるかと思います。ここではエクセル(Excel)の名簿から一斉送信するコードをご紹介します。また、エクセルの表のままコピペして送付するというコードに仕上げていきたいと思います。

まずは、エクセル(Excel)の作成してあるデータとコード全体をご紹介します。

# モジュールのインポート
import win32com.client # Outlook活用
import datetime # 時間の取得
import pyperclip # コピー&ペーストができるライブラリ

# meibo.xlsxの読み込みとアドレスのリスト作成
df = pd.read_excel('meibo.xlsx')
df_hyou = df.iloc[:,0:4]


# クリップボードに送付したい表を読み込む
df_hyou.to_clipboard()
hyou = pyperclip.paste()

# メールアドレスリスト作成
adress_list = df["mail"].to_list()
adress_list = list(set(adress_list)) #重複アドレスを削除

# 宛先 複数の場合は'; 'を間に挟む
mail_to =""
for i in range(0,len(adress_list)-1):
    mail_to = mail_to + str(adress_list[i]) + " ;"
mail_to = mail_to + str(adress_list[len(adress_list)-1])

# 本文に文字列で表示させる練習 わざわざ設定しなくてもいいですが(笑)
bun = str(dt_now.month) + '/' + str(dt_now.day) + '時点での状況をご連絡します'
# 今日の日付の取得
dt_now = datetime.datetime.now()

# outlookの準備
outlook = win32com.client.Dispatch('Outlook.Application')
mail = outlook.CreateItem(0)

# メールの設定
# フォーマット(テキスト:1、2:HTML、3:リッチテキスト)
mail.BodyFormat = 2

# 宛先(To, CC,)
mail.To = mail_to #  mail_toで作成したメールリスト
mail.CC = 'comittioner@gmail.com'  # CC ここではコミッショナーにCcを送付するという設定
mail.Subject = str(dt_now.month) + '/' + str(dt_now.day) + 'の連絡です' # 送付した日付を題名に設定 
mail.Body ="セリーグ関係者様(1行目)" + "\n\n" + "いつもお世話になっております。(本文3行目)" + "\n\n" + str(bun) + "\n\n" + str(hyou)
# 送付ファイルがある場合はファイルパスで添付(今回は設定なしとしています)
# mail.Attachments.Add('central.csv')

# MailItemオブジェクトを画面表示で確認する
mail.Display(True)

実行すると下記のようなメールを作成することができます。

では順番にご紹介していきましょう。

Pandasでの読み込みと加工

これは、基本的なことは「Pandas」を参照にしてもらえれば嬉しいです。

まず、「meibo.xlsx」を読み込んで、送付したい表を作成します。
ここの加工方法は、ilocを活用して処理していきます。

Outlookに挿入したい表を作成する

ここでは「pyperclip」を活用します。
外部ライブラリとなりますので、pipでインストールしてください。
念のために、インストールはコマンドプロンプトから以下のコードとなります。

pip install pyperclip

pyperclipは、Pythonでクリップボードを操作することができる非常に便利なライブラリです。
少し今回のやりたいこととはそれますが、サンプルコードを下記に記載しておきます。

# ライブラリのインポート
import pyperclip

# クリップボードにコピー
pyperclip.copy("コピーペーストです")

# クリップボードにコピーされているものを返す
print(pyperclip.paste())

これで「コピーペーストです」と表示されます。
サンプルコードではDataFrameをクリップボードにコピーすることをしています。

Pythonを用いてOutlookに表を挿入するには、このpyperclipを使う手法が一番簡単です。きれいに見せる手法などまた更新していきますね。

宛先メールアドレスリストの作成

ここでは複数のアドレス宛にOutlookでメール送信したいため、まずはライブラリに取得した後、そのあと、メール作成の際に複数アドレス指定できる文字列に変換していくことになります。まずはDataFrameからメールアドレスのリストを作成し、それを 「;(コロン)」でつなげて文字列にするというコードとなります。

メールの作成(Outlook)

最後にメールの作成です。このコードは皆さん紹介されているのであまり解説するところはないかもしれませんが、複数の宛先にするために宛先を先ほど作成した文字列に設定しています。また、本文で差し込みたい文章があることを想定し5行目に文章を挿入するサンプルコードにしています。

理解できましたでしょうか?
是非参考にしてください。

コメント

タイトルとURLをコピーしました