当前位置:首页 » 编程软件 » 发送邮件的脚本

发送邮件的脚本

发布时间: 2023-08-18 23:48:40

python批量发送邮件--包括批量不同附件

小猪在公司做出纳,干的活却包括了出纳、会计、结算专员等工作,周末都要被无奈在家加班,主要还没有加班费,简直是被公司严重压榨。每个月初都要给每个工长发预付款账单邮件,月中发结算款账单。重复性机械工作。
一个及格线上的程序员,最起码的觉悟就是将重复性的机械工作自动化,于是,在我花了一个多小时,帮她给一部分工长发了一次邮箱后,默默的回来写了这个脚本
所以,设计要点就是一个字——
恩,就酱。

经过我观察,邮件内容分为两种,这里先说第一种,“结算款”:
(1) 邮件内容(content)不变,为固定的txt文本
(2) 附件(attch)为每个工长的结算账单(excel文件.xlsx),此文件命名为总账单中自动分割出来的名字(暂时不懂怎么分割出来的=.=),格式为:

(3) 邮件主题(Subject)为附件名(不带后缀名)
(4) 邮件接收对象(工长)的名单及其邮箱地址基本不变,偶尔变动
(5)

(1) 将工长及其邮箱地址存为CSV文件的两列,python中将其读取为字典形式,存储以供后续查询邮箱地址。

(2) 遍历文件夹中的附件(.xlsx类型文件),对其进行两种操作,一方面将其名字(不带路径和后缀)提取出来,作为邮件主题(Subject),并对Subject进一步划分,得到其中的人名(工长);另一方面,将其传入MIMEbase模块中转为邮件附件对象。

(3) 由上述得到的人名(name),在字典形式的通讯录中,查找相应的地址(value),即为收件人名称和地址
(4) 利用python中的email模块和smtp模块,登录自己的邮箱账号,再对每个附件,得到的收件人名和地址,添加附件,发送邮件。done

在设计过程中有几点需要注意
(1) 有时一个邮件地址对应两个人名,此时应该在CSV文件中分为两行存储,而不是将两个人名存为同一个键;
(2)有账单.xlsx文件,通讯录里却没存储此人记录,程序应该打印提示没有通讯记录的人名,且不能直接退出,要保证员工看到此提示,此第一版程序还有解决此问题;
(3)此程序发送的邮件内容为纯文本,若要求邮件内容有不同格式(如部分加粗,部分红色),还有小部分需要每次更改的地方(如邮件内容包含当前月份),如何解决?(这就是第二种邮件内容,“预算款”);
(4)重名的,暂时还没碰到,程序中也没给出解决方案。

第一版到此,20180830,待更新
第二版更新,20180904

第三版更新,20180909

转战CSDN博客,更多博客见传送门《 xiaozhou的博客主页 》

Ⅱ 如何使用Windows Powershell脚本发送电子邮件

在运行任何脚本文件之前, 你都必须首先设置一个恰当的Execution Policy.
PowerShell脚本跟Windows CMD一样, 和MS-DOS批处理一样, 文件需要被保存为.ps1后缀名, 比如说myscript.ps1
最通常的运行脚本的方法是调用它:
PS C:\ & C:\Belfry\My first Script.ps1
注意: 这里的&操作符能允许你调用一个命令, 脚本, 或函数. 比如:
PS C:\ & C:\Program files\mycommand.exe
PS C:\ $runMyProg = C:\Program files\mycommand.exe
PS C:\ & $runMyProg
PS C:\ $myPing = Get-Command -commandType Application Ping
PS C:\ & $myPing
如果路径不包含任何的空格, 那么你就可以忽略引号和'&'操作符.
PS C:\ C:\Belfry\Myscript.ps1
如果脚本就在当前路径下, 你必须使用符号.\来告诉PowerShell该脚本就在当前路径下.
PS C:\ .\Myscript.ps1
Dot Sourcing
=====================
当使用上面的语法执行脚本的时候, 脚本中定义的变量和函数会在脚本运行结束后消失.

Ⅲ 要用shell脚本实现发邮件的需求,要发给多人,前台会把所有的邮件地址传给我,我怎么给所有地址发出去

如果你要向外部发邮件,通常需要配置你的sendmail或者使用更加强大的Postfix建立邮件服务器,然后用邮件客户端向外发送邮件。
而shell只是一个执行脚本,通过这个脚本可以实现自动发送的目的,但是解决不了你发邮件的需求。
如果有多个人,可以使用循环来写。如果你对linux不懂的话,最好尽量少使用脚本。喜欢DU啪啦君,就采纳一下吧!

