作用
自动发送邮件功能适合在无人监督情况下及时通知程序运行结果,可以将结果以网页的结果发送或者以附件,内嵌的图片方式发送。 SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。需要了解网页的基本结构。
Pyh:需要通过第三方安装
Pyh: pip install PyH-0.1.1.tar
代码:以163邮箱发件,内嵌的方式显示。
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
from email.mime.multipart import MIMEMultipart,MIMEBase
from pyh import PyH, h1, h2, div
#Description : Get Current Date
def GetDate():
return datetime.datetime.now().strftime("%Y-%m-%d")
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr(( \
Header(name, 'utf-8').encode(), \
addr.encode('utf-8') if isinstance(addr, unicode) else addr))
class RecommendEmail:
def __init__(self):
# Send Email Init
self.from_user = 'xxxxxxx@163.com'
self.from_password = 'xxxxx'
self.server = 'smtp.163.com'
#Description : 设定 HTML,自定义设置
def EmailHTML(self):
page = PyH('Every Day result')
............
content=.....
return content
# Description : Send Email Module
# Input : ghtml - Email content HTML
def PushEmail(self, ghtml):
#From Email
from_addr = self.from_user
password = self.from_password
smtp_server = self.server
from_name = u'MyRobot.cs <%s>' % from_addr
to_addr = '278974835@qq.com'
msg = MIMEMultipart()
#msg = MIMEText( ghtml, 'html', 'utf-8')
msg['From'] = _format_addr(from_name)
msg['To'] = _format_addr(u'cs <%s>' % to_addr)
gtitle = u'[%s]data' % GetDate()
msg['Subject'] = Header( gtitle, 'utf-8').encode()
# 邮件正文是MIMEText:
msg.attach(MIMEText(ghtml, 'html', 'utf-8'))
# 添加附件就是加上一个MIMEBase,从本地读取一个图片:
count_image=0
for filename in os.listdir("/Users/squirrel/python/sendemail/png"):
if count_image<3:
with open(u'/Users/squirrel/python/sendemail/png/%s' % filename, 'rb') as f:
# 设置附件的MIME和文件名
mime = MIMEBase('image', 'jpg', filename=filename)
# 加上必要的头信息:
mime.add_header('Content-Disposition', 'attachment', filename=filename)
mime.add_header('Content-ID', '<%s>' % count_image)
mime.add_header('X-Attachment-Id', '%s' % count_image)
# 把附件的内容读进来:
mime.set_payload(f.read())
# 用Base64编码:
encoders.encode_base64(mime)
# 添加到MIMEMultipart: 附件部分
msg.attach(mime) #显示出来
count_image+=1
try:
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
print "邮件发送成功"
except smtplib.SMTPException as e:
print ("Error: 无法发送邮件",e)
if __name__ == '__main__':
gHandle = RecommendEmail()
ghtml = gHandle.EmailHTML()
gHandle.PushEmail(ghtml)
参考

This work is licensed under a CC A-S 4.0 International License.