Python으로 이메일을 보내고 예약하는 방법

파이썬으로 이메일을 보내는 것은 그리 어렵지 않습니다. 그러나 대부분의 튜토리얼은 가장 중요한 부분을 생략합니다! 즉:
  • Gmail을 Python과 함께 사용하는 방법
  • 비밀(암호)을 올바르게 관리하는 방법
  • 메시지 전달을 예약하는 방법

  • 이 자습서에서는 모든 작업을 수행하는 방법과 올바르게 수행하는 방법을 배우게 됩니다!

    Gmail 구성



    먼저 Python과 작동하도록 Gmail을 구성해야 합니다...

    Google 계정에 로그인하고 다음으로 이동합니다. https://myaccount.google.com/

    왼쪽 사이드바에서 보안을 찾아 클릭합니다.



    아래로 스크롤하여 "보안 수준이 낮은 앱 액세스"패널에서 "액세스 켜기"를 클릭합니다.



    토글 뒤집기:



    Google은 아마도 "중요 보안 경고"에 대한 위협적인 이메일을 보낼 것입니다.

    비밀 관리



    Google은 여러분이 Python에 이메일과 비밀번호를 제공할 것이라는 것을 알고 있기 때문에 지금 당황하고 있습니다. 자격 증명을 일반 텍스트로 Python 스크립트에 복사하여 붙여넣으면 문제가 발생할 수 있습니다! 그러나 당신은 그렇게 하지 않을 것입니다... 당신은 당신의 비밀을 올바른 방법으로 관리할 것입니다.

    새 디렉토리를 만들고 그 안에 cd:

    mkdir email-tut
    cd email-tut
    

    텍스트 편집기를 열고 .env 파일을 이메일과 비밀번호로 방금 만든 디렉토리에 저장합니다.

    [email protected]
    GMAIL_PASSWORD=Sup3r$ecretP@assW0rd!
    

    자격 증명을 Python 외부에 저장했기 때문에 이 파일.gitignore을 사용할 수 있으므로.env 저장소를 Github에 업로드할 때 비밀번호가 노출되지 않습니다!

    이제 emailbot.py 디렉토리 내(email-tut 바로 옆)에 .env라는 Python 스크립트를 생성하고 다음으로 채울 수 있습니다.

    import os
    from dotenv import load_dotenv
    
    load_dotenv(".env")
    
    SENDER = os.environ.get("GMAIL_USER")
    PASSWORD = os.environ.get("GMAIL_PASSWORD")
    

    python-dotenv 패키지의 load_dotenv 기능을 사용하면 비밀을 안전하게 가져올 수 있습니다.

    표준 라이브러리로 이메일을 보내려면 다음 가져오기 및 편의 기능이 필요합니다.

    from email.message import EmailMessage
    import smtplib
    
    def send_email(recipient, subject, body):
        msg = EmailMessage()
        msg.set_content(body)
        msg["Subject"] = subject
        msg["From"] = SENDER
        msg["To"] = recipient
        server = smtplib.SMTP_SSL("smtp.gmail.com", 465)
        server.login(SENDER, PASSWORD)
        server.send_message(msg)
        server.quit()
    

    함수를 호출하면 이메일이 발송됩니다.

    send_email("[email protected]", subject="test", body="test")
    

    전체 Python 스크립트를 저장합니다.

    from email.message import EmailMessage
    import smtplib
    import os
    from dotenv import load_dotenv
    
    load_dotenv(".env")
    
    SENDER = os.environ.get("GMAIL_USER")
    PASSWORD = os.environ.get("GMAIL_PASSWORD")
    
    def send_email(recipient, subject, body):
        msg = EmailMessage()
        msg.set_content(body)
        msg["Subject"] = subject
        msg["From"] = SENDER
        msg["To"] = recipient
        server = smtplib.SMTP_SSL("smtp.gmail.com", 465)
        server.login(SENDER, PASSWORD)
        server.send_message(msg)
        server.quit()
    
    send_email("[email protected]", subject="test", body="test")
    

    그리고 명령줄에서 테스트하여 작동하는지 확인합니다.

    python emailbot.py
    

    "테스트"만 보내는 것은 약간 보행자입니다. 영감을 주는 스크립트로 스크립트를 꾸밀 수 있습니다quotes.

    from quote import quote
    import random
    
    quotes = quote("William Shakespeare", limit=50)
    body = random.sample(quotes, k=1)[0]['quote']
    
    send_email("[email protected]", subject="Quote of the Day", body=body)
    

    스크립트를 저장하고 명령줄에서 다시 호출하여 아무것도 망치지 않았는지 확인하세요 😉

    배송 예약



    작고 귀여운 셰익스피어식 이메일 봇이 작동하기를 바라며 이제 이 봇이 매일 오전 9시에 인용문을 보내도록 예약하고 싶을 것입니다. 이 설치를 수행하려면hickory:

    pip install hickory
    

    스크립트 인수로 hickory schedule를 사용하여 명령줄에서 emailbot.py를 호출합니다.

    hickory schedule emailbot.py --every=day@9:00am
    

    그리고 그것은 문자 그대로입니다!

    일정 상태를 확인하려면 다음과 같이 할 수 있습니다.

    hickory status
    # ID      FILE         STATE    RUNS
    # ea6b74  emailbot.py  waiting  0  
    

    일정을 죽이려면 다음을 수행하십시오.

    hickory kill emailbot.py
    

    즐거운 이메일 보내세요!


    요약: 전체 스크립트:

    from email.message import EmailMessage
    import smtplib
    import os
    import random
    from dotenv import load_dotenv
    from quote import quote
    
    load_dotenv(".env")
    
    SENDER = os.environ.get("GMAIL_USER")
    PASSWORD = os.environ.get("GMAIL_PASSWORD")
    
    def send_email(recipient, subject, body):
        msg = EmailMessage()
        msg.set_content(body)
        msg["Subject"] = subject
        msg["From"] = SENDER
        msg["To"] = recipient
        server = smtplib.SMTP_SSL("smtp.gmail.com", 465)
        server.login(SENDER, PASSWORD)
        server.send_message(msg)
        server.quit()
    
    quotes = quote("William Shakespeare", limit=50)
    body = random.sample(quotes, k=1)[0]['quote']
    
    send_email("[email protected]", subject="Quote of the Day", body=body)
    

    좋은 웹페이지 즐겨찾기