当前位置:首页 » 编程语言 » python发送

python发送

发布时间: 2023-06-18 14:32:43

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的博客主页 》

② Python向多人发送、抄送带附件的邮件(含详细代码)

python要发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后使用smtplib.smtp发送。

步骤:

(1)设置服务器所需信息(ps:部门邮箱密码为授权码,需自行登录相应邮箱设置授权码)

(2)设置email信息

(3)附件部分

(4)登录邮箱并发送邮件

附上源码

③ 如何用python发送email

python发送email还是比较简单的,可以通过登录邮件服务来发送,linux下也可以使用调用sendmail命令来发送,还可以使用本地或者是远程的smtp服务来发送邮件,不管是单个,群发,还是抄送都比较容易实现。

先把几个最简单的发送邮件方式记录下,像html邮件,附件等也是支持的,需要时查文档即可

1 登录邮件服务

[python]view plain

  • #!/usr/bin/envpython

  • #-*-coding:utf-8-*-

  • #python2.7x

  • #send_simple_email_by_account.py@2014-07-30

  • #author:orangleliu

  • '''''

  • 使用python写邮件simple

  • 使用126的邮箱服务

  • '''

  • importsmtplib

  • fromemail.mime.textimportMIMEText

  • SMTPserver='smtp.126.com'

  • sender='[email protected]'

  • password="xxxx"

  • message='IsendamessagebyPython.你好'

  • msg=MIMEText(message)

  • msg['Subject']='TestEmailbyPython'

  • msg['From']=sender

  • msg['To']=destination

  • mailserver=smtplib.SMTP(SMTPserver,25)

  • mailserver.login(sender,password)

  • mailserver.sendmail(sender,[sender],msg.as_string())

  • mailserver.quit()

  • print'sendemailsuccess'

  • 2调用sendmail命令 (linux)

    [python]view plain

  • #-*-coding:utf-8-*-

  • #python2.7x

  • #send_email_by_.py

  • #author:orangleliu

  • #date:2014-08-15

  • '''''

  • 用的是sendmail命令的方式

  • 这个时候邮件还不定可以发出来,hostname配置可能需要更改

  • '''

  • fromemail.mime.textimportMIMEText

  • fromsubprocessimportPopen,PIPE

  • defget_sh_res():

  • p=Popen(['/Application/2.0/nirvana/logs/log.sh'],stdout=PIPE)

  • returnstr(p.communicate()[0])

  • defmail_send(sender,recevier):

  • print"getemailinfo..."

  • msg=MIMEText(get_sh_res())

  • msg["From"]=sender

  • msg["To"]=recevier

  • msg["Subject"]="Yestodayinterfacelogresults"

  • p=Popen(["/usr/sbin/sendmail","-t"],stdin=PIPE)

  • res=p.communicate(msg.as_string())

  • print'mailsended...'

  • if__name__=="__main__":

  • s="[email protected]"

  • r="[email protected]"

  • mail_send(s,r)

  • 3 使用smtp服务来发送(本地或者是远程服务器)

    [python]view plain

  • #!/usr/bin/envpython

  • #-*-coding:utf-8-*-

  • #python2.7x

  • #send_email_by_smtp.py

  • #author:orangleliu

  • #date:2014-08-15

  • '''''

  • linux下使用本地的smtp服务来发送邮件

  • 前提要开启smtp服务,检查的方法

  • #ps-ef|grepsendmail

  • #telnetlocalhost25

  • 这个时候邮件还不定可以发出来,hostname配置可能需要更改

  • '''

  • importsmtplib

  • fromemail.mime.textimportMIMEText

  • fromsubprocessimportPopen,PIPE

  • defget_sh_res():

  • p=Popen(['/Application/2.0/nirvana/logs/log.sh'],stdout=PIPE)

  • returnstr(p.communicate()[0])

  • defmail_send(sender,recevier):

  • msg=MIMEText(get_sh_res())

  • msg["From"]=sender

  • msg["To"]=recevier

  • msg["Subject"]="Yestodayinterfacelogresults"

  • s=smtplib.SMTP('localhost')

  • s.sendmail(sender,[recevier],msg.as_string())

  • s.quit()

  • print'sendmailfinished...'

  • if__name__=="__main__":

  • s="[email protected]"

  • r=s

  • mail_send(s,r)



④ python 发送短信

在电脑上用python给手机发短信我刚才试了,查了查资料,没有想象中的那么复杂:
1、在https://github.com/whtsky/PyWapFetion下载PyWapFetion文件
2、将PyWapFetion文件夹一起复制到自己的python,我用的是2.6版本,目录C:\Python26\Lib\site-packages下
3、参照实例example.py写上几句,例如给自己发短息:
#!/usr/bin/python2.6
#
-*-
coding:
utf-8
-*-
from
__future__
import
with_statement
from
PyWapFetion
import
Fetion,
send2self,
send
send2self('自己手机号','飞信注册密码',"提示您")
4、一会儿就收到短信”提示您“了。

