๐Ÿ”ฅ TIL - Day 25

Kim Dae Hyunยท2021๋…„ 10์›” 10์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
29/93

๐Ÿ“Œ ์‚ฌ์šฉ์ž ์ด๋ฉ”์ผ ์•Œ๋ฆผ ์„œ๋น„์Šค ๊ตฌํ˜„

๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์–ด์ œ ๋‚ ์งœ์— ๋ฐœ์˜๋œ ๋ฒ•์•ˆ์„ ์•„์นจ 9์‹œ์— ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด๋ฉ”์ผ๋กœ ์ „์†กํ•˜๋Š” ์„œ๋น„์Šค์ด๋‹ค.

์•Œ๋ฆผ ์„œ๋น„์Šค์˜ ๋™์˜ ๋ฐฉ์‹์€ ์•„์ง ์ƒ๊ฐํ•ด๋ด์•ผํ•˜๊ณ  ๋™์˜๋ฅผ ๋ฐ›์•˜๋‹ค๋ฉด ์‚ฌ์šฉ์ž๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” DB์ธ users์˜ receive_mail ํ•„๋“œ๋ฅผ True๋กœ ํ•˜๋Š” ๋‹จ์ˆœํ•œ ๋ฐฉ์‹์„ ์„ ํƒํ–ˆ๋‹ค.

๋ฉ”์ผ์ „์†ก์€ ์ด์ „์— ํ…Œ์ŠคํŠธํ•ด๋ดค๋˜ Flask-Mail ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ณ  ์Šค์ผ€์ฅด๋Ÿฌ๋ฅผ ํ†ตํ•ด ํŠน์ • ์‹œ๊ฐ„์— ๋™์ž‘ํ•˜๋„๋ก ํ•  ์˜ˆ์ •์ด๋‹ค.


โœ”๏ธ ์–ด์ œ ๋‚ ์งœ๋กœ ๋ฐœ์˜๋œ ๋ฒ•์•ˆ์„ ๊ฐ€์ ธ์˜ค๊ธฐ
API์—์„œ ๋ฐœ์˜๋‚ ์งœ๋ฅผ PROPOSE_DT๋กœ ๋‚ด๋ ค์ค€๋‹ค. API๋กœ ๋ถ€ํ„ฐ 10๊ฑด์”ฉ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์œผ๋ฉด์„œ ์˜ค๋Š˜๋‚ ์งœ์—์„œ ํ•˜๋ฃจ๋ฅผ ๋บ€ ๋‚ ์งœ๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์•˜๋‹ค.

API์—์„œ ๋‚ ์งœ๊ธฐ์ค€ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ๋‚ด๋ ค์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ์ •ํ•œ ๋‚ ์งœ๋ฒ”์œ„์—์„œ ๋ฒ—์–ด๋‚œ ์ˆœ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋งŒ ๋ฐ›์œผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๊ฒŒ ๋ถ€ํ•˜๊ฐ€ ํฐ ์ž‘์—…์€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™๋‹ค.

๋‚ ์งœ ์—ฐ์‚ฐ์€ timedelta๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.
์˜ค๋Š˜ ๋‚ ์งœ์—์„œ ํ•˜๋ฃจ๋ฅผ ๋บ€ ๋‚ ์งœ๋ฅผ ๋ฒ”์œ„๋กœ ์ง€์ •ํ–ˆ๋‹ค.

 target_date = str(datetime.now().date() - timedelta(days=1))

ํ›„์— ์•„๋ž˜ ์กฐ๊ฑด์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•˜๋‹ค

if propose_date >= target_date:
	...

โœ”๏ธ ์•Œ๋ฆผ ์„œ๋น„์Šค์— ๋™์˜ํ•œ ์‚ฌ์šฉ์ž์˜ ๋ฉ”์ผ์„ ๊ฐ€์ ธ์˜ค๊ธฐ
users DB์— ๋™์˜์— ๋Œ€ํ•œ ํ•„๋“œ๋ฅผ ๋‘์–ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ–ˆ๋‹ค.

def get_allow_mail_list():
    allow_users = list(db.users.find({'receive_mail':True},{'_id':0, 'username':1}))
    return allow_users

โœ”๏ธ ๋ฉ”์ผ์ „์†ก ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ

@application.route('/mail-test')
def mail_send():
    laws = get_laws()
    user_mail_list = get_allow_mail_list()
    
    recipients = []
    for user_mail in user_mail_list:
        print(user_mail)
        recipients.append(user_mail['username'])

    msg = Message("[Today-Law] ์–ด์ œ ๋ฐœ์˜๋ฒ•์•ˆ ์•Œ๋ฆผ ", sender='zbeld123@gmail.com',recipients=recipients)
    html_template = f"<h1>์–ด์ œ ๋ฐœ์˜๋ฒ•์•ˆ ์•Œ๋žŒ</h1><div>{laws[0]['title']}</div>"
    msg.html = html_template

    mail.send(msg)

    return "ok"

์ž~์•Œ ๋“ค์–ด์˜จ๋‹ค.

์ด์ œ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ํ•œ ๋ˆˆ์— ๋“ค์–ด์˜ค๊ฒŒ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์„ ์ง€ ๋ฉ”์ผ ํ…œํ”Œ๋ฆฟ์„ ๊ณ ๋ฏผํ•ด์•ผ ํ•œ๋‹ค.


+++

Crontab ์‚ฌ์šฉ๋ฒ•

์›”~๊ธˆ ๋งค์ผ ์˜ค์ „ 9์‹œ์— ์Šค์ผ€์ฅด๋Ÿฌ๋ฅผ ๋™์ž‘์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด ?!
(0:์ผ์š”์ผ ~ 6:ํ† ์š”์ผ)

cron = "00 09 * * 1-5"
profile
์ข€ ๋” ์ฒœ์ฒœํžˆ ๊นŒ๋จน๊ธฐ ์œ„ํ•ด ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๐Ÿง

0๊ฐœ์˜ ๋Œ“๊ธ€