Computer >> 컴퓨터 >  >> 소프트웨어 >> 우편

Python에서 자동화된 이메일 메시지를 보내는 방법

상업용 이메일 클라이언트는 사용자 친화적인 GUI의 편리함을 제공하지만 많은 개발자 또는 콘텐츠 제작자가 이메일 요구 사항에 대해 원하는 유연성과 사용자 정의 기능이 부족한 경우가 많습니다.

소셜 미디어 채널의 새 구독자에게 감사 이메일을 보내거나 최신 프로젝트에 이메일 기능을 추가하는 경우 Python에서 SMTP를 사용하여 자동화된 메시지를 보내는 기능은 매우 유용할 것입니다.

지금 컴퓨터에서 실행 중인 이메일을 보내기 위한 Python 스크립트를 얻는 방법을 알아보려면 계속 읽으십시오.

SMTP란 무엇입니까?

간단히 말해서 SMTP 또는 Simple Mail Transfer Protocol은 메일 서버가 인터넷을 통해 이메일을 전송하기 위한 통신 프로토콜입니다.

인터넷 또는 기타 유사한 네트워크를 통한 통신에 사용되는 프로토콜 집합인 TCP/IP 제품군의 응용 프로그램 계층의 필수적인 부분입니다. SMTP가 구현된 네트워크에서 저장 및 전달이라고 하는 프로세스 네트워크를 통해 메일을 이동하는 데 도움이 됩니다.

각 끝점에서 메일 전송 에이전트(MTA)로 알려진 소프트웨어는 저장 및 전달을 사용하여 참여하는 SMTP 서버 간의 통신을 용이하게 합니다. 따라서 SMTP의 주요 역할은 단순히 메일이 네트워크에서 한 지점에서 다른 지점으로 이동하는 위치와 방법을 지정하는 것입니다.

시작하기

이 프로그램을 사용하여 이메일을 보내려면 이메일 계정이 있어야 합니다. 이메일 클라이언트의 SMTP 서비스를 사용하여 이메일을 보낼 것이기 때문입니다. 이 자습서에서는 Gmail을 사용합니다.

로컬 SMTP 디버깅 서버를 사용하여 테스트 이메일을 보낼 수도 있지만 지금은 이메일 계정이 더 직관적이므로 이메일을 보내는 데 사용하겠습니다.

단순히 기존 Gmail 계정을 사용하는 것도 가능하지만 프로그램을 사용하다 보면 곧 테스트 이메일로 채워질 수 있습니다. 이것이 테스트 목적으로 '일회용' 계정을 만드는 것이 좋습니다.

이제 보안 수준이 낮은 앱이 Gmail 계정에 액세스하도록 허용하는 옵션을 켭니다. 이것은 기본 이메일의 개인 정보 설정을 가지고 놀지 않는 것이 좋으므로 일회용 이메일을 사용하는 또 다른 이유입니다.

파이썬으로 이메일 작성하기

Python 3에는 SMTP 서버와 함께 작동하는 데 사용할 수 있는 smtplib(smtp 라이브러리의 약자)라는 모듈이 사전 설치되어 있습니다.

다른 Python 모듈과 마찬가지로 가장 먼저 해야 할 일은 smtplib를 가져오는 것입니다.

import smtplib

SMTP 개체 초기화

이제 smtplib를 사용하여 기존 이메일 클라이언트의 기능 대부분을 제공하는 SMTP 개체를 만들 수 있습니다. 그러나 SMTP 객체의 기능은 인스턴스 메소드를 통해서만 사용할 수 있습니다. 따라서 당연히 다음 단계는 개체 인스턴스를 선언하는 것입니다.

mySMTP = smtplib.SMTP("smtp.google.com") 

Google의 SMTP 서버를 사용하여 이메일을 보내도록 SMTP 개체를 구성합니다.

그런 다음 보낸 사람과 받는 사람 이메일을 지정합니다. 여기에서 이전에 만든 Gmail 계정이 유용합니다.

emailSender = “[email protected]
myThroaway = "[email protected]"
emailRecipients = [myThroaway]

여기서 주목해야 할 점은 받는 사람 목록이 실제로 배열이라는 점입니다. 즉, 원자가 아닌 값을 저장하도록 설계되었습니다. 결과적으로 이 필드에 전체 메일링 리스트를 지정할 수도 있습니다!

메시지 작성

프로세스의 가장 간단한 부분이라고 할 수 있는 여기에서 일반적으로 새 이메일을 작성할 때 추가하는 값을 입력해야 합니다. 여기에는 다음이 포함됩니다.

  • 발신자 세부정보
  • 수신자 세부정보
  • 주제
  • 메시지 본문

이러한 필드는 삼중따옴표 안에 함께 표시되며 다음과 같이 구분됩니다.