⑤ Python给指定微信好友自动发送信息和图片

import os
import win32gui #pywin32-221.win-amd64-py3.7.exe
import win32con
from ctypes import *
import win32clipboard as w
import time
from PIL import Image #pip install pillow

import win32api

def setText(info):
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_UNICODETEXT, info)
w.CloseClipboard()

def setImage(imgpath):
im = Image.open(imgpath)
im.save('1.bmp')
aString = windll.user32.LoadImageW(0, r"1.bmp", win32con.IMAGE_BITMAP, 0, 0, win32con.LR_LOADFROMFILE)

def m_click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

def pasteInfo():
win32api.keybd_event(17,0,0,0) #ctrl键位码是17
win32api.keybd_event(86,0,0,0) #v键位码是86
win32api.keybd_event(86,0,win32con.KEYEVENTF_KEYUP,0) #释放按键
win32api.keybd_event(17,0,win32con.KEYEVENTF_KEYUP,0)

def searchByUser(uname):
hwnd = win32gui.FindWindow('WeChatMainWndForPC', '微信')
setText(uname)
m_click(100,40)
time.sleep(0.5)
m_click(100,40)
pasteInfo()
time.sleep(1)
m_click(100,120)#搜索到之后点击
#win32api.keybd_event(13,0,0,0)#回车
#win32api.keybd_event(13,0,KEYEVENTF_KEYUP,0)
#win32gui.SendMessage(hwnd, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
#win32gui.SendMessage(hwnd, win32con.WM_KEYUP, win32con.VK_RETURN, 0)

def sendInfo():
time.sleep(1)
pasteInfo()
time.sleep(1)
win32api.keybd_event(18, 0, 0, 0) #Alt
win32api.keybd_event(83,0,0,0) #s
win32api.keybd_event(83,0,win32con.KEYEVENTF_KEYUP,0) #释放按键
win32api.keybd_event(18,0,win32con.KEYEVENTF_KEYUP,0)

def closeByUser(uname):
hwnd = win32gui.FindWindow('WeChatMainWndForPC', '微信')
win32api.keybd_event(18,0,0,0) #Alt
win32api.keybd_event(115,0,0,0) #F4
win32api.keybd_event(115,0,KEYEVENTF_KEYUP,0)
win32api.keybd_event(18,0,KEYEVENTF_KEYUP,0)

'''
searchByUser('Tony老师')
setText('Tony老师理发师')
sendInfo()
time.sleep(1)
searchByUser('文件传输助手')
setText('地表最强CPU')
sendInfo()
'''

def getNosuffixImgName(imgname):
return os.path.splitext(imgname)[0]

imgdir='imgs/'
imgs=os.listdir(imgdir)
for img in imgs:
searchByUser(getNosuffixImgName(img))
setImage(imgdir+img)
sendInfo()
time.sleep(1)
http://www.manongjc.com/detail/22-xfnkrxxytyxkisz.html

⑥ python,如何发送带附件的邮件

可以通过以下代码实现:

importsmtplib
fromemail.mime.textimportMIMEText
importemail.mime.multipart
fromemail.
fromemail.MIMEBaseimportMIMEBase
fromemailimportEncoders

defsend_mail():
mailto_list=['xxxx','xxx']#收件人
mail_host="xxxxx"#设置服务器
mail_user="xxxx"#用户名
mail_pass="xxxxxx"#口令
mail_postfix="xxxx.xxx"#发件箱的后缀
me="hello"+"<"+mail_user+"@"+mail_postfix+">"#这里的hello可以任意设置,收到信后,将按照设置显示
content='Thisistestmail!'#邮件正文
msg=MIMEMultipart()
body=MIMEText(content,_subtype='html',_charset='gb2312')#创建一个实例,这里设置为html格式邮件
msg.attach(body)
msg['Subject']="SubjectTest"#设置主题
msg['From']=me
msg['To']=";".join(mailto_list)
#附件内容,若有多个附件,就添加多个part,如part1,part2,part3
part=MIMEBase('application','octet-stream')
#读入文件内容并格式化,此处文件为当前目录下,也可指定目录例如:open(r'/tmp/123.txt','rb')
part.set_payload(open('test.txt','rb').read())
Encoders.encode_base64(part)
##设置附件头
part.add_header('Content-Disposition','attachment;filename="test.txt"')
msg.attach(part)

try:
s=smtplib.SMTP()
s.connect(mail_host)#连接smtp服务器
s.login(mail_user,mail_pass)#登陆服务器
s.sendmail(me,mailto_list,msg.as_string())#发送邮件
s.close()
print'sendmailsucess'
returnTrue
exceptException,e:
printstr(e)
returnFalse

⑦ python通过get,post方式发送http请求和接收http响应


