I am having error when trying to send an email with python sendmail. Here is my python code: (Pas d’objet)
#! /usr/bin/python
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# me == my email address
# you == recipient's email address
me = "[email protected]"
you = "[email protected]"
# Create message container - the correct MIME type is multipart/alternative.
msg = MIMEMultipart('alternative')
msg['Subject'] = "Link"
msg['From'] = me
msg['To'] = you
# Create the body of the message (a plain-text and an HTML version).
text = "Hi!\nHow are you?\nHere is the link you wanted:\nhttp://www.python.org"
html = """\
<html>
<head></head>
<body>
<p>Hi!<br>
How are you?<br>
Here is the <a href="[http://www.python.org">link</a]http://www.python.org">link</a> you wanted.
</p>
</body>
</html>
"""
# Record the MIME types of both parts - text/plain and text/html.
part1 = MIMEText(text, 'plain')
part2 = MIMEText(html, 'html')
# Attach parts into message container.
# According to RFC 2046, the last part of a multipart message, in this case
# the HTML message, is best and preferred.
msg.attach(part1)
msg.attach(part2)
# 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(me, you, msg.as_string())
s.quit()
When I send this email, I have this error:
Traceback (most recent call last):
File "./mail.py", line 47, in <module>
s.sendmail(me, you, msg.as_string())
File "/usr/lib/python2.7/smtplib.py", line 747, in sendmail
raise SMTPRecipientsRefused(senderrs)
smtplib.SMTPRecipientsRefused: {'[email protected]': (454, '4.7.1 <[email protected]>: Relay access denied')}
I really don't know why this is not working in production since it is working in a test environment. Can you help understand, please?
This means that you are trying to send the mail from an outgoing mail server (SMTP) other than the one that is associated to your mailbox, and that the outgoing mail server does not allow such an action.
SMTP stands for Simple Mail Transfer Protocol, and is essentially the backend system that helps you and your company send, receive, and relay messages between email senders and receivers.
"Relaying Denied." What does this mean, exactly? Essentially, it's just what the message indicates; the relaying of this email was not allowed. You could call this the "Do not pass Go, do not collect $200" of email errors.
The Relay access denied
message is important: It sounds like you're successfully making an SMTP connection (to localhost
in your sample code), but that machine is refusing to accept the message: You likely need to adjust either,
localhost
localhost
mail server will accept it.In particular note that mail to port 25 (the default port for SMTP) is typically for incoming email. In your case you want the mail server to accept the message and send it on elsewhere ("relaying", thus the error message). It seems that your mail server (localhost
here) isn't setup to accept messages for non-local domains... at least not on port 25.
The other important use of SMTP is "mail submission", and this is typically setup on a different port (normally 587, or 465 if SSL encrypted). See if this is the case by using telnet on the command line; also use EHLO <some_hostname>
to see what the server offers (interesting for your issue are AUTH
and STARTTLS
), if it responds on the port, for example,
$ telnet localhost 587
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 localhost.example.org ESMTP Postfix (Ubuntu)
ehlo localhost.example.org
250-localhost.example.org
250-VARIOUS_FEATURES_ON_LINES_LIKE_THIS
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
Do this for port 25 too and compare the results: That should give you clues on how to proceed - maybe you need to AUTH
for example, or use port 587, or you may need to adjust your (localhost
) mail server configuration so it acts as a "smarthost" to forward email out to the 'net.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With