win32com.clientは、固定ファイルパスの代わりに異なる添付ファイルを送信します
Aug 18 2020
単一の添付ファイルの以下のスクリプトを使用して、Outlookでさまざまな受信者に電子メールを送信できますが、forループを使用して各ユーザーにさまざまな添付ファイルを送信しようとすると、失敗します。
現在、スクリプトはを使用していattachment = r'C:\Users\roy\Royfile.csv'
ます。しかし、私はattachment = file
、さまざまなユーザーのforループごとに添付ファイルが変更されるようにしたいのです。この部分は機能していません。
Royfile.csv
以下の例のように、ユーザーごとに異なるファイル。しかし、そのようなファイルはさらに50個あります。
Folder FolderOwner EmailAddress AttachmentPath
C:\folder1\ Roy [email protected] Royfile.csv
D:\folder2\ Roy [email protected] Royfile.csv
同じフォルダ内の2番目のファイルJackfile.csv
:
Folder FolderOwner EmailAddress AttachmentPath
C:\folder3\ Jack [email protected] Jackfile.csv
D:\folder4\ Jack [email protected] Jackfile.csv
たとえば、3番目のファイルMandyfile.csv
。同様に、同じフォルダ内の50ユーザーに対して合計50ファイル。
Folder FolderOwner EmailAddress AttachmentPath
C:\folder5\ Mandy [email protected] Mandyfile.csv
D:\folder6\ Mandy [email protected] Mandyfile.csv
Pythonスクリプト
import glob, as
import win32com.client as win32
import pandas as pd
for file in glob.glob("*file.csv"):
print(file)
email_list = pd.read_csv(file)
names = email_list['FolderOwner']
emails = email_list['EmailAddress']
attachments = email_list['AttachmentPath']
for i in range(len(emails)):
print(file)
name = names[i]
email = emails[i]
attachment = r'{}.csv'.format(attachments)
with open(attachment, 'r') as my_attachment:
myfile = my_attachment.read()
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = email
mail.Subject = 'Message subject'
mail.Body = 'Hello ' + name
mail.Attachments.Add(attachment)
mail.Send()
break
添付部分を削除した場合のスクリプトの現在の出力:
Royfile.csv
Royfile.csv
Jackfile.csv
Jackfile.csv
Mandyfile.csv
Mandyfile.csv
...
..
.
愛着のために何が必要かと今苦労している= ???。各ファイルが50人のユーザーに送信されるようにします。
回答
SrinathNeela Aug 18 2020 at 16:41
ファイルの名前がどのように異なるフォルダーに分散されているのかわかりません。すべての名前とパスを1つの列にエクセルシートに入れて、名前とメールの場合と同じように繰り返してください。
attachment = r'{}.csv'.format(filepaths from excel sheet)
with open(attachment, 'r') as my_attachment:
myfile = my_attachment.read()
ukki Aug 31 2020 at 00:56
最後に私の質問に対する答えが見つかりました。以下は完全なコードです。PATHが欠落しているため、エラーが発生していました。スクリプトが添付ファイルと同じフォルダーで実行されている場合でも、win32comlibにはフルパスが必要です。今は完璧に動作します。:)
import glob, as
import win32com.client as win32
import pandas as pd
for file in glob.glob("*file.csv"):
print(file)
email_list = pd.read_csv(file)
names = email_list['FolderOwner']
emails = email_list['EmailAddress']
attachments = email_list['AttachmentPath']
PATH = "C:\\Users\\roy\\myfolder\\"
for i in range(len(emails)):
print("Sending email with " + file)
name = names[i]
email = emails[i]
attachment = attachments[i]
attachment1 = PATH + attachment
with open(attachment1, 'r') as my_attachment:
myfile = my_attachment.read()
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = email
mail.Subject = 'Message subject'
mail.Body = 'Hello ' + name
mail.Attachments.Add(attachment1)
mail.Send()
break