以前、偉人の名言を毎朝メールしてくれるアプリをPythonで作ってみたのだが、
ずーっと毎朝同じようにメールが届くのがウザくなってきた(ダイレクトメールのように感じてきた)
popololo-nyanya.hatenablog.com
じゃあ、毎日じゃなくてランダムで送るようにしようと思い、改造。
乱数を発生させ、乱数が偶数の時だけメールを送るようにした。
※改造した部分は赤文字
import datetime #③
import schedule
import pandas as pd
import random
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
print("起動しました")
#メール送信
def mail_export(body):#SMTPサーバーに接続
smtp_server = "smtp.gmail.com"
port = 587
server = smtplib.SMTP(smtp_server, port)#TLS暗号化の設定
server.starttls()#SMTPサーバーにログイン
login_address = "自分のメールアドレス"
login_password = "自分のパスワード"
server.login(login_address, login_password)#メッセージを作成
message = MIMEMultipart()
message["Subject"] = "おはようございます。"
message["From"] = "送信元メールアドレス"
message["To"] = "宛先メールアドレス"
text = MIMEText(body)
message.attach(text)#メール送信
server.send_message(message)#SMTPサーバの切断
server.quit()
def task():
#0~99の乱数を発生させる
today_num = random.randrange(100) #①
if today_num % 2 == 0: #②
# 名言リストを読み込んでデータフレームに格納
df = pd.read_csv("meigen.csv", encoding="shift-jis")# 0~92の乱数を発生させる
num = random.randrange(93)
# メール本文の作成
mail_body = df['aphorism'][num] + '\r\n\r\n ――― ' + df['person'][num]
mail_export(mail_body)
print("メールを送信しました。{}".format(datetime.datetime.now()) ) #③
else:
print("今日は無しです。{}".format(datetime.datetime.now()) ) #③
# スケジュール登録(毎日)
schedule.every().day.at("07:00").do(task)# スケジュール実行
while True:
schedule.run_pending()
time.sleep(10)
① 0~99の乱数を発生させ、変数today_numに代入
② today_numが2で割り切れる時(偶数の時)だけ、メールを送信
③ メールを送信したか否かをタイムスタンプ付きで表示
ちなみに、前回より変数numの数が増えているのは、スクレイピングで名言をいっぱい集めてCSVのデータを増やしたから。
プログラムをラズパイで起動してみたら、順調に動いている。
ただランダムで送るようにしただけなのに、送られてきたメールをちゃんと読むようになった。
偶然の事象に「運命」という言葉を結び付けやすい性質が人にはあるのかもしれない。
送られてきた偉人の名言が、その日の自分に必要な言葉かもしれない、、、という感情がわきやすくなる。
毎日手に入るものは大切にしようと思わないけれど、手に入るか分からないものは希少価値があるように思えるんだなぁという発見があった。