Latest web development tutorials

파이썬 SMTP 메일을 보낼 수

단순 메일 전송 프로토콜이 전송 방식을 글자를 제어하는 ​​목적으로 소스에서 메시지를 전송하기위한 규칙들의 집합이다 SMTP (단순 메일 전송 프로토콜).

파이썬 smtplib 전자 메일을 보낼 수있는 매우 편리한 방법을 제공한다. 그것은 간단한 패키지에 대한 SMTP 프로토콜입니다.

파이썬은 다음과 같이 SMTP 개체 구문은 작성 :

import smtplib

smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

매개 변수 설명 :

  • 호스트 : SMTP 서버 호스트를. 이 선택적 매개 변수입니다, w3cschool.cc : 당신은 같은 호스트의 IP 주소 또는 도메인 이름을 지정할 수 있습니다.
  • 포트 : 당신이 호스트 매개 변수를 제공하는 경우, 당신은 SMTP 포트 번호는 25입니다 정상적인 상황에서 SMTP 서비스가 사용하는 포트 번호를 지정해야합니다.
  • 여기서 local_hostname :이 기계에 당신의 SMTP, 당신은 로컬 호스트의 서버 주소를 지정해야합니다.

다음 구문을 사용하여 전자 메일을 보내는 센드 메일 방법을 사용하여 파이썬 SMTP 개체 :

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]

매개 변수 설명 :

  • from_addr : 전자 메일 보낸 사람의 주소입니다.
  • to_addrs : 문자열리스트는 전자 메일 주소를 송신.
  • 메시지 : 메시지 보내기

여기에서 우리는 세 번째 인수는 MSG가 메일을 나타내는 문자열입니다 점에 유의해야합니다. 우리는 MSG 형식에 주목, 메일을 보낼 메시지가 일반적으로 헤더, 보낸 사람,받는 사람, 메시지 내용, 첨부 파일 등으로 구성되어 있음을 알고있다. 이 형식은 SMTP 프로토콜 정의 형식입니다.

다음은 파이썬 간단한 예제를 사용하여 전송 된 메시지입니다 :

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import smtplib
from email.mime.text import MIMEText
from email.header import Header

sender = '[email protected]'
receivers = ['[email protected]']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("本教程", 'utf-8')
message['To'] =  Header("测试", 'utf-8')

subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')


try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message.as_string())
    print "邮件发送成功"
except smtplib.SMTPException:
    print "Error: 无法发送邮件"

에,에서, 및제목, 빈 행 분할과 직접 각 정보 :우리는 전자 메일 메시지를 설정하는 세 따옴표를 사용, 전자 메일 표준은 세 개의헤더가 필요합니다.

우리는 사물smtpObjsmtplib 모듈의 SMTP SMTP 액세스를 인스턴스화하고,sendmail이방법을 사용하여 메시지를 보낼 수에 의해 연결된다.

,이 단위 센드 메일을 설치하는 경우, 그것은 출력 것입니다 위의 절차를 수행합니다 :

$ python test.py 
邮件发送成功

(일반적으로 휴지통에) 우리의받은 편지함보기, 당신은 전자 메일 메시지를 볼 수 있습니다

우리가 센드 메일 네이티브 액세스 할 수없는 경우, 당신은 또한 다른 메일 서비스 공급자에게 SMTP 액세스 (QQ, NetEase는, 구글 등)를 사용할 수 있습니다.

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 第三方 SMTP 服务
mail_host="smtp.XXX.com"  #设置服务器
mail_user="XXXX"    #用户名
mail_pass="XXXXXX"   #口令 


sender = '[email protected]'
receivers = ['[email protected]']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("本教程", 'utf-8')
message['To'] =  Header("测试", 'utf-8')

subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')


try:
    smtpObj = smtplib.SMTP() 
    smtpObj.connect(mail_host, 25)    # 25 为 SMTP 端口号
    smtpObj.login(mail_user,mail_pass)  
    smtpObj.sendmail(sender, receivers, message.as_string())
    print "邮件发送成功"
