Hi,
I have a very simple piece of code (just for testing):
import smtplib
import time
server = 'smtp.myprovider.com'
recipients = ['johndoe@somedomain.com']
sender = 'me@mydomain.com'
message = 'Subject: [PGS]: Results\n\nBlaBlaBla'
session = smtplib.SMTP(server)
session.sendmail(sender,recipients,message);
This works but the problem is that e-mail clients don't display a sender. I want to be able to add a sender name to the e-mail. Suggestions?
-
smtplibdoesn't automatically include aFrom:header, so you have to put one in yourself:message = 'From: me@example.com\nSubject: [PGS]: Results\n\nBlaBlaBla'(In fact,
smtplibdoesn't include any headers automatically, but just sends the text that you give it as a raw message)ΤΖΩΤΖΙΟΥ : Perhaps explaining that smtplib does not automatically include *any* header would be even more helpful. -
You can utilize the email.message.Message class, and use it to generate mime headers, including
from:,to:andsubject. Send theas_string()result via SMTP.>>> from email import message >>> m1=message.Message() >>> m1.add_header('from','me@no.where') >>> m1.add_header('to','myself@some.where') >>> m1.add_header('subject','test') >>> m1.set_payload('test\n') >>> m1.as_string() 'from: me@no.where\nto: myself@some.where\nsubject: test\n\ntest\n' >>> -
The "sender" you're specifying in this case is the envelope sender that is passed onto the SMTP server.
What your MUA (Mail User Agent - i.e. outlook/Thunderbird etc.) shows you is the "From:" header.
Normally, if I'm using smtplib, I'd compile the headers separately:
headers = "From %s\nTo: %s\n\n" % (email_from, email_to)The format of the From header is by convention normally
"Name" <user@domain>You should be including a "Message-Id" header and a "Reply-To" header as well in all communications. Especially since spam filters may pick up on the lack of these as a great probability that the mail is spam.
If you've got your mail body in the variable body, just compile the overall message with:
message = headers + bodyNote the double newline at the end of the headers. It's also worth noting that SMTP servers should separate headers with newlines only (i.e. LF - linfeed). However, I have seen a Windows SMTP server or two that uses \r\n (i.e. CRLF). If you're on Windows, YMMV.
0 comments:
Post a Comment