Latest web development tutorials

Python SMTP para enviar correo

SMTP (Simple Mail Transfer Protocol) que es Simple Mail Transfer Protocol, que es un conjunto de normas para la transmisión de mensajes desde el origen al destino, lo que se tiene que controlar la forma en que las cartas de tránsito.

smtplib del pitón proporciona una forma muy conveniente para enviar correo electrónico. Es el protocolo SMTP para un paquete sencillo.

Python crear sintaxis objeto SMTP es el siguiente:

import smtplib

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

Descripción de parámetros:

  • host: host del servidor SMTP. Puede especificar un nombre de dirección IP del host o dominio, tales como: w3cschool.cc, este es un parámetro opcional.
  • puerto: Si proporciona un parámetro host, es necesario especificar el número de puerto utilizado por el servicio SMTP, en circunstancias normales, el número de puerto SMTP es 25.
  • nombresistema_local: Si su SMTP en esta máquina, sólo tiene que especificar la dirección del servidor para localhost.

De objetos Python SMTP Sendmail utilizando el método de envío de e-mail con la siguiente sintaxis:

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

Descripción de parámetros:

  • from_addr: dirección de correo electrónico del remitente.
  • to_addrs: lista de cadenas, enviar e-mail.
  • msg: Enviar un mensaje

Aquí debemos señalar que el tercer argumento, msg es una cadena que representa el correo. Sabemos que un mensaje se compone generalmente de un encabezado, remitente, destinatario, contenido del mensaje, archivos adjuntos, etc, enviar correo, prestar atención a formato MSG. Este formato es el formato de definición de protocolo SMTP.

Ejemplos

El siguiente es un mensaje enviado usando Python ejemplo sencillo:

#!/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: 无法发送邮件"

Utilizamos tres cotizaciones para configurar mensajes de correo electrónico, correo electrónico estándar requiere tresencabezados:De, Para yAsunto,cada información directamente con una división fila vacía.

Estamos conectados por crear instancias de objetossmtpObjacceso al módulo smtplib SMTP SMTP para, y para enviar el mensaje utilizando el método deSendmail.

Realizar el procedimiento anterior, si instala esta unidad Sendmail, que seria:

$ python test.py 
邮件发送成功

Ver nuestra bandeja de entrada (por lo general en la basura), puede ver el mensaje de correo electrónico:

Si no tenemos acceso nativo a Sendmail, también se pueden utilizar otros proveedores de servicios de correo electrónico de acceso SMTP (QQ, Netease, Google, etc.).

#!/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: 无法发送邮件"

Al utilizar Python envía mensajes en formato HTML

Excepto los mensajes enviados Python y mensaje de correo electrónico con formato HTML se envía como texto sin formato en los MimeText _subtype establece en html. código específico de la siguiente manera:

#!/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: 无法发送邮件"

Realizar el procedimiento anterior, si instala esta unidad Sendmail, que seria:

$ python test.py 
邮件发送成功

Ver nuestra bandeja de entrada (por lo general en la basura), puede ver el mensaje de correo electrónico:


Python enviar correo con archivos adjuntos

Enviar mensajes con archivos adjuntos, primero debe crear instancia MimeMultipart (), anexo a continuación, construido, si hay varios archivos adjuntos se puede construir de forma secuencial. Por último smtplib.smtp envió.

#!/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 
邮件发送成功

Ver nuestra bandeja de entrada (por lo general en la basura), puede ver el mensaje de correo electrónico:


Añadir una imagen de texto HTML

mensaje de texto HTML en los proveedores de servicios de correo generales para agregar fuera de la cadena no es válido, el derecho de agregar avance se muestran a continuación:

#!/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 
邮件发送成功

Ver nuestra bandeja de entrada (si está en la basura puede necesitar para pasar a la bandeja de entrada antes de la visualización normal), puede ver el mensaje de correo electrónico:

Para obtener más información, consulte: https://docs.python.org/2/library/email-examples.html .