except smtplib.SMTPException:
    print "Error: 无法发送邮件"

파이썬은 HTML 형식으로 메시지를 전송하여

메시지는 파이썬을 전송하고 MimeText는 일반 텍스트가 HTML로 설정 _subtype로 HTML 형식의 전자 메일 메시지가 전송됩니다 제외. 특정 코드를 다음과 같이 :

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import smtplib
from email.mime.text import MIMEText
from email.header import Header

sender = '[email protected]'
receivers = ['[email protected]']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.w3big.com">这是一个链接</a></p>
"""
message = MIMEText(mail_msg, 'html', 'utf-8')
message['From'] = Header("本教程", 'utf-8')
message['To'] =  Header("测试", 'utf-8')

subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')


try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message.as_string())
    print "邮件发送成功"
except smtplib.SMTPException:
    print "Error: 无法发送邮件"

,이 단위 센드 메일을 설치하는 경우, 그것은 출력 것입니다 위의 절차를 수행합니다 :

$ python test.py 
邮件发送成功

(일반적으로 휴지통에) 우리의받은 편지함보기, 당신은 전자 메일 메시지를 볼 수 있습니다


파이썬은 첨부 파일이있는 메일을 보내

첨부 파일이있는 메시지를 보내, 처음의 MimeMultipart () 인스턴스를 생성하고 구성 별관이있는 경우 여러 첨부 파일이 순차적으로 구성 될 수있다. 마지막으로 전송 smtplib.smtp.

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

sender = '[email protected]'
receivers = ['[email protected]']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

#创建一个带附件的实例
message = MIMEMultipart()
message['From'] = Header("本教程", 'utf-8')
message['To'] =  Header("测试", 'utf-8')
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')

#邮件正文内容
message.attach(MIMEText('这是本教程Python 邮件发送测试……', 'plain', 'utf-8'))

# 构造附件1,传送当前目录下的 test.txt 文件
att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att1["Content-Disposition"] = 'attachment; filename="test.txt"'
message.attach(att1)

# 构造附件2,传送当前目录下的 w3big.txt 文件
att2 = MIMEText(open('w3big.txt', 'rb').read(), 'base64', 'utf-8')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="w3big.txt"'
message.attach(att2)

try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message.as_string())
    print "邮件发送成功"
except smtplib.SMTPException:
    print "Error: 无法发送邮件"
$ python test.py 
邮件发送成功

(일반적으로 휴지통에) 우리의받은 편지함보기, 당신은 전자 메일 메시지를 볼 수 있습니다


HTML 텍스트에 사진 추가

체인 외부에 추가 할 수있는 일반 메일 서비스 제공 업체에 HTML 텍스트 메시지가 돌파구를 추가 할 수있는 권한은 다음과 같습니다 유효하지 않습니다 :

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

sender = '[email protected]'
receivers = ['[email protected]']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

msgRoot = MIMEMultipart('related')
msgRoot['From'] = Header("本教程", 'utf-8')
msgRoot['To'] =  Header("测试", 'utf-8')
subject = 'Python SMTP 邮件测试'
msgRoot['Subject'] = Header(subject, 'utf-8')

msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative)


mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.w3big.com">本教程链接</a></p>
<p>图片演示:</p>
<p><img src="cid:image1"></p>
"""
msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))

# 指定图片为当前目录
fp = open('test.png', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()

# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)

try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, msgRoot.as_string())
    print "邮件发送成功"
except smtplib.SMTPException:
    print "Error: 无法发送邮件"
$ python test.py 
邮件发送成功

(휴지통에있는 경우하면 통상 표시하기 전에받은 편지함으로 이동해야 할 수도 있습니다), 전자 메일 메시지를 볼 수 있습니다 우리의받은 편지함보기 :

자세한 내용을 참조하시기 바랍니다 https://docs.python.org/2/library/email-examples.html .