Ⅳ 谁有群发邮件嘚脚本可以给本人使用吗

邮件群发一直很好的营销推广方式,下面是一米软件的智能QQ邮件营销系统,你可以了解一下。

1、自动切换IP登录多账户发送 保证第三方发件邮箱系统发送成功率

2、自定义html格式发送,自动转码敏感内容 有效提高邮件的送达率和进箱率

3、多模式发送支持 可根据需要选择smtp或http协议发送

4、随机发件人,多内容模板随机发送 尽可能保证每次发送信息都不一样

Ⅳ 怎样让电脑上的一个文本定时发送到邮件

1、配置脚本代码:
首先在文本文件中输入VBS脚本代宽纯码,然后将其另存为一个名为email.vbs的文件(文中只给出这个脚本文件的关键代码,完整的代码可在http://www.icpcw.com/bzsoft下载)。
Email.From = "发件人地址"
Email.To = "收件人地址"
Email.Subject = "邮件主题"
x="内容文件路径"
y="附件文件路径"
.Item(NameSpace&"smtpserver") = "邮箱服务器"
.Item(NameSpace&"sensername") = "用户名"
.Item(NameSpace&"sendpassword") = "密码"
只需要将这八行关键代码按照要求进行修改然后保存即可,可按以下步骤操作:首先输入自己和对方的邮箱地址,并填好主题;接着新建一个文本文件(txt格式),输入电子邮件的正文内容,在“内容文件路径”和“附件文件路径”分别填入文本内容文本文件和附件的路径。由于现在国内的电子邮箱运营商,在发送电子邮件的时候都需要进行SMTP认证,即在发送电子邮件的时候,会对发件人的用户名和密码进行验证,所以需要将“邮箱服务器”、“搜消用户名”和“密码”分世巧知别输入对应的信息就可以了(邮箱服务器地址在网上可以查到,例如163邮箱的服务器地址为:smtp.163.com,QQ邮箱则为smtp.qq.com)。
2、创建计划任务
首先打开“计划任务”窗口,点击右侧的“创建任务”命令。然后在弹出窗口“常规”标签中的“名称”选项中,输入一个任意的名称即可。接着在“安全选项”中选择管理员账户,并勾选“使用最高权限运行”选项即可。
3、然后选择“触发器”标签并点击“新建”按钮,在弹出的窗口选择“开始任务”列表中的“制定计划时”选项。接下来选择“设置”中的“每天”,并设置“开始”时间及间隔时间,并勾选“启用”后点击“确定”。然后选择“操作”标签并点击“新建”按钮,在弹出窗口的“操作”列表里面选择“启动程序”选项。然后点击“程序或脚本”选项后点击“浏览”按钮,选中刚才配置好的脚本文件。最后点击“确定”保存退出,所需的计划任务就创建好了。到了刚才设定的时间,电子邮件就会自动发送到对方邮箱中。

Ⅵ 在Python的Flask框架下收发电子邮件


这篇文章主要介绍了在Python的Flask框架下收发电子邮件的教程,主要用到了Flask中的Flask-mail工具,需要的朋友可以参考下
在大多数此类教程中都会不遗余力的介绍如何使用数据库。今天我们对数据库暂且不表,而是来关注另一个在web应用中很重要的特性:如何推送邮件给用户。
在某个轻量级应用中我们可能会添加一个如下的邮件服务功能:当用户有了新的粉丝后,我们发送一封邮件通知用户。有很多方法可以实现这个特性,而我们希望提供出一种可复用的通用框架来处理。
Flask-Mail介绍
对于我们来说是幸运的,现在已经有很多外部插件来处理邮件,虽说不能百分百按照我们的想法去处理,但已经相当接近了。
在虚拟环境中安装 Flask-Mail是相当简单的。Windows以外的用户可以让手利用以下命令来安装:
?
1
flask/bin/pip install flask-mail
Windows用户的安装稍有不同,因为Flask-Mail所使用的一些模块不能再Windows系统上运行,你可以使用以下命令:
?
1
flaskScriptspip install --no-deps lamson chardet flask-mail
配置:
回想汪指一下前文中单元测试部分的案例,我们通过添加配置支持了一个这样的功能:当应用的某个版本测试出错时可以邮件通知我们。从这个例子就可以看出如何配置使用邮件支持。
再次提醒大家,我们需要设置两个方面的内容:
邮件服务器信息
用户邮箱地址
如下正是前文中所用到的配置
# email server
MAIL_SERVER =
MAIL_PORT = 25
MAIL_USE_TLS = False
MAIL_USE_SSL = False
MAIL_USERNAME = you
MAIL_PASSWORD = your-password
# administrator list
ADMINS = [[email protected]]
其中并没有设置切实可用的邮件服务器和邮箱。现在我们通过一个例子来看如何使用gmail邮箱账户来发送邮件:
# email server
MAIL_SERVER =
MAIL_PORT = 465
MAIL_USE_TLS = False
MAIL_USE_SSL = True
MAIL_USERNAME = your-gmail-username
MAIL_PASSWORD = your-gmail-password
# administrator list
ADMINS = [[email protected]]
另外我们也可以初始化一个Mail对象来连接SMTP邮件服务器,发送邮件:
?
1
2
from flask.ext.mail import Mail
mail = Mail(app)
发个邮件试试!
为了了解flask-mail如何工作的,我们可以从命令行发一封邮件看看。进入python shell并执行如下的脚本:
?
7
from flask.ext.mail import Message
from app import mail
from config import ADMINS
msg = Message(test subject, sender = ADMINS[0], recipients = ADMINS)
msg.body = text body
msg.html = bHTML/b body
mail.send(msg)
上面这段代码会根据inconfig.py中配置的邮箱地址列表,以首个邮箱作为发件人给所有邮箱发送一封邮件。邮件内容会以文本和html两种格式呈现,而你能看到哪种格式取决于你的邮件客户端。
多么简单小巧!你完全可以现在就把它集成到你的应用中。
邮件框架
我们现在可以编写一个帮助函数来发送邮件。困滑配这是以上测试中一个通用版的测试。我们把这个函数放进一个新的原文件中用作邮件支持(fileapp/emails.py):
?
7
8
from flask.ext.mail import Message
from app import mail
def send_email(subject, sender, recipients, text_body, html_body):
msg = Message(subject, sender, recipients)
msg.body = text_body
msg.html = html_body
mail.send(msg)
Flask-Mail的邮件支持超出了我们目前的使用范围,像密件抄送和附件的功能并不会在此应用中得以使用。
Follower 提醒
现在,我们已经有了发邮件的基本框架,我们可以写发送follower提醒的函数了 (fileapp/emails.py):
11
from flask import render_template
from config import ADMINS
def follower_notification(followed, follower):
send_email([microblog] %s is now following you! % follower.nickname,
ADMINS[0],
[followed.email],
render_template(follower_email.txt,
user = followed, follower = follower),
render_template(follower_email.html,
user = followed, follower = follower))
你在这里找到任何惊喜了吗?我们的老朋友render_template函数有一次出现了。
如果你还记得,我们使用这个函数在views渲染模版. 就像在views里写html不好一样,使用邮件模版是理想的选择。我们要可能的将逻辑和表现分开,所以email模版也会和其它试图模版一起放到在模版文件夹里.
所以,我们需要为follower提醒邮件写纯文本和网页版的邮件模版,下面这个是纯文本的版本 (fileapp/templates/follower_email.txt):
?
7
8
9
Dear {{user.nickname}},
{{follower.nickname}} is now a follower. Click on the following link to visit {{follower.nickname}}s profile page:
{{url_for(user, nickname = follower.nickname, _external = True)}}
Regards,
The microblog admin
下面这个是网页版的邮件,效果会更好(fileapp/templates/follower_email.html):
11
12
13
pDear {{user.nickname}},/p
pa href={{url_for(user, nickname = follower.nickname, _external = True)}}{{follower.nickname}}/a is now a follower./p
table
tr valign=top
tdimg src={{follower.avatar(50)}}/td
td
a href={{url_for(user, nickname = follower.nickname, _external = True)}}{{follower.nickname}}/abr /
{{follower.about_me}}
/td
/tr
/table
pRegards,/p
pThe codemicroblog/code admin/p
注解:模版中的url_for函数的 _external = True 参数的意义.默认情况下,url_for 函数生成url是相对我们的域名的。例如,url_for(index)函数返回值是/index, 但是,发邮件是我们想要
最后一步是处理“follow”过程,即触发邮件提醒时的视图函数,(fileapp/views.py):
?
7
8
9
from emails import follower_notification
@app.route(/follow/nickname)
@login_required
def follow(nickname):
user = User.query.filter_by(nickname = nickname).first()
# ...
follower_notification(user, g.user)
return redirect(url_for(user, nickname = nickname))
现在你可以创建两个用户(如果还没有用户的话)尝试着用让一个用户follow另一个用户,理解邮件提醒是怎样工作的。
就是这样吗?我们做完了吗?
我们可能心底里很兴奋完成了这项工作并且把邮件提醒功能同未完成列表里删除。
但是,如果你现在测试下应用,你会发现当你单击follow链接的时候,页面会2到3秒才会响应,浏览器才会刷新,这在之前是没有的。
发生了什么?
问题是,Flask-Mail 使用同步模式发送电子邮件。 从电子邮件发送开始,直到电子邮件交付后,给浏览器发回其响应,在整个过程中,Web服务器会一直阻塞。如果我们试图发送电子邮件到一个服务器是缓慢的,甚至更糟糕的,暂时处于脱机状态,你能想象会发生什么吗?很不好。
这是一个可怕的限制,发送电子邮件应该是后台任务且不会干扰Web服务器,让我们看看我们如何能够解决这个问题。
Python中执行异步调用
我们想send_email 函数发完邮件后立即返回,需要让发邮件移动到后台进程来异步执行。
事实上python已经对异步任务提供了支持,但实际上,还可以用其他的方式,比如线程和多进程模块也可以实现异步任务。
每当我们需要发邮件的时候,启动一个线程来处理,比启动一个全新的进程节省资源。所以,让我们将mail.send(msg)调用放到另一个线程中。(fileapp/emails.py):
11
from threading import Thread
def send_async_email(msg):
mail.send(msg)
def send_email(subject, sender, recipients, text_body, html_body):
msg = Message(subject, sender = sender, recipients = recipients)
msg.body = text_body
msg.html = html_body
thr = threading.Thread(target = send_async_email, args = [msg])
thr.start()
如果你测试‘follow‘函数,现在你会发现浏览器在发送邮件之前会刷新。
所以,我们已经实现了异步发送,但是,如果未来在别的需要异步功能的地方难道我们还需要在实现一遍吗?
过程都是一样的,这样就会在每一种情况下都有重复代码,这样非常不好。
我们可以通过 decorator改进代码。使用装饰器的代码是这样的:
11
from decorators import async
@async
def send_async_email(msg):
mail.send(msg)
def send_email(subject, sender, recipients, text_body, html_body):
msg = Message(subject, sender = sender, recipients = recipients)
msg.body = text_body
msg.html = html_body
send_async_email(msg)
更好了,对不对?
实现这种方式的代码实际上很简单,创建一个新源文件(fileapp/decorators.py):
?
7
from threading import Thread
def async(f):
def wrapper(*args, **kwargs):
thr = Thread(target = f, args = args, kwargs = kwargs)
thr.start()
return wrapper
现在我们对异步任务创建了个有用的框架(framework), 我们可以说已经完成了!
仅仅作为一个练习,让我们思考一下为什么这个方法会看上去使用了进程而不是线程。我们并不想每当我们需要发送一封邮件时就有一个进程被启动,所以我们能够使用thePoolclass而不用themultiprocessingmole。这个类会创建指定数量的进程(这些都是主进程的子进程),并且这些子进程会通过theapply_asyncmethod送到进程池,等待接受任务去工作。这可能对于一个繁忙的网站会是一个有趣的途径,但是我们目前仍将维持现在线程的方式。

热点内容
编程课v 发布:2025-02-04 08:45:00 浏览:105
模拟器能有手机脚本么 发布:2025-02-04 08:39:50 浏览:757
android显示html图片 发布:2025-02-04 08:35:31 浏览:791
如何查学信网账号及密码 发布:2025-02-04 08:33:55 浏览:502
linux32位jdk 发布:2025-02-04 08:33:55 浏览:247
康佳服务器连接失败是怎么回事 发布:2025-02-04 08:18:51 浏览:916
编译编译有什么 发布:2025-02-04 08:05:52 浏览:735
让外网访问内网服务器 发布:2025-02-04 08:02:20 浏览:783
奶块脚本菜地 发布:2025-02-04 07:46:35 浏览:238
条形码识别源码 发布:2025-02-04 07:45:55 浏览:457