

### 質問の概要

ラズベリーパイにてPython3を使用中です。  
毎日の終わりに一度、  
「センサの値をテキストファイルに書き込み、添付ファイル付きのメールを送るプログラム」  
を実装済みです。  
手動で実行するとエラーは発生しませんが、systemdを用いて電源ON時に自動起動を行うとエラーが発生します。  
以下に詳しく記載します。

### エラー詳細

発生しているエラーは  
「メール送信を実行するとプログラミングが止まる」  
です。  
前述の通り、手動（Thonnyからやターミナルからの実行）ではメール送信も出来ますが  
systemd を用いた.timerファイルと.serviceファイルを使う方式に変えると、メール送信実行時に止まります。

ラズパイのログを見ると以下のエラーメッセージがありました。（/var/log/syslog）

[code]

    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'.
    
[/code]

添付ファイルのメールを送信するモジュールでエラーが起こっているようですが  
・単体での動作は正常（メール送信可能）  
・プログラム全体（メインプログラムからのモジュールのコール）でも、手動での実行では正常  
です。

### ソースコード

Python3での記述です。  
添付ファイルを送るモジュールのソースコードは以下です。  
日付をファイル名にしています

[code]

    # 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)
            
    
[/code]

### 最後に

ここが原因と気づくのに色々と試した結果、systemdが悪さをしていると気づきました。  
Linux系は勉強を始めたばかりなので、アドバイスを頂けると幸いです。


CC BY-SA 4.0
2020-12-01T08:22:51.337
72318
2020-12-01T08:30:46.597
2020-12-01T08:30:46.597
3060
42951
question
python raspberry-pi systemd
ラズベリーパイにて、systemdを使った自動起動プログラムの場合にのみエラーが発生します。