Python에서 Gmail을 통해 이메일을 보내는 방법은 무엇입니까?
게시 됨: 2021-06-06대량의 이메일을 수동으로 보내는 것은 지루한 작업입니다. 타사 서비스를 사용하여 한 번에 대량으로 이메일을 보낼 수 있습니다.
이메일을 보내기 위해 자신만의 맞춤 스크립트를 만들어 보는 것은 어떻습니까?
멋지지 않아?
네, 그렇습니다. 이메일을 보내기 위해 Python으로 스크립트를 작성할 것입니다.
파이썬에는 이메일을 보내는 데 사용되는 smtplib 라는 라이브러리가 있습니다. 라이브러리 smtplib 는 SMTP (Simple Mail Transport Protocol)를 기반으로 합니다. SMTP는 다른 사람에게 이메일을 보내는 데 사용됩니다.
Gmail 설정
여기서는 Gmail을 이메일 제공업체로 사용하겠습니다. Google은 스크립트 로그인을 허용하지 않습니다. 그리고 스크립트가 Gmail 계정에 로그인할 수 있도록 Gmail 계정 보안을 변경해야 합니다.
Gmail 계정의 보안 옵션을 변경하면 다른 사람들이 계정에 매우 쉽게 액세스할 수 있으므로 좋지 않습니다. 새 Gmail 계정을 만드는 것이 좋습니다. 여기에서 설정으로 이동하여 보안 수준이 낮은 앱 허용: 켜기 설정을 켭니다 .
위의 설정을 켜는 것이 불편하다면 Google API를 사용하여 Gmail 계정에 로그인할 수 있습니다. 여기에서 인증에 Google API를 사용하는 스크립트를 찾을 수 있습니다.
메일을 보내는 단계
smtplib 라이브러리를 사용하여 메일을 보내려면 특정 단계를 수행해야 합니다. 먼저 단계를 살펴본 다음 스크립트를 작성해 보겠습니다.
#1. SMTP 서버에 연결
서비스 공급자마다 SMTP 서버 도메인 이름과 포트가 다릅니다. 스크립트에서 사용할 이메일 공급자의 SMTP 서버 도메인 이름과 포트를 사용해야 합니다. Gmail용 SMTP 서버 도메인 이름 및 포트는 smtp.gmail.com 및 <em>465</em> 입니다.
SSL 암호화는 TSL 암호화보다 안전하므로 SMTP 서버 연결에 SSL 암호화를 사용 합니다 . TSL 암호화를 사용하려면 465 대신 포트 587 을 사용하십시오. SMTP 서버 도메인 이름은 이메일 서비스 제공업체에 따라 다릅니다.
SMTP 서버에 연결하는 코드
server = smtplib.SMTP_SSL(smtp_server_domain_name, port, context=ssl_context)#2. 로그인
SMTP 서버에 대한 연결이 설정되면 login SMTP 개체의 방법으로 이메일 주소와 비밀번호를 사용하여 login 할 수 있습니다. 코드는 다음과 같습니다.
server.login(sender_email, password)#삼. 메일을 보내다
로그인 후에는 메일을 보낼 때까지 기다릴 수 없습니다. sendmail 메서드를 사용하여 메일을 보냅니다. 다음 형식으로 메일을 보내야 합니다.
제목: your_subject_for \newline mail_content
공백은 필요하지 않습니다. 그것들은 단지 위의 형식으로 된 설명을 위한 것입니다. 샘플 코드를 봅시다.
server.sendmail(sender_mail, email, f"Subject: {subject}\n{content}")#4. 그만두 다
SMTP c를 종료하는 것을 잊지 마십시오.
우리는 Python을 사용하여 메일을 보내는 단계를 보았습니다. 그러나 우리는 완전한 코드에 대해 논의하지 않았습니다. 코드를 빠르게 살펴보겠습니다.
import smtplib, ssl class Mail: def __init__(self): self.port = 465 self.smtp_server_domain_name = "smtp.gmail.com" self.sender_mail = "GMAIL_ADDRESS" self.password = "SECURE_PASSWORD" def send(self, emails, subject, content): ssl_context = ssl.create_default_context() service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context) service.login(self.sender_mail, self.password) for email in emails: result = service.sendmail(self.sender_mail, email, f"Subject: {subject}\n{content}") service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() subject = input("Enter subject: ") content = input("Enter content: ") mail = Mail() mail.send(mails, subject, content)Mail 이라는 클래스를 만들었습니다. 그리고 그것은 메일을 보낼 수있는 방법이라고 송신 있습니다. 수업을 작성하거나하지 않는 것은 귀하에게 달려 있습니다. 클래스는 그것을 더 읽기 쉽게 만듭니다. 위에서 설명한 모든 단계를 send 메서드에서 하나씩 구현했습니다.
만세! Python 스크립트를 사용하여 메일을 보냈습니다.
HTML 콘텐츠
메일을 HTML로 보내고 싶다면? 가능합니까?
그래, 왜 안 돼? email.mime 이라는 HTML 라이브러리를 사용하여 메일을 보낼 수 있습니다. 빌트인 라이브러리입니다.
MIME은 응용 프로그램, 비디오, 이미지 등을 지원하기 위해 이메일 형식을 확장하는 데 사용되는 표준입니다.
email.mime 모듈에서 필요한 두 개의 클래스가 있습니다. MIMEText 및 MIMEMultipart 입니다. 그들에 대한 간단한 설명을 보자.
#1. MIME텍스트
MIMEText 클래스는 메일 내용을 HTML로 작성하는 데 사용됩니다. HTML 콘텐츠와 콘텐츠 유형을 전달하여 MIMEText 클래스의 인스턴스를 만듭니다. 아래 샘플 코드를 참조하십시오.
html_content = MIMEText(html_template, 'html')일부 메일 서비스는 HTML 렌더링을 지원하지 않습니다. 따라서 일반 텍스트와 HTML에 대해 MIMEText 클래스의 두 인스턴스를 만드는 것이 좋습니다.

