本文主要介绍如何使用python实现邮件的自动发送。
首先这个功能要求使用的模块是stmplib,email。
SMTP(Simple Message Transport Protocol):简单信息传输协议,只能由于发送邮件。
下面是简要的程序:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import smtplib
from email.mime.text import MIMEText
# 第三方SMTP服务
mail_host="smtp.163.com" # 设置服务器
mail_user="***@163.com" # 用户名
mail_pass="***"# 密码
receiver ='***@qq.com' # 接收邮箱
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = 'Python'+'<'+mail_user+'>'
message['To'] = receiver
message['Subject'] = '【Python Test】邮件测试'
try:
smtpObj = smtplib.SMTP()# 实例化
smtpObj.connect(mail_host, 25) # 25为 SMTP 端口号
smtpObj.login(mail_user,mail_pass) # 邮箱登录
print('登录成功!')
smtpObj.sendmail(mail_user, receiver, message.as_string()) # 发送邮件
smtpObj.quit() # 邮件退出
print("恭喜:邮件发送成功!")
except smtplib.SMTPException:
print("错误:无法发送邮件")
下面继续介绍。
1.【定时发送邮件】
这个功能其实很容易实现,利用time模块就能做到。基本思路是:输入你想要发送邮件的时间,获取当前的时间后不断和你设置的时间比较,当时间到了的时候,程序继续往下跑,自动发送邮件。
下面给出我的程序:
#coding=utf-8
import time
import smtplib
from email.mime.text import MIMEText
mailto_list='***@qq.com' #收件人
mail_host="smtp.163.com" #使用的邮箱的smtp服务器地址
mail_user="*** #用户名
mail_pass="*** #密码
mail_postfix="163.com" #邮箱的后缀
def send_mail(to_list,sub,content):
me="Python测试"+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content,'plain','utf-8')
msg['Subject'] = sub
msg['From'] = me
msg['To'] = to_list
try:
server = smtplib.SMTP()
server.connect(mail_host) #连接服务器
server.login(mail_user,mail_pass) #登录操作
print(u'登录成功!')
server.sendmail(me, to_list, msg.as_string())
print(u'发送成功!')
server.quit()
except Exception:
print(u'发送失败')
print('现在时间时间是:\n'+time.strftime('%H:%M:%S',time.localtime()))
hour=int(input('输入发送的时间\n时钟:'))
minute=int(input('分钟:'))
second=int(input('秒钟:'))
while True:
current_time = time.localtime(time.time())
if(current_time.tm_hour == hour) and (current_time.tm_min == minute) and (current_time.tm_sec == second):
print('时间到,开始自动发送邮件')
time.sleep(1)
send_mail(mailto_list,"Python邮件测试","Hello world") #邮件主题和邮件内容
2.【邮件群发】
其实只要传入的receiver为一个list类型的数据,就能实现群发。不过,这里还有一个问题需要格外注意。
注意看下面msg['To']这一行
#coding=utf-8
import time
import smtplib
from email.mime.text import MIMEText
mailto_list=['***@qq.com','***@qq.com',...] #收件人
mail_host="smtp.163.com" #使用的邮箱的smtp服务器地址
mail_user="*** #用户名
mail_pass="*** #密码
mail_postfix="163.com" #邮箱的后缀
def send_mail(to_list,sub,content):
me="Python测试"+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content,'plain','utf-8')
msg['Subject'] = sub
msg['From'] = me
msg['To'] = ','.join(to_list) # 收件列表以‘;’连接
try:
server = smtplib.SMTP()
server.connect(mail_host) #连接服务器
server.login(mail_user,mail_pass) #登录操作
print(u'登录成功!')
server.sendmail(me, to_list, msg.as_string())
print(u'发送成功!')
server.quit()
except Exception:
print(u'发送失败')
send_mail(mailto_list,"Python邮件测试","Hello world") #邮件主题和邮件内容
其他情况有待研究,呵呵。
当然,还有许多的可能性和创意可以挖掘。限制你的不是能力,而是想象力。