script - sent email from python
Especifique un remitente al enviar correo con Python(smtplib) (6)
Tengo un código muy simple (solo para probar):
import smtplib
import time
server = ''smtp.myprovider.com''
recipients = [''[email protected]'']
sender = ''[email protected]''
message = ''Subject: [PGS]: Results/n/nBlaBlaBla''
session = smtplib.SMTP(server)
session.sendmail(sender,recipients,message);
Esto funciona, pero el problema es que los clientes de correo electrónico no muestran un remitente. Quiero poder agregar un nombre de remitente al correo electrónico. Sugerencias?
Puede utilizar la clase email.message.Message y usarla para generar encabezados de mime, incluidos from:
to:
y subject
. Envíe el resultado de as_string()
través de SMTP.
>>> from email import message
>>> m1=message.Message()
>>> m1.add_header(''from'',''[email protected]'')
>>> m1.add_header(''to'',''[email protected]'')
>>> m1.add_header(''subject'',''test'')
>>> m1.set_payload(''test/n'')
>>> m1.as_string()
''from: [email protected]/nto: [email protected]/nsubject: test/n/ntest/n''
>>>
smtplib
no incluye automáticamente un encabezado From:
por lo que debe ingresar uno:
message = ''From: [email protected]/nSubject: [PGS]: Results/n/nBlaBlaBla''
(De hecho, smtplib
no incluye ningún encabezado automáticamente, sino que simplemente envía el texto que usted le da como un mensaje sin formato)
El "remitente" que está especificando en este caso es el remitente del sobre que se pasa al servidor SMTP.
Lo que su MUA (agente de usuario de correo - es decir, Outlook / Thunderbird, etc.) muestra que es el encabezado "De:".
Normalmente, si estoy usando smtplib, compilaría los encabezados por separado:
headers = "From: %s/nTo: %s/n/n" % (email_from, email_to)
El formato del encabezado De es por convención normalmente "Name" <user@domain>
Debería incluir un encabezado "Message-Id" y un encabezado "Reply-To" también en todas las comunicaciones. Especialmente dado que los filtros de spam pueden detectar la falta de estos como una gran probabilidad de que el correo sea spam.
Si tiene su cuerpo de correo en el cuerpo de la variable, simplemente compile el mensaje general con:
message = headers + body
Tenga en cuenta la doble línea nueva al final de los encabezados. También vale la pena señalar que los servidores SMTP deben separar encabezados con líneas nuevas solamente (es decir, LF - linfeed). Sin embargo, he visto un servidor SMTP de Windows o dos que usan / r / n (es decir, CRLF). Si estás en Windows, YMMV.
Vea esta respuesta, está funcionando para mí.
código de ejemplo:
#send html email
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
from email.utils import formataddr
msg = MIMEMultipart(''alternative'')
msg[''From''] = formataddr((str(Header(''MyWebsite'', ''utf-8'')), ''[email protected]''))
msg[''To''] = ''[email protected]''
html = "email contents"
# Record the MIME types of text/html.
msg.attach(MIMEText(html, ''html''))
# Send the message via local SMTP server.
s = smtplib.SMTP(''localhost'')
# sendmail function takes 3 arguments: sender''s address, recipient''s address
# and message to send - here it is sent as one string.
s.sendmail(''[email protected]'', ''[email protected]'', msg.as_string())
s.quit()
Prueba esto-
import smtplib
email_of_user=input("What is your login email- ")
password=input("What is your password- ")
whom_2_send=input("Enter email of whom to send- ")
email_of_user="[email protected]"
password="your_password"
whom_2_send="[email protected]"
sub=input("What is your email subject- ")
sender_name=input("What is your name- ")
reciever_name=input("What is reciever''s name- ")
message = """From:"""+ sender_name +"""
To:"""+ reciever_name +"""
MIME-Version: 1.0
Content-type: text/html
Subject:"""+ sub +"""
<p>This is HTML message.</p>
<h1>This is headline.</h1>
"""
Server=smtplib.SMTP("smtp.gmail.com",587)
Server.starttls()
Server.login(email_of_user,password)
Server.sendmail(email_of_user,whom_2_send,message)
Server.quit()
print("email send succesfully")
Cuando solo usa smtplib para agregar un nombre desde el momento en que muestra su dirección de correo electrónico simplemente use:
message = """From: whatever-name/nSubject: subject/n/n
body of the message!
""".encode()
Pasar este mensaje a través de .sendmail (TO, FROM, message) funcionará.