[英]How can I send email using Python?
我正在編寫一個使用Python發送電子郵件的程序。 我從各種論壇中學到的是以下代碼:
#!/usr/bin/env python
import smtplib
sender = "sachinites@gmail.com"
receivers = ["abhisheks@cse.iitb.ac.in"]
yourname = "Abhishek Sagar"
recvname = "receptionist"
sub = "Testing email"
body = "who cares"
message = "From: " + yourname + "\n"
message = message + "To: " + recvname + "\n"
message = message + "Subject: " + sub + "\n"
message = message + body
try:
print "Sending email to " + recvname + "...",
server = smtplib.SMTP('smtp.gmail.com:587')
username = 'XYZ@gmail.com'
password = '*****'
server.ehlo()
server.starttls()
server.login(username,password)
server.sendmail(sender, receivers, message)
server.quit()
print "successfully sent!"
except Exception:
print "Error: unable to send email"
但它只是打印“”錯誤:無法發送電子郵件“並退出終端。我怎么解決這個問題?
我將最后兩行修改為
except Exception, error:
print "Unable to send e-mail: '%s'." % str(error)
我收到以下錯誤消息:
Traceback (most recent call last):
File "./2.py", line 45, in <module>
smtpObj = smtplib.SMTP('localhost')
File "/usr/lib/python2.6/smtplib.py", line 239, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python2.6/smtplib.py", line 295, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python2.6/smtplib.py", line 273, in _get_socket
return socket.create_connection((port, host), timeout)
File "/usr/lib/python2.6/socket.py", line 514, in create_connection
raise error, msg
socket.error: [Errno 111] Connection refused
如果消息頭,有效負載包含非ascii字符,那么它們應該被編碼:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from email.header import Header
from email.mime.text import MIMEText
from getpass import getpass
from smtplib import SMTP_SSL
login, password = 'user@gmail.com', getpass('Gmail password:')
recipients = [login]
# create message
msg = MIMEText('message body…', 'plain', 'utf-8')
msg['Subject'] = Header('subject…', 'utf-8')
msg['From'] = login
msg['To'] = ", ".join(recipients)
# send it via gmail
s = SMTP_SSL('smtp.gmail.com', 465, timeout=10)
s.set_debuglevel(1)
try:
s.login(login, password)
s.sendmail(msg['From'], recipients, msg.as_string())
finally:
s.quit()
如果您打印錯誤消息,您可能會全面了解發生了什么錯誤。 嘗試(沒有雙關語)這個:
try:
# ...
except Exception, error:
print "Unable to send e-mail: '%s'." % str(error)
如果在閱讀錯誤消息后仍然無法理解您的錯誤,請使用錯誤消息更新您的問題,我們可以為您提供更多幫助。
更多信息后更新 :
錯誤消息
socket.error:[Errno 111]連接被拒絕
表示遠程端(例如GMail SMTP服務器)拒絕網絡連接。 如果你看看smtplib.SMTP構造函數 ,你似乎應該改變
server = smtplib.SMTP('smtp.gmail.com:587')
以下。
server = smtplib.SMTP(host='smtp.gmail.com', port=587)
根據錯誤消息,您使用localhost作為SMTP服務器,然后拒絕連接。 您的本地主機沒有運行SMTP服務器我想,您需要確保您連接的SMTP服務器有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.