¿Python necesita registrarse primero para enviar correos electrónicos mediante SMTP?
SMTP (Protocolo simple de transferencia de correo) es un protocolo simple de transferencia de correo. Es un conjunto de reglas para transmitir correo desde una dirección de origen a una dirección de destino. Controla el método de transferencia de cartas.
smtplib de Python proporciona una forma muy conveniente de enviar correos electrónicos. Simplemente encapsula el protocolo SMTP.
La sintaxis de Python para crear un objeto SMTP es la siguiente:
import smtplib
smtpObj = smtplib.SMTP( [host [, puerto [, local_hostname] ]]] ) p>
Descripción del parámetro:
host: host del servidor SMTP. Puede especificar la dirección IP o el nombre de dominio del host, como por ejemplo: ziqiangxuetang.com. Este es un parámetro opcional.
puerto: si proporciona el parámetro de host, debe especificar el número de puerto utilizado por el servicio SMTP. Generalmente, el número de puerto SMTP es 25.
local_hostname: si SMTP está en su máquina local, solo necesita especificar la dirección del servidor como localhost.
El objeto SMTP de Python utiliza el método sendmail para enviar correos electrónicos. La sintaxis es la siguiente:
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]
Descripción del parámetro:
from_addr: dirección del remitente de correo electrónico
to_addrs: lista de cadenas, dirección de envío de correo electrónico
msg: enviar mensaje
Preste atención al tercer parámetro aquí, msg es una cadena que representa un correo electrónico. Sabemos que un correo electrónico generalmente consta de un título, remitente, destinatario, contenido del correo electrónico, archivo adjunto, etc. el formato de msg. El formato es el formato definido en el protocolo smtp
Ejemplo
El siguiente es un ejemplo simple de envío de correos electrónicos usando Python:
#!/usr/bin/python.
importar smtplib
remitente = 'from@fromdomain.com'
receptores = ['to@todomain.com ']
mensaje = """De: De la persona
Para: A la persona
Asunto: Prueba de correo electrónico SMTP p>
Este es un mensaje de correo electrónico de prueba.
"""
prueba:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(remitente, destinatarios, mensaje)
imprimir "Correo electrónico enviado correctamente"
excepto SMTPException:
print "Error: no se puede enviar correo electrónico"
Usa Python para enviar correos electrónicos en formato HTML
La diferencia entre enviar correos electrónicos en formato HTML con Python y enviarlos sin formato mensajes de texto es establecer el _subtipo en MIMEText para html.
El código específico es el siguiente:
importar smtplib
de email.mime.text importar MIMEText
mailto_list=["YYY@YYY.com"]
mail_host="smtp.XXX.com" #Configurar servidor
mail_user="XXX" #Nombre de usuario
mail_pass="XXXX" #Contraseña
mail_postfix="XXX.com" #El sufijo de la bandeja de salida
def send_mail(to_list,sub,content): #to_list: destinatario; sub: contenido del asunto: contenido del correo electrónico
me="hello"+"<"+mail_user+"@"+mail_postfix+">" #El saludo aquí se puede configurar arbitrariamente Después de recibir la carta, se mostrará de acuerdo con la configuración
msg = MIMEText( content,_subtype='html',_charset='gb2312') #Crea una instancia, aquí configurada en formato html para correo electrónico
msg['Subject'] = sub #Establece el tema
msg['From'] = yo
msg['To'] = ";".join(to_list)
prueba:
s = smtplib.SMTP()
s.connect(mail_host) #Conéctate al servidor smtp
s.login(mail_user,mail_pass) #Inicia sesión en el servidor
s.sendmail(me , to_list, msg.as_string()) #Enviar correo
s.close()
devolver Verdadero
excepto excepción, e:
print str(e)
return False
if __name__ == '__main__':
if send_mail(mailto_list,"hello","小五义"):
print "Enviado correctamente"
else:
print " Error de envío"
O puede especificar el tipo de contenido como texto/html en el cuerpo del mensaje, como se muestra en el siguiente ejemplo:
#!/usr/bin/python
import smtplib
message = """De: De persona
A : A la persona
Versión MIME: 1.0
Tipo de contenido: texto/html
Asunto: correo electrónico HTML SMTP prueba
Este es un correo electrónico
l mensaje que se enviará en formato HTML
Este es un mensaje HTML.
Este es el título.
"""
prueba:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(remitente, destinatarios, mensaje) p>
imprimir "Correo electrónico enviado correctamente"
excepto SMTPException:
imprimir "Error: no se puede enviar el correo electrónico"
Python envía un correo electrónico con archivos adjuntos
Para enviar un correo electrónico con un archivo adjunto, primero debe crear una instancia MIMEMultipart(), luego construir el archivo adjunto. Si hay varios archivos adjuntos, puede construirlos en secuencia y finalmente enviarlos usando smtplib.smtp. .
desde email.mime.text importar MIMEText
desde email.mime.multipart importar MIMEMultipart
importar smtplib
#Crear una banda Ejemplo de archivo adjunto
msg = MIMEMultipart()
#Construir archivo adjunto 1
att1 = MIMEText(open('d:\\123.rar', ' rb').read(), 'base64', 'gb2312')
att1["Content-Type"] = 'aplicación/octet-stream'
att1["Contenido -Disposition"] = 'attachment; filename="123.doc"'#El nombre del archivo aquí se puede escribir arbitrariamente, sea cual sea el nombre escrito y el nombre que se muestra en el correo electrónico
msg.attach(att1 )
#Construir archivo adjunto 2
att2 = MIMEText(open('d:\\123.txt', 'rb').read(), 'base64', 'gb2312 ')
att2["Content-Type"] = 'aplicación/octeto-stream'
att2["Content-Disposition"] = 'archivo adjunto="123.txt "'
msg.attach(att2)
#Agregar encabezado de correo electrónico
msg['to'] = 'YYY@YYY.com'
msg ['from'] = 'XXX@XXX.com'
msg['subject'] = 'hola mundo'
#Enviar correo electrónico
pruebe:
servidor = smtplib.SMTP()
server.connect('smtp.XXX.com')
server.login(' XXX','XXXXX ')#XXX es el nombre de usuario, XXXXX es la contraseña
server.sendmail(msg['from'], msg['to'],msg.as_string()) p>
servidor .quit()
imprimir 'enviado correctamente'
excepto excepción, e:
imprimir str(e)
Los siguientes ejemplos especifican Cambiar el encabezado de tipo de contenido a multiparte/mixto y enviar el archivo de texto /tmp/test.txt:
#!/usr/bin/python
importar smtplib
importar base64
filename = "/tmp/test.txt"
# Leer el contenido del archivo y usar codificación base64
fo = open(nombre de archivo, "rb")
filecontent = fo.read()
contenido codificado = base64.b64encode(filecontent) # base64
remitente = 'webmaster@tutorialpoint.com '
recibidor = 'amrood.a
dmin@gmail.com'
marker = "AUNIQUEMARKER"
body ="""
Este es un correo electrónico de prueba para enviar un archivo adjunto.
"""
# Definir información del encabezado
part1 = """De: De la persona
A: A la persona
Asunto: Envío de archivo adjunto
Versión MIME: 1.0
Tipo de contenido: límite multiparte/mixto; =%s
--%s
""" % (marcador, marcador)
# Definir acción del mensaje
part2 = """Tipo de contenido: texto/sin formato
Codificación de transferencia de contenido:8 bits
%s
--%s
""" % (cuerpo,marcador)
# Definir partes cercanas
part3 = """Tipo de contenido: multiparte/mixto; nombre=\"%s\"
Codificación-transferencia-de-contenido:base64
Disposición-de-contenido: archivo adjunto; nombre de archivo=%s
%s
--% s --
""" %(nombre de archivo, nombre de archivo, contenido codificado, marcador)
mensaje = parte1 + parte2 + parte3
prueba:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(remitente, destinatario, mensaje)
imprimir "Correo electrónico enviado correctamente"
excepto Excepción:
imprimir "Error: no se puede enviar el correo electrónico"