質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

401閲覧

Python 条件によりメールを送信したい

PEMPEM

総合スコア35

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1グッド

0クリップ

投稿2024/10/16 08:53

実現したいこと

指定したファイルがある場合、ファイル毎に指定されたアドレスにファイル添付して、outlookからメール送信したい。

発生している問題・分からないこと

全てのファイルが添付された1通のメールとなってしまう。
件名・本文ともTest3となっている。

該当のソースコード

Python

1#ステップ1|ライブラリ 2import win32com.client 3import os 4 5 6# Outlookアプリケーションをインスタンス化 7outlook = win32com.client.Dispatch("Outlook.Application") 8 9# メールオブジェクトの作成 10mail = outlook.CreateItem(0) # 0:メール 11 12if os.path.isfile(r"C:\Users\User\Desktop\Test1.xlsx"): 13 14 if os.path.isfile(r"C:\Users\User\Desktop\Test2.xlsx"): 15 mail.BodyFormat = 3 #リッチテキスト 16 mail.To = "送信アドレス" 17 mail.Subject = "Test1-2" 18 mail.Body = "Test本文1-2" 19 mail.Attachments.Add (r"C:\Users\User\Desktop\Test1.xlsx") 20 mail.Attachments.Add (r"C:\Users\User\Desktop\Test2.xlsx") 21 else: 22 mail.BodyFormat = 3 #リッチテキスト 23 mail.To = "送信アドレス" 24 mail.Subject = "Test1" 25 mail.Body = "Test本文1" 26 mail.Attachments.Add (r"C:\Users\User\Desktop\Test1.xlsx") 27 28 if os.path.isfile(r"C:\Users\User\Desktop\Test3.xlsx"): 29 mail.BodyFormat = 3 #リッチテキスト 30 mail.To = "送信アドレス" 31 mail.Subject = "Test2" 32 mail.Body = "Test本文3" 33 mail.Attachments.Add (r"C:\Users\User\Desktop\Test3.xlsx") 34 35 if os.path.isfile(r"C:\Users\User\Desktop\Test4.xlsx"): 36 mail.BodyFormat = 3 #リッチテキスト 37 mail.To = "送信アドレス" 38 mail.Subject = "Test3" 39 mail.Body = "Test本文3" 40 mail.Attachments.Add (r"C:\Users\User\Desktop\Test4.xlsx") 41 42 43 # メール送信 44mail.Send()

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

各IF事メール送信したら
pywintypes.com_error: (-2147352567, '例外が発生しました。', (4096, 'Microsoft Outlook', 'このアイテムは移動または削除されています。', None, 0, -2147221238), None)
となってしまった。

補足

特になし

tatsu99👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

10行目で1つだけメールを作って、属性の上書きを繰り返して、最後に上書きした状態のメールを44行目で1回だけ送信しているので、

全てのファイルが添付された1通のメールとなってしまう。件名・本文ともTest3となっている。

となります。
添付ファイルは上書きでなく追加(Add)なので全部付きますが、それ以外は代入なので上書きです。

毎回メールを送るようにします。
10行目のmail = outlook.CreateItem(0)と、44行目のmail.Send()で、
if elsemail.~~~ = ~~~のかたまりを囲みます。
元の10行目、44行目は不要です。

Python

1 mail = outlook.CreateItem(0) # メールを作って 2 mail.BodyFormat = 3 # いろいろ属性をセットして 3 mail.To = "送信アドレス" 4 mail.Subject = "Test1-2" 5 mail.Body = "Test本文1-2" 6 mail.Attachments.Add (r"C:\Users\User\Desktop\Test1.xlsx") 7 mail.Attachments.Add (r"C:\Users\User\Desktop\Test2.xlsx") 8 mail.Send() #メールを送信する 9他も同様

投稿2024/10/16 14:32

otn

総合スコア86328

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PEMPEM

2024/10/17 00:20

ありがとうございます。 条件ごとメールを作って送信すればよいのですね。 無事に解決いたしました。
guest

0

ベストアンサー

ファイル毎に指定されたアドレスにファイル添付して、outlookからメール送信したい。

送信処理を関数化するとよいかと思います。(手元に Windows PC がないので動作確認はしていません)

python

1import win32com.client 2import os 3 4excel_files = [ 5 r"C:\Users\User\Desktop\Test1.xlsx", 6 r"C:\Users\User\Desktop\Test2.xlsx", 7 r"C:\Users\User\Desktop\Test3.xlsx", 8 r"C:\Users\User\Desktop\Test4.xlsx", 9] 10 11def send_mail_with_attachments(to, subject, body, *attachments): 12 global outlook 13 # メールオブジェクトの作成 14 mail = outlook.CreateItem(0) # 0:メール 15 mail.BodyFormat = 3 #リッチテキスト 16 mail.To = to 17 mail.Subject = subject 18 mail.Body = body 19 for a in attachments: 20 mail.Attachments.Add(a) 21 22 # メール送信 23 mail.Send() 24 25## 26# Outlookアプリケーションをインスタンス化 27outlook = win32com.client.Dispatch("Outlook.Application") 28 29if os.path.isfile(excel_files[0]): 30 if os.path.isfile(excel_files[1]): 31 send_mail_with_attachments("送信アドレス", "Test1-2", "Test本文1-2", *excel_files[:2]) 32 else: 33 send_mail_with_attachments("送信アドレス", "Test1", "Test本文1", excel_files[0]) 34 35if os.path.isfile(excel_files[2]): 36 send_mail_with_attachments("送信アドレス", "Test3", "Test本文3", excel_files[2]) 37 38if os.path.isfile(excel_files[3]): 39 send_mail_with_attachments("送信アドレス", "Test4", "Test本文4", excel_files[3])

投稿2024/10/16 09:57

編集2024/10/16 10:01
melian

総合スコア21234

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PEMPEM

2024/10/17 00:22

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問