python-定时发送生日邮件祝福

前言:按照人事的想法,能不能帮助他们定时发送员工生日祝福邮件。

正好学到python ,打算练下手

直接附上代码

个人想法:第一步数据库建立一张员工信息表;用于记录员工的名字,生日,邮箱。对于表没有专门考虑长度,直接用。

CREATE TABLE `birth` (
`id` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`birthtime` varchar(255) DEFAULT NULL,
`mail` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

python-代码。

创建一个函数,用来查询用户当天用户生日信息

 

def selectmysql():
db = pymysql.connect("ip", "user", "passwd", "Schema", charset='utf8' )
cursor = db.cursor()
cursor.execute("select name,DATE_FORMAT(birthtime,'%m-%d'),mail from birth where DATE_FORMAT(birthtime,'%m-%d') = DATE_FORMAT(NOW(),'%m-%d')")##查询当天生日的用户
data = cursor.fetchall()
print("Database version : %s " % (data,))##打印查询的数据
return data

db.close()
selectmysql()

def sendmail(fmail,fname):
# 第三方 SMTP 服务
#mail_host = "smtp.qq.com" # 设置服务器
#mail_user = "*****@qq.com" # 发件人用户名
#mail_pass = "*******" # 发件人口令,QQ邮箱是输入授权码,在qq邮箱设置里用验证过的手机发送短信获得,不含空格


sender = '*****@qq.com' # 与发件人用户名保持一致
#receivers = "*****@qq.com" # 收件人邮箱地址,可设置为你的QQ邮箱或者其他邮箱
receivers = fmail
message = MIMEMultipart()
message['From'] = Header("生日祝福小分队", 'utf-8')
message['To'] = Header(fname, 'utf-8')#收件人,写变量

subject = '生日快乐'
message['Subject'] = Header(subject, 'utf-8')

msgAlternative = MIMEMultipart('alternative')
message.attach(msgAlternative)
mail_msg ="""
<p><font size="2">Dear:<br />拨动祝福的琴弦,为你唱出世界上最美妙的生日歌;<br />点亮幸福的烛光,为你送上精美的礼品;<br />祝生日快乐,一帆风顺;<br />爱你的 新云联集团<br />PS:小礼物已备好,记得到人资部领取哦</font></p>
<p><img src="cid:image1"></p>
"""
msgAlternative.attach(MIMEText(mail_msg,'html','utf-8'))##文本内容
fp = open(r'/app/mail/birth2.png','rb')##附件的一张图片
msgImage = MIMEImage(fp.read())#添加图片
fp.close()
msgImage.add_header('Content-ID','<image1>')
message.attach(msgImage)

try:
#smtpObj = smtplib.SMTP_SSL(mail_host, 465)#根据自己使用的邮箱来设置
smtpObj = smtplib.SMTP_SSL(mail_host,994)#根据自己使用的邮箱来设置
        smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
smtpObj.quit()
print
u"邮件发送成功"
except smtplib.SMTPException as e:
print('e')
time.sleep(10) # 延时十秒
print('End')

以上是主要文件

如下是能正常使用,需要导入一些模块

#!/usr/bin/python
# -*- coding:utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import time # 延时设置
import pymysql
import sys
reload(sys)
sys.setdefaultencoding('utf8')
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

datenow = time.strftime("%m-%d")
print(datenow)

 

def selectmysql():
db = pymysql.connect("ip", "user", "passwd", "Schema", charset='utf8' )
cursor = db.cursor()
cursor.execute("select name,DATE_FORMAT(birthtime,'%m-%d'),mail from birth where DATE_FORMAT(birthtime,'%m-%d') = DATE_FORMAT(NOW(),'%m-%d')")##查询当天生日的用户
data = cursor.fetchall()
print("Database version : %s " % (data,))##打印查询的数据,(data,)逗号是表示查询的数据不止一条
return data

db.close()
selectmysql()
def sendmail(fmail,fname):
# 第三方 SMTP 服务
#mail_host = "smtp.qq.com" # 设置服务器
#mail_user = "*****@qq.com" # 发件人用户名
#mail_pass = "*******" # 发件人口令,QQ邮箱是输入授权码,在qq邮箱设置里用验证过的手机发送短信获得,不含空格


sender = '*****@qq.com' # 与发件人用户名保持一致
#receivers = "*****@qq.com" # 收件人邮箱地址,可设置为你的QQ邮箱或者其他邮箱
receivers = fmail
message = MIMEMultipart()
message['From'] = Header("生日祝福小分队", 'utf-8')
message['To'] = Header(fname, 'utf-8')#收件人,写变量

subject = '生日快乐'
message['Subject'] = Header(subject, 'utf-8')

msgAlternative = MIMEMultipart('alternative')
message.attach(msgAlternative)
mail_msg ="""
<p><font size="2">Dear:<br />拨动祝福的琴弦,为你唱出世界上最美妙的生日歌;<br />点亮幸福的烛光,为你送上精美的礼品;<br />祝生日快乐,一帆风顺;<br />爱你的 新云联集团<br />PS:小礼物已备好,记得到人资部领取哦</font></p>
<p><img src="cid:image1"></p>
"""
msgAlternative.attach(MIMEText(mail_msg,'html','utf-8'))##文本内容
fp = open(r'/app/mail/birth2.png','rb')##附件的一张图片
msgImage = MIMEImage(fp.read())#添加图片
fp.close()
msgImage.add_header('Content-ID','<image1>')
message.attach(msgImage)

try:
#smtpObj = smtplib.SMTP_SSL(mail_host, 465)#根据自己使用的邮箱来设置
smtpObj = smtplib.SMTP_SSL(mail_host,994)#根据自己使用的邮箱来设置
        smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
smtpObj.quit()
print
u"邮件发送成功"
except smtplib.SMTPException as e:
print('e')
time.sleep(10) # 延时十秒
print('End')
if __name__ == '__main__':

data = selectmysql()

print(data)
for row in data:
fname = row[0]
fdate = row[1]
fmail = row[2]
print("name=%s,birthdate=%s,mail=%s" % (fname,fdate,fmail))
#compare
if fdate == datenow:
sendmail(fmail,fname)###调用sendmail函数,把查询的数据作为变量发送


 

posted @ 2019-03-27 16:03  小黑仔学It  阅读(1385)  评论(0编辑  收藏  举报