由于可能需要的功能,寻找可以群发邮件的办法,寻找过几个免费和付费平台,但是均不是特别满意。于是老唐同学说可以用Python结合阿里云邮件推送服务。这里把可以实现的Python SMTP脚本整理出来,脚本也来自阿里云提供的。这里老蒋记录下来,以便以后有需要的时候直接使用,不至于遗忘。
第一、脚本代码
> # -- coding:utf-8 --
> import smtplib
> import email
> from email.mime.multipart import MIMEMultipart
> from email.mime.text import MIMEText
> from email.mime.image import MIMEImage
> from email.mime.base import MIMEBase
> from email.mime.application import MIMEApplication
> from email.header import Header
> # 发件人地址,通过控制台创建的发件人地址
> username = '*'
> # 发件人密码,通过控制台创建的发件人密码
> password = '*'
> # 自定义的回复地址
> replyto = '*'
> # 收件人地址或是地址列表,支持多个收件人,最多30个
> #rcptto = ['', '']rcptto = '*'
> # 构建alternative结构
> msg = MIMEMultipart('alternative')
> msg['Subject'] = Header('自定义信件主题'.decode('utf-8')).encode()
> msg['From'] = '%s <%s>' % (Header('自定义发信昵称'.decode('utf-8')).encode(), username)
> msg['To'] = rcptto
> msg['Reply-to'] = replyto
> msg['Message-id'] = email.utils.make_msgid()
> msg['Date'] = email.utils.formatdate()
> # 构建alternative的text/plain部分
> textplain = MIMEText('自定义TEXT纯文本部分', _subtype='plain', _charset='UTF-8')
> msg.attach(textplain)
> # 构建alternative的text/html部分
> texthtml = MIMEText('自定义HTML超文本部分', _subtype='html', _charset='UTF-8')
> msg.attach(texthtml)
> # 发送邮件
> try:
> client = smtplib.SMTP()
> #python 2.7以上版本,若需要使用SSL,可以这样创建client
> #client = smtplib.SMTP_SSL()
> #SMTP普通端口为25或80
> client.connect('smtpdm.aliyun.com', 25)
> #开启DEBUG模式
> client.set_debuglevel(0)
> client.login(username, password)
> #发件人和认证地址必须一致
> #备注:若想取到DATA命令返回值,可参考smtplib的sendmaili封装方法:
> # 使用SMTP.mail/SMTP.rcpt/SMTP.data方法
> client.sendmail(username, rcptto, msg.as_string())
> client.quit()
> print '邮件发送成功!'
> except smtplib.SMTPConnectError, e:
> print '邮件发送失败,连接失败:', e.smtp_code, e.smtp_error
> except smtplib.SMTPAuthenticationError, e:
> print '邮件发送失败,认证错误:', e.smtp_code, e.smtp_error
> except smtplib.SMTPSenderRefused, e:
> print '邮件发送失败,发件人被拒绝:', e.smtp_code, e.smtp_error
> except smtplib.SMTPRecipientsRefused, e:
> print '邮件发送失败,收件人被拒绝:', e.smtp_code, e.smtp_error
> except smtplib.SMTPDataError, e:
> print '邮件发送失败,数据接收拒绝:', e.smtp_code, e.smtp_error
> except smtplib.SMTPException, e:
> print '邮件发送失败, ', e.message
> except Exception, e:
> print '邮件发送异常, ', str(e)
参考出处:https://help.aliyun.com/document_detail/29453.html
第二、注意事项
1、在python2.7环境中测试可行的,据说3.x不行。
2、根据需要我们设置发件箱,以及相关参数,建议使用SSL推送,不能用25端口,得用465端口。
3、更主要的是脚本不能用email.py命名,要不会出现"解决"smtplib推送邮件时候出现smtplib.py"问题"的问题。