本文实例讲述了python通过get,post方式发送http请求和接收http响应的方法。姿敏分享给轮敏大家供大家参考。
具体如下:
测试用CGI,名字为test.py,放在apache的cgi-bin目录下:
#!/usr/bin/python
import cgi
def main():
print Content-type: text/htmln
form = cgi.FieldStorage()
if form.has_key(ServiceCode) and form[ServiceCode].value != :
print h1 Hello,form[ServiceCode].value,/h1
else:
print h1 Error! Please enter first name./h1
main()
python发送post和get请求
get请求:
使用get方式时,请求数据直接放在url中。
方法一、
?
7
8
import urllib
import urllib2
url =
req = urllib2.Request(url)
print req
res_data = urllib2.urlopen(req)
res = res_data.read()
print res
方法二、
?
7
import httplib
url =
conn = httplib.HTTPConnection(192.168.81.16)
conn.request(method=GET,url=url)
response = conn.getresponse()
res= response.read()
print res
post请求:腊册枝
使用post方式时,数据放在data或者body中,不能放在url中,放在url中将被忽略。
方法一、
import urllib
import urllib2
test_data = {ServiceCode:aaaa,b:bbbbb}
test_data_urlencode = urllib.urlencode(test_data)
requrl =
req = urllib2.Request(url = requrl,data =test_data_urlencode)
print req
res_data = urllib2.urlopen(req)
res = res_data.read()
print res
方法二、
11
import urllib
import httplib
test_data = {ServiceCode:aaaa,b:bbbbb}
test_data_urlencode = urllib.urlencode(test_data)
requrl =
headerdata = {Host:192.168.81.16}
conn = httplib.HTTPConnection(192.168.81.16)
conn.request(method=POST,url=requrl,body=test_data_urlencode,headers = headerdata)
response = conn.getresponse()
res= response.read()
print res
对python中json的使用不清楚,所以临时使用了urllib.urlencode(test_data)方法;
模块urllib,urllib2,httplib的区别
httplib实现了http和https的客户端协议,但是在python中,模块urllib和urllib2对httplib进行了更上层的封装。
介绍下例子中用到的函数:
1、HTTPConnection函数
httplib.HTTPConnection(host[,port[,stict[,timeout]]])
这个是构造函数,表示一次与服务器之间的交互,即请求/响应
host 标识服务器主机(服务器IP或域名)
port 默认值是80
strict 模式是False,表示无法解析服务器返回的状态行时,是否抛出BadStatusLine异常
例如:
conn = httplib.HTTPConnection(192.168.81.16,80) 与服务器建立链接。
2、HTTPConnection.request(method,url[,body[,header]])函数
这个是向服务器发送请求
method 请求的方式,一般是post或者get,
例如:
method=POST或method=Get
url 请求的资源,请求的资源(页面或者CGI,我们这里是CGI)
例如:
url=
或者
url=
body 需要提交到服务器的数据,可以用json,也可以用上面的格式,json需要调用json模块
headers 请求的http头headerdata = {Host:192.168.81.16}
例如:
?
test_data = {ServiceCode:aaaa,b:bbbbb}
test_data_urlencode = urllib.urlencode(test_data)
requrl =
headerdata = {Host:192.168.81.16}
conn = httplib.HTTPConnection(192.168.81.16,80)
conn.request(method=POST,url=requrl,body=test_data_urlencode,headers = headerdata)
conn在使用完毕后,应该关闭,conn.close()
3、HTTPConnection.getresponse()函数
这个是获取http响应,返回的对象是HTTPResponse的实例。
4、HTTPResponse介绍:
HTTPResponse的属性如下:
read([amt]) 获取响应消息体,amt表示从响应流中读取指定字节的数据,没有指定时,将全部数据读出;
getheader(name[,default]) 获得响应的header,name是表示头域名,在没有头域名的时候,default用来指定返回值
getheaders() 以列表的形式获得header
例如:
?
1
2
3
4
5
date=response.getheader(date);
print date
resheader=
resheader=response.getheaders();
print resheader
列形式的响应头部信息:
?
1
2
3
[(content-length, 295), (accept-ranges, bytes), (server, Apache), (last-modified, Sat, 31 Mar 2012 10:07:02 GMT), (connection, close), (etag, e8744-127-4bc871e4fdd80), (date, Mon, 03 Sep 2012 10:01:47 GMT), (content-type, text/html)]
date=response.getheader(date);
print date
取出响应头部的date的值。
希望本文所述对大家的Python程序设计有所帮助。

热点内容
安卓手机如何打开7x文件 发布:2025-02-12 09:43:02 浏览:485
c语言等号 发布:2025-02-12 09:39:02 浏览:169
ug编程培训要多少钱 发布:2025-02-12 09:38:27 浏览:620
小黄车的密码怎么打开 发布:2025-02-12 09:38:26 浏览:70
存储时4k 发布:2025-02-12 09:33:31 浏览:87
stn数据库 发布:2025-02-12 09:32:31 浏览:602
iossocket编程 发布:2025-02-12 09:32:20 浏览:899
sql语句相等 发布:2025-02-12 09:32:19 浏览:351
278源码 发布:2025-02-12 09:22:40 浏览:248
13人牛牛源码 发布:2025-02-12 09:22:40 浏览:155