#2. MIME멀티파트
MIMEMultipart 클래스는 형식을 단순화하고 주소에서 주소 등으로 제목을 작성하는 데 사용됩니다. MIMEText 클래스로 만든 콘텐츠를 attach 메서드를 사용하여 MIMEMultipart에 제공합니다.
MIMEMultipart의 인스턴스가 일반 텍스트 또는 HTML을 렌더링하기 위한 alternative 인수로 생성되었는지 확인해야 합니다. HTML 내용으로 메일을 보내보자.
import smtplib, ssl from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart class Mail: def __init__(self): ... def send(self, emails): ssl_context = ssl.create_default_context() service = smtplib.SMTP_SSL(self.smtp_server_domain_name, self.port, context=ssl_context) service.login(self.sender_mail, self.password) for email in emails: mail = MIMEMultipart('alternative') mail['Subject'] = 'Geekflare Celebrations' mail['From'] = self.sender_mail mail['To'] = email text_template = """ Geekflare Hi {0}, We are delighted announce that our website hits 10 Million views this month. """ html_template = """ <h1>Geekflare</h1> <p>Hi {0},</p> <p>We are delighted announce that our website hits <b>10 Million</b> views last month.</p> """ html_content = MIMEText(html_template.format(email.split("@")[0]), 'html') text_content = MIMEText(text_template.format(email.split("@")[0]), 'plain') mail.attach(text_content) mail.attach(html_content) service.sendmail(self.sender_mail, email, mail.as_string()) service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() mail = Mail() mail.send(mails) MIMEMultipart 인스턴스에서 해당 속성 Bcc 를 사용하여 Bcc 를 추가할 수도 있습니다.
첨부 파일 추가
첨부 파일은 이미지, pdf , 문서, 시트 등이 될 수 있으며 email.mime 클래스에는 email.mime 라는 이름이 있습니다. 메일에 첨부 파일을 추가하는 데 사용됩니다.
위 메일에 첨부파일을 추가해보자.
import smtplib, ssl from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders from pathlib import Path class Mail: def __init__(self): ... def send(self, emails): ## login... for email in emails: ## MIMEMultipart instance ## text and html templates ## MIMEText instances ## attaching messages to MIMEMultipart ## attaching an attachment file_path = "Geekflare-logo.png" mimeBase = MIMEBase("application", "octet-stream") with open(file_path, "rb") as file: mimeBase.set_payload(file.read()) encoders.encode_base64(mimeBase) mimeBase.add_header("Content-Disposition", f"attachment; filename={Path(file_path).name}") mail.attach(mimeBase) ## sending mail service.quit() if __name__ == '__main__': mails = input("Enter emails: ").split() mail = Mail() mail.send(mails)한 번에 대량 메일로 메일 보내기
루프를 사용하여 여러 회원에게 동일한 메일을 보냈습니다. 그것이 한 가지 경우입니다(수신자가 다른 수신자에 대해 알고 싶지 않은 경우).
같은 그룹의 한 번에 1000 명의 구성원에게 같은 메일을 보내야 한다고 가정합니다. 이러한 경우 루프를 사용하는 것이 적절하지 않습니다. 일반 메일 작성의 받는 사람 필드에 여러 이메일을 추가할 수 있습니다. Python 스크립트에서 어떻게 합니까?
이메일 목록을 쉼표와 공백 으로 구분 된 문자열로 결합해야 합니다 . 조인 메소드 문자열을 사용하여 모든 이메일을 하나의 문자열로 결합할 수 있습니다. 이메일을 문자열로 결합하는 코드를 참조하십시오.
", ".join(emails)위의 문자열을 사용하여 위 스크립트의 To 필드를 바꿉니다. 그게 다야, 당신은 한 번에 대량 메일로 메일을 보냈습니다.
결론
Python에서 이메일을 보낼 수 있는 타사 라이브러리가 있습니다. 그 중 일부는 Envelopes, Yagmail, Flanker 등입니다. 이러한 라이브러리는 몇 줄의 코드로 스크립트를 작성하는 데 도움이 됩니다. 그것들을 탐색할 수도 있습니다.
이제 Python 스크립트를 사용하여 이메일을 자동화할 수 있습니다. 이메일 전송 구조는 사용 사례에 따라 다릅니다. 우리는 이메일을 보내는 다양한 시나리오를 보았습니다. 튜토리얼에서 설명한 스크립트를 사용 사례에 맞게 쉽게 사용자 정의할 수 있습니다. 나는이 기사에서 참조를 가져 왔습니다.
해피코딩
