在Mac或Linux上用Python发送邮件的最佳方法?
我想用我的Python脚本发送电子邮件,但这并不像PHP那样简单。在PHP中,我只需要用mail()函数就可以了。
我试过这个例子:
import smtplib
FROM = "sender@example.com"
TO = ["me@gmail.com"]
SUBJECT = "Hello!"
TEXT = "This message was sent with Python's smtplib."
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
但是它只返回了一堆我根本不懂的错误信息……
Traceback (most recent call last):
File "mylo.py", line 70, in <module>
sys.exit(main())
File "mylo.py", line 66, in main
send_mail()
File "mylo.py", line 37, in send_mail
server = smtplib.SMTP(SERVER)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 239, in __init__
(code, msg) = self.connect(host, port)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 295, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/smtplib.py", line 273, in _get_socket
return socket.create_connection((port, host), timeout)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 512, in create_connection
raise error, msg
socket.error: [Errno 61] Connection refused
我该如何用Python发送电子邮件呢?
2 个回答
2
我建议你使用 mailtools 2
,你可以在这里找到它:http://pypi.python.org/pypi/mailtools/2
这个工具可以发送普通文本和HTML格式的邮件,使用起来非常简单。
20
我重新编写了发送邮件的逻辑:
#!/usr/bin/python -tt
from email.mime.text import MIMEText
from datetime import date
import smtplib
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 587
SMTP_USERNAME = "email@gmail.com"
SMTP_PASSWORD = "yourpassword"
EMAIL_TO = ["recepient1@gmail.com", "recepient2@gmail.com"]
EMAIL_FROM = "email@gmail.com"
EMAIL_SUBJECT = "Demo Email : "
DATE_FORMAT = "%d/%m/%Y"
EMAIL_SPACE = ", "
DATA='This is the content of the email.'
def send_email():
msg = MIMEText(DATA)
msg['Subject'] = EMAIL_SUBJECT + " %s" % (date.today().strftime(DATE_FORMAT))
msg['To'] = EMAIL_SPACE.join(EMAIL_TO)
msg['From'] = EMAIL_FROM
mail = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
mail.starttls()
mail.login(SMTP_USERNAME, SMTP_PASSWORD)
mail.sendmail(EMAIL_FROM, EMAIL_TO, msg.as_string())
mail.quit()
if __name__=='__main__':
send_email()
这个脚本非常灵活,可以根据需要进行配置。