pythonでGmailの定期送信をしたいのですが、初めの一回しかやってくれません。
どうしたら、繰り返しやってくれますか。
###ソースコード
python
1#必要なモジュールをインポート 2import datetime 3import smtplib 4import ssl 5from email.mime.text import MIMEText 6from email.mime.multipart import MIMEMultipart 7from email.mime.base import MIMEBase 8from email import encoders 9import pandas as pd 10 11 12 13 14 15 16#メーリングリスト読み込み 17df = pd.read_excel('mailing_list.xlsx') 18df 19 20#エンコード指定 21import sys, io 22sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') 23 24#送信元の設定 25gmail_account = "XXX@gmail.com" 26gmail_password = "XXX" 27 28#日時要素の指定 29today_date = datetime.date.today() 30delivery_date = today_date + datetime.timedelta(days=1) 31print(today_date,delivery_date) 32 33#メール内容を関数化 34def gmail_send(send_name, mail_to, filename): 35 36 #メールタイトルと本文(本文はHTML形式) 37 subject = "{0},{1}分の打刻はしたのか?".format(send_name,today_date) 38 body = '''打刻しなかったら大変なことになるぞ。<br> 39 添付ファイルのようにな。<br> 40 タイムリミットは{0}だ。'''.format(delivery_date) 41 42 #内容確認 43 print(subject) 44 print(body) 45 46 msg = MIMEMultipart() 47 48 msg["Subject"] = subject 49 msg["To"] = mail_to 50 msg["From"] = gmail_account 51 msg_body = MIMEText(body,"html") 52 print(msg) 53 54 msg.attach(msg_body) 55 56 filename = filename 57 file = open(filename,"rb") 58 59 #ファイルを添付 60 attachment_file = MIMEBase('application','pdf') 61 attachment_file.set_payload((file).read()) 62 file.close() 63 64 encoders.encode_base64(attachment_file) 65 attachment_file.add_header('Content-Disposition',"attachment", filename=filename) 66 msg.attach(attachment_file) 67 68 69 70 71 server = smtplib.SMTP_SSL("smtp.gmail.com",465,context=ssl.create_default_context()) 72 server.login(gmail_account, gmail_password) 73 server.send_message(msg) 74 server.close() 75 print('送信完了') 76 77#メーリングリストのすべての宛先にmeil_sendの処理を繰り返し行う 78for send_name, mail_to, filename in zip(df['宛名'],df['メールアドレス'],df['添付ファイル']): 79 gmail_send(send_name, mail_to,filename) 80 81 82#定期実行 83import schedule 84import time 85 86schedule.every(10).minutes.do(gmail_send) 87# schedule.every().day.at("23:00")do(gmail_send) 88 89while True: 90 schedule.run_pending() 91 time.sleep(1)
###エラー
Traceback (most recent call last): File "C:\test\autemail.py", line 90, in <module> schedule.run_pending() File "C:\Users\Owner\AppData\Local\Programs\Python\Python39\lib\site-packages\schedule\__init__.py", line 780, in run_pending default_scheduler.run_pending() File "C:\Users\Owner\AppData\Local\Programs\Python\Python39\lib\site-packages\schedule\__init__.py", line 100, in run_pending self._run_job(job) File "C:\Users\Owner\AppData\Local\Programs\Python\Python39\lib\site-packages\schedule\__init__.py", line 172, in _run_job ret = job.run() File "C:\Users\Owner\AppData\Local\Programs\Python\Python39\lib\site-packages\schedule\__init__.py", line 661, in run ret = self.job_func() TypeError: gmail_send() missing 3 required positional arguments: 'send_name', 'mail_to', and 'filename'
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/17 17:44
2021/04/18 04:38