使用python发送邮件

发送邮件使用第三方 SMTP 服务,例如QQ,但是需要QQ的授权码才能发送。

所有数据都放在服务器上,需要下载下来,生成csv文件后发送给个人。贴代码如下:


#!/usr/bin/python
# -*- coding: UTF-8 -*-
import smtplib  
from email.mime.text import MIMEText  
from email.header import Header
from email.mime.multipart import MIMEMultipart
import os.path 
import time
import pymysql
import xlwt

#生成excel文件名
def createxcel(filename):  
	try:
		v_file_name = filename+'.xls'
		  
		#数据库对应地址及用户名密码,指定格式,解决输出中文乱码问题  
		conn = pymysql.connect("***","***","***","***")
		#cursor获得python执行Mysql命令的方法,也就是操作游标  
		cur = conn.cursor()   
		v_sql="select id,bi_title,bi_url,bi_date from cral_list where is_send=0"  
		cur.execute(v_sql)  
		#fetchall()则是接收全部的返回结果行  
		rows = cur.fetchall()
		if not rows:
			cur.close()  
			conn.close()
			return False
		v_cnt = len(rows)  
		  
		#生成excel文件  
		book=xlwt.Workbook()  
		  
		# 如果对一个单元格重复操作,会引发  
		# returns error:  
		# Exception: Attempt to overwrite cell:  
		# sheetname=u'sheet 1' rowx=0 colx=0  
		# 所以在打开时加cell_overwrite_ok=True解决  
		sheet1=book.add_sheet('Sheet1',cell_overwrite_ok=True)  
		  
		#表头标题  
		sheet1.write(0,0,'id')  
		sheet1.write(0,1,'标题')  
		sheet1.write(0,2,'网址')  
		sheet1.write(0,3,'爬取时间')  
		#每一列写入excel文件,不然数据会全在一个单元格中  
		for i in range(len(rows)):  
		    for j in range(4):  
		        sheet1.write(i+1,j,rows[i][j])  
		book.save(v_file_name)  
		cur.close()  
		conn.close()
		return  v_file_name   
	except:
		return False	
	
  
# 第三方 SMTP 服务
def sendemail(filename):
	mail_host="smtp.qq.com"  #设置服务器  
	mail_user="***"    #用户名  
	mail_pass="***"   
	sender = '***@qq.com'  
	# receivers = ['***@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱  
	receivers = getmailers()
	message = MIMEMultipart()  
	message['From'] = Header("爬虫服务器", 'utf-8')  
	message['To'] =  Header("管理员", 'utf-8')  
	#邮件正文内容
	message.attach(MIMEText('这是由系统管理员发送的数据……', 'plain', 'utf-8'))  
	subject = '恭喜,今天您又有新的招标数据啦'  
	message['Subject'] = Header(subject, 'utf-8')
	att1 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')
	att1["Content-Type"] = 'application/octet-stream'
	att1["Content-Disposition"] = 'attachment; filename="{}"'.format(filename)
	message.attach(att1)
	try:  
		smtpObj = smtplib.SMTP_SSL(mail_host, 465)   
		smtpObj.login(mail_user,mail_pass)    
		smtpObj.sendmail(sender, receivers, message.as_string())  
		smtpObj.quit()
		updatecral_list()  
		print("邮件发送成功") 
	except:  
	 	print('邮件发送失败')

#获得当天未发送的数据并生成表格
def getbiddingdatatoexcel():
	#检索为发送的数据-》生成表格-》返回表格名称
	date = time.strftime("%Y_%m_%d",time.localtime())
	filename = "biddingdata_{}".format(date)
	return createxcel(filename)
def updatecral_list():
	db = pymysql.connect("***","bi","***","***")
	cursor = db.cursor()
	usql = "update cral_list set is_send=1"
	cursor.execute(usql)
	cursor.close()
	db.close()

def getmailers():
	db = pymysql.connect("192.***","bi","***","***")
	cursor = db.cursor()
	findsql = "select maillist  from cral_sendemail"
	cursor.execute(findsql.encode('utf-8').decode('utf-8'))
	result = cursor.fetchone()
	db.close()
	if result:
		m = result[0]
		return 	m.split(";")
	else:
		return '***@qq.com'
	cursor.close()
	db.close()		


def main():
	filename = getbiddingdatatoexcel()
	if filename:
		sendemail(filename)




if __name__ =='__main__':
	try:
		main()
		print("处理完成")	
	except:
		print("没能成功发送邮件!")	

 

转载于:https://my.oschina.net/u/3522527/blog/2978604

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值