想通过PY自动发送邮件,并获取发送成功/失败信息。
不过网上介绍的很多方法都不成功。
下面是尝试过的方法:
方法一:
from_addr = 'sender'
password = 'pass'
to_addr = 'receive_mail '
smtp_server = 'smtp.qq.com'
msg = MIMEText('send by python','plain','utf-8')
msg['From'] = Header(from_addr)
msg['To'] = Header(to_addr)
msg['Subject'] = Header('python test')
try:
server = smtplib.SMTP_SSL(smtp_server)
server.set_debuglevel(1)
smtplib.stderr=open("debug.txt","write") #redirect debug to file
server.connect(smtp_server,465)
server.login(from_addr, password)
server.sendmail(from_addr, to_addr, msg.as_string())
server.quit()
except Exception as e:
方法二:
# Find an available file descriptor
t = tempfile.TemporaryFile()
available_fd = t.fileno()
t.close()
# now make a copy of stderr
os.dup2(2,available_fd)
# Now create a new tempfile and make Python's stderr go to that file
t = tempfile.TemporaryFile()
os.dup2(t.fileno(),2)
from_addr = 'sender'
password = 'pass'
to_addr = 'receive_mail '
smtp_server = 'smtp.qq.com'
msg = MIMEText('send by python','plain','utf-8')
msg['From'] = Header(from_addr)
msg['To'] = Header(to_addr)
msg['Subject'] = Header('python test')
try:
server = smtplib.SMTP_SSL(smtp_server)
server.set_debuglevel(1)
server.connect(smtp_server,465)
server.login(from_addr, password)
server.sendmail(from_addr, to_addr, msg.as_string())
# Grab the stderr from the temp file
sys.stderr.flush()
t.flush()
t.seek(0)
stderr_output = t.read()
t.close()
# Put back stderr
os.dup2(available_fd,2)
os.close(available_fd)
# Finally, demonstrate that we have the output:
print("STDERR:")
count = 0
for line in stderr_output.decode('utf-8').split("\n"):
count += 1
print("{:3} {}".format(count,line))
server.quit()
except Exception as e:
相似问题