前提・実現したいこと
ラズベリーパイにてPython3を使用中です。
毎日の終わりに一度、
「センサの値をテキストファイルに書き込み、添付ファイル付きのメールを送るプログラム」
を実装済みです。
手動で実行するとエラーは発生しませんが、systemdを用いて電源ON時に自動起動を行うとエラーが発生します。
以下に詳しく記載します。
発生している問題・エラーメッセージ
発生しているエラーは
「メール送信を実行するとプログラミングが止まる」
です。
前述の通り、手動(Thonnyからやターミナルからの実行)ではメール送信も出来ますが
systemd を用いた.timerファイルと.serviceファイルを使う方式に変えると、メール送信実行時に止まります。
ラズパイのログを見ると以下のエラーメッセージがありました。(/var/lo/syslog)
Traceback (most recent call last):
File "/home/pi/Leasemat2/CClite.py", line 198, in <module>
SDATT.send_emailATT(RECIPIENT,Title,Bodytext,Attfile)
File "/home/pi/Leasemat2/SendMailATT.py", line 45, in send_emailATT
server.send_message(msg)
AttributeError: SMTP instance has no attribute 'send_message'
leasemat02.service: Main process exited, code=exited, status=1/FAILURE
leasemat02.service: Failed with result 'exit-code'.
添付ファイルのメールを送信するモジュールでエラーが起こっているようですが
・単体での動作は正常(メール送信可能)
・プログラム全体(メインプログラムからのモジュールのコール)でも、手動での実行では正常
です。
該当のソースコード
添付ファイル付きメールの実行コードです。
Python3で書いております。
# coding: UTF-8 from email.mime.text import MIMEText from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart import smtplib from os.path import basename import time import datetime # SMTP認証情報 account = '*****@gmail.com' password = '*****' # 送受信先 from_email = "****@xxx.xxx" RECIPIENT = '*****@xxx.xxx' def send_emailATT(recipient,title,text,fliepath): #recipient:受取人 # MIMEの作成 subject = title message = text msg = MIMEMultipart() msg["Subject"] = subject msg["To"] = recipient msg["From"] = from_email msg.attach(MIMEText(message)) # ファイルを添付 path = fliepath # "./readme.txt" with open(path, "rb") as f: part = MIMEApplication( f.read(), Name=basename(path) ) part['Content-Disposition'] = 'attachment; filename="%s"' % basename(path) msg.attach(part) # メール送信処理 server = smtplib.SMTP("smtp.gmail.com", 587) server.starttls() server.login(account, password) server.send_message(msg) server.quit() if __name__ == '__main__': place ='xxxx' Title = 'Location is {}'.format(place[:]) num = 0 Bodytext = 'Test is {}'.format(num) stmp = datetime.date.today().strftime('%Y%m%d') Attfile = './'+stmp+ '.txt' send_emailATT(RECIPIENT,Title,Bodytext,Attfile)
試したこと
ここが原因と気づくのに色々と試した結果、systemdが悪さをしていると気づきました。
Linux系は勉強を始めたばかりなので、アドバイスを頂けると幸いです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/01 08:25
2020/12/01 08:30
2020/12/01 08:39
2020/12/01 08:48 編集
2020/12/01 08:50
2020/12/01 08:54
2020/12/01 09:14
2020/12/01 09:20
2020/12/01 09:28