newEmail = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: Email Test
This is the body of the email.
"""

이메일 보내기

마지막으로 sendmail 명령을 사용하여 SMTP 서버에서 수신자 서버로 메일을 보낼 수 있습니다.

mySMTP.sendmail(emailSender, emailRecipients, newEmail)

이제 마지막 단계만 남았습니다. 예측 가능한 프로그램 충돌을 방지하기 위해 코드를 재구성하는 것입니다.

Python 이메일 프로그램 문제 해결

때때로 SMTP 서버가 받는 사람과 연결을 설정하지 못하거나 한 SMTP 포트에서 다른 SMTP 포트로 이메일을 보내는 데 문제가 있을 수 있습니다. 이러한 경우 프로그램이 예기치 않게 충돌할 수 있습니다.

이러한 가능성을 설명하기 위해 try-except를 사용할 수 있습니다. try 안에 오류가 발생하기 쉬운 문을 차단하고 넣습니다. 차단하다. try-except 블록과 함께 전체 프로그램은 다음과 같아야 합니다.

import smtplib
emailSender = “[email protected]
myThroaway = ‘[email protected]
emailRecipients = [myThroaway]
newEmail = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: Email Test
This is the body of the email.
"""
try:
smtpObj = smtplib.SMTP(‘smtp.gmail.com’)
mySMTP.sendmail(emailSender, emailRecipients, newEmail)
print (“Email sent successfully!”)
except SMTPException:
print ("Error: There was an error in sending your email.")

이메일 보안

실제 환경에서 Python을 사용하여 이메일을 보내려는 경우 양방향 통신이 안전한지 확인하는 것이 중요합니다.

기본 포트가 있는 단순 SMTP 서버를 사용하면 통신에 암호화 계층이 제공되지 않습니다. 즉, 제3자가 네트워크에서 수신 대기 중인 경우 사용자의 로그인 자격 증명과 이메일에 포함된 정보에 액세스할 수 있습니다.

이 문제를 피하는 한 가지 방법은 TLS(전송 계층 보안) 프로토콜을 사용하여 통신을 암호화하는 것입니다. 이것은 Gmail 및 Outlook과 같은 주요 이메일 클라이언트에서 사용하는 것과 동일한 프로토콜로 이메일이 잘못된 사람의 손에 넘어가지 않도록 합니다.

Python에서 자동화된 이메일 메시지를 보내는 방법

그렇게 하려면 이전에 만든 프로그램을 약간 변경해야 합니다.

물론 첫 번째 단계는 ssl을 가져오는 것입니다. smtplib와 함께 라이브러리 . ssl 라이브러리는 보안 SSL 컨텍스트를 생성하고 양쪽 끝의 특정 포트에 연결하여 암호화된 네트워크를 통해 통신할 수 있는 기능을 제공합니다.

보안 SSL 컨텍스트는 암호, 프로토콜 버전, 신뢰할 수 있는 인증서, TLS 옵션 및 TLS 확장의 모음일 뿐입니다.

그런 다음 TLS 포트를 지정하고 몇 가지 ssl 라이브러리 기능을 사용하여 보안 전자 메일러를 만듭니다.

모든 변경 사항이 적용된 코드는 다음과 같습니다.

import smtplib, ssl
smtpServer = "smtp.gmail.com"
port = 587
myEmail = "[email protected]"
password = "my_password"
#email and password can also be user input fields
context = ssl.create_default_context()
newEmail = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: Email Test
This is the body of the email.
"""
try:
server = smtplib.SMTP(smtpServer,port)
server.starttls(context=context)
server.login(newEmail, password)
except Exception as e:
print("the email could not be sent.")
finally:
server.quit()

이전과 마찬가지로 갑작스러운 프로그램 충돌을 방지하기 위해 try-except 블록에서 SMTP 인스턴스를 만들고 사용해야 합니다.

이 Python 스크립트로 할 수 있는 작업

코드를 사용하여 이메일을 자동화하는 훌륭하고 놀랍도록 유용한 기술을 배웠으므로 이제 다양한 메일링 리스트에 이메일을 보내야 하는 모든 플랫폼에 적용할 수 있습니다.

개인 웹사이트에서 자동 승인 이메일을 보내는 데 사용하는 것부터 크리스마스 카드를 이메일로 보내거나 가족과 친구에게 초대장을 보내는 데 사용하는 것까지 이 작은 Python 스크립트의 사용은 자신의 창의력에 의해서만 제한됩니다.

또한 이것은 Python으로 할 수 있는 많은 멋진 작업 중 하나일 뿐입니다. 유비쿼터스 개발자 지원과 배우기 쉬운 구문 덕분에 Python 기술을 습득하는 것이 그 어느 때보다 쉬워졌습니다.

코드로 멋진 것을 계속 구축하려면 Python 3으로 Telegram 봇을 구축하는 방법에 대한 가이드를 확인하세요!