Python SMTP를 통해 이메일을 보내는 방법에 대한 자세한 소개(코드 포함)

不言
풀어 주다: 2018-10-09 15:39:31
앞으로
2684명이 탐색했습니다.

이 글은 Python으로 이메일을 보내기 위한 SMTP에 대한 자세한 소개를 담고 있습니다.(코드 포함) 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

Python을 사용하여 생성된 테스트 보고서를 이메일 첨부 파일로 보내는 방법은 무엇입니까?

1. 개요

SMTP(Simple Mail Transfer Protocol)는 간단한 메일 전송 프로토콜로, 원본 주소에서 대상 주소로 메일을 전송하는 규칙 집합으로, 편지 전송 방법을 제어합니다.

Python의 smtplib는 이메일을 보내는 매우 편리한 방법을 제공하며, 이는 단순히 SMTP 프로토콜을 캡슐화합니다.
Python은 smtplib와 email이라는 두 가지 모듈로 SMTP를 지원합니다. 그 중 email은 이메일 구성을 담당하고, smtplib은 이메일 전송을 담당합니다.

Python에서 알 수 없는 MIME 유형의 첨부 파일을 보내는 기본 아이디어를 이해해 봅시다:

0、前提:导入邮件发送模块
        from email.mime.text import MIMEText
        from email.mime.multipart import MIMEMultipart
        import smtplib
1、构造MIMEMultipart对象作为根容器
2、构造MIMEText对象作为邮件显示内容并附加到根容器
    a、读入文件内容并格式化
    b、设置附件头
3、设置根容器属性
4、得到格式化后的完整文本
5、用smtp发送邮件
6、封装成sendEmail类。
로그인 후 복사

2. 이메일 전송 요소

동시에 이메일을 보내는 데 필요한 몇 가지 요소에 대해 생각해 보세요.

1、服务器。以QQ邮箱举例,则为smtp.qq.com
2、端口号。有465和587,请使用587
3、发送者。
4、密码。密码总不能直接写在文件里吧?哈哈,这里需要使用qq邮箱获取授权码。
5、收件人。(可能还不止一个)
6、发送邮件的主题subject。
7、邮件文本内容。
8、附件。
로그인 후 복사

전에 .ini 구성 파일을 읽는 방법을 썼기 때문에 이 부분에서는 이메일 전송을 위한 일부 요소가 구성 파일에 배치됩니다.

Python SMTP를 통해 이메일을 보내는 방법에 대한 자세한 소개(코드 포함)

해당 스크립트는 다음과 같습니다. 구성 파일을 읽는 방법은 다음과 같습니다. (readConfig.py 부분)

import os
import configparser

# config
cur_path = os.path.dirname(os.path.relpath(__file__))
configPath = os.path.join(cur_path,'config.ini')
conf = configparser.ConfigParser()
conf.read(configPath)

def get_smtpServer(smtpServer):
    smtp_server = conf.get('email',smtpServer)
    return smtp_server
# 
......
로그인 후 복사

3. 이메일 부분

MIMEMultipart() 이메일 루트 컨테이너 객체를 구축한 후 루트 컨테이너를 사용하여 이메일의 다양한 요소를 정의해야 합니다. , 이메일 제목, 보낸 사람, 받는 사람, 이메일 본문, 이메일 첨부 파일 등

이메일 제목과 발신자를 어떻게 설정하나요?

# 构建根容器
msg = MIMEMultipart()

# 邮件主题、发送人、收件人、内容,此部分可以来自配置文件,也可以直接填入
msg['Subject'] = self.mail_subject  # u'自动化测试报告'
msg['from'] = self.mail_sender
msg['to'] = self.mail_pwd
로그인 후 복사

이메일 텍스트의 본문 부분을 어떻게 정의하나요?

# 邮件正文部分body,1、可以用HTML自己自定义body内容;2、读取其他文件的内容为body
# body = "您好,<p>这里是使用Python登录邮箱,并发送附件的测试"
with open(reportFile,'r',encoding='UTF-8') as f:
     body = f.read()
msg.attach(MIMEText(_text=body, _subtype='html', _charset='utf-8'))  # _charset 是指Content_type的类型</p>
로그인 후 복사

이메일에 첨부파일을 추가하는 방법은 무엇인가요?

# 添加附件
attachment = MIMEText(_text=open(reportFile, 'rb').read(), _subtype='base64',_charset= 'utf-8')
attachment['Content-Type'] = 'application/octet-stream'
attachment['Content-Disposition'] = 'attachment;filename = "result.html"'
msg.attach(attachment)
로그인 후 복사

보내는 방법?

4단계로 보내기: 서버 연결 획득, 메일함에 로그인, 이메일 보내기, 로그아웃.
대략 다음과 같습니다.

try:
      smtp = smtplib.SMTP_SSL(host=self.mail_smtpserver, port=self.mail_port)  # 继承自SMTP
except:
      smtp = smtplib.SMTP()
      smtp.connect(self.mail_smtpserver, self.mail_port)

# smtp.set_debuglevel(1)
# 创建安全连接,加密SMTP
smtp.starttls()     # Puts the connection to the SMTP server into TLS mode.
# 用户名和密码
smtp.login(user=self.mail_sender, password=self.mail_pwd)

# 函数:sendmail(self, from_addr, to_addrs, msg, mail_options=[],rcpt_options=[]):
smtp.sendmail(self.mail_sender, self.mail_receiverList, msg.as_string())
smtp.quit()
로그인 후 복사

smtp.starttls() 문장을 추가했습니다. 이 문장은 이메일이 안전하게 전송되고 도청되지 않도록 SMTP 세션을 암호화하는 데 사용됩니다. smtp.starttls()。这一句是用来加密SMTP会话,保证邮件安全发送不被窃听的。
在创建完SMTP对象后,立刻调用starttls()SMTP 개체를 생성한 후 즉시 starttls() 메서드를 호출하세요.
사실 이제 전체 이메일 전송 모듈이 완료되었습니다.

4. 문제

이 과정에서 몇 가지 문제가 발생했으며 이를 여기에 게시하여 여러분과 공유하겠습니다.

잘못된 던지기 535
오류 발생: smtplib.SMTPAuthenticationError: (535, b'Error: xc7xebxcaxb9xd3xc3xcaxdaxc8xa8xc2xebxb5xc7xc2xbcxa1xa3xcfxeaxc7xe9xc7xebxbfxb4: http://service.mail.qq.com/cg...')
해결책:마지막 링크를 누르세요. 실제로는 인증코드 문제 때문입니다

인증코드를 교체한 후에도 535 오류가 계속 발생합니다.
해결책 : 포트를 교체하십시오. qq 사서함에는 465/587이라는 두 개의 SSL 프로토콜 포트가 있기 때문입니다.

오류: smtplib.SMTPAuthenticationError: (530, b'Must issue a STARTTLS command first.')
해결 방법: login() 전에 문장을 추가합니다: smtp.starttls()

5 코드를 모두

붙여넣습니다. 아래 전체 파일입니다. 본 파일은 다른 파일에 종속되어 있으므로 참고용일 뿐, 방법은 동일합니다.

아아아아

위 내용은 Python SMTP를 통해 이메일을 보내는 방법에 대한 자세한 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