odemailer: 在 node.js 环境下轻松实现邮件发送功能.
ejs: 高效的嵌入式 javascript 模板引擎,让你利用 javascript 生成HTML页面
npm install --save nodemailer ejs
npm install --save-dev @types/nodemailer
const transporter: Mail=createTransport({
service: "qq", // 使用的是qq邮箱
port: 465, // smtp端口
auth: {
user: `your_qq_email@qq.com`, // 用户名
pass: `clcqtcdwmelbecde`, // 密码(此处使用的是: qq授权码)
},
});
await transporter.sendMail({
from: `your_qq_email@qq.com`, // 发件人
to: `xxx@163.com, xxx2@163.com`, // 收件人,多个邮箱使用 , 间隔
cc: `xxx@163.com`, // 抄送
bcc: `xxx@163.com`, // 密送
subject: `node.js yyds!`, // 邮件主旨
text: `hello world!`, // 发送文本信息
});
const transporter: Mail=createTransport({
service: "qq", // 使用的是qq邮箱
port: 465, // smtp端口
auth: {
user: `your_qq_email@qq.com`, // 用户名
pass: `clcqtcdwmelbecde`, // 密码(此处使用的是: qq授权码)
},
});
await transporter.sendMail({
from: `your_qq_email@qq.com`, // 发件人
to: `xxx@163.com, xxx2@163.com`, // 收件人,多个邮箱使用 , 间隔
cc: `xxx@163.com`, // 抄送
bcc: `xxx@163.com`, // 密送
subject: `node.js yyds!`, // 邮件主旨
html: `<h1 bgColor="red">hello world!</h1>`, // 发送html
});
const transporter: Mail=createTransport({
service: "qq", // 使用的是qq邮箱
port: 465, // smtp端口
auth: {
user: `your_qq_email@qq.com`, // 用户名
pass: `clcqtcdwmelbecde`, // 密码(此处使用的是: qq授权码)
},
});
await transporter.sendMail({
from: `your_qq_email@qq.com`, // 发件人
to: `xxx@163.com, xxx2@163.com`, // 收件人,多个邮箱使用 , 间隔
cc: `xxx@163.com`, // 抄送
bcc: `xxx@163.com`, // 密送
subject: `node.js yyds!`, // 邮件主旨
html: `<h1 bgColor="red">hello world!</h1>`, // 发送html
// 发送附件
attachments: [
{
filename: `abc.jpeg`, // 附件名称
path: `${process.cwd()}/src/assets/girl.jpeg`, // 附件地址
},
],
});
子邮件在日常工作中有很大用途,凡项目或任务,有邮件来往可避免扯皮背锅。而在一些自动化的应用场合,也使用得广泛,特别是系统监控方面,如果在资源使用达到警戒线之前自动发邮件通知运维人员,能消除隐患于前期,而不至于临时临急去做善后方案。
?
源 | 数据分析与统计学之美
这是一个很好的Python自动化的案例。对于小公司,采用手动方式一个个发送邮件还是可以的。如果一个上百号,上千号,或者更大规模的公司,我们再一个个发送工资条邮件,就太浪费时间了。鉴于此,我写了一个这样的程序,实现Python自动化群发工资条的功能。
原始数据源如下:
最终效果如下:
看到这里,你肯定也觉得很好玩儿吧?那么这样一个自动化程序,应该怎么做呢?接着往下看。
其实这样一个代码,总结下来,就只有如下5步:
① 导入相关模块;
② 读取Excel表格;
③ 登录邮箱;
④ 准备要发送的邮件正文;
⑤ 发送邮件;
from openpyxl import load_workbook # 用于操作Excel的模块
import yagmail # 用于存储邮箱地址和密码的模块
import keyring # 用于记录你邮箱地址和密码的模块
from datetime import * # 用于获取当前系统时间的模块
# 加载Excel文件
wb=load_workbook("群发工资条.xlsx",data_only=True)
sheet=wb.active
print(sheet)
-------------------------------------------------------
for row in sheet:
row_text=""
for cell in row:
if cell.column=="B":
continue
row_text +=f"{cell.value},"
print(row_text)
------------------------------------------------------
print("年:", date.today.year)
print("月:", date.today.month)
print(f"{date.today.year}-{date.today.month}月")
结果如下:
yagmail.register("1127421544@qq.com","flmyucvntuvbjbcb")
pwd=keyring.get_password("yagmail","1127421544@qq.com")
yag=yagmail.SMTP(user="1127421544@qq.com",host="smtp.qq.com",password=pwd)
需要注意的是:第一行代码是用于存储你的邮件地址和密码。第二行代码使用keyring是为了记录你的邮件地址和密码。第三行代码直接登录邮箱。
关于Python怎么发送邮件,我之前写了一篇文章,进行了详细的介绍,下方是这篇文章的链接,大家可以参考。
Python发邮件:http://suo.im/60ylZ1
4)准备要发送的正文
由于发送的正文里面,需要我们发送一个带表格的邮件,这就有必要我们了解一点前端知识。因此,我在最后面花一个章节为大家讲解。
yag.send(f"{email}",f"数据分析与统计学之美有限公司{date.today.year}-{date.today.month}月工资情况",contents)
上述代码共有3个参数:第一个参数是收件人的邮箱;第二个参数是邮件的标题;第三个参数是发送的内容。
会用Python发送邮件的人都知道,邮件正文内容可以写html代码。你可能觉得自己啥也不会,但是不用担心,我们不需要学习太高深的前端代码,做过爬虫的人耳濡目染,都能够看懂一些。
我们可以直接用Pycharm创建一个新的html文件,里面会显示初始的前端代码,我们进行简单的添加,就可以获得一个表格啦!
最终在浏览器中显示效果如下:
从上图中根本看不出这是一个表格,那是因为我们没有为它设置一个样式,下面要做的就是为表格设置样式。
最终在浏览器中显示效果如下:
从上图可以看出,整个前端代码就是用一些列的标签组成,同时标签都是成对出现的。因此,在Python中写前端代码时,只需要在对应位置添加对应的标签即可。
for row in sheet:
row_text="<tr>"
for cell in row:
if cell.column=="B":
continue
row_text +=f"<td>{cell.value}</td>"
row_text +="</tr>"
print("\n")
print(row_text)
结果如下:
为了文章的完整性,我在文章最后放上我的代码。但是限于文章篇幅,最后我只粘贴一张图片,详细代码,大家可以去文末获取。
*请认真填写需求信息,我们会在24小时内与您取得联系。