python邮件函数 python接收邮件

python如何发送紧急级别的邮件?

引用头文件

创新互联建站主要从事成都网站设计、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务市中,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

#!/usr/bin/env python

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

import smtplib

import os

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

from email.mime.base import MIMEBase

from email import encoders

创建“连接邮件服务器”函数

def smtp_connect( smtp_server, account, password, target ):

global smtp

global e_smtpserver

global e_account

global e_password

global e_target

global msg

e_smtpserver = smtp_server

e_account = account

e_password = password

e_target = target

try:

smtp = smtplib.SMTP()

smtp.connect(e_smtpserver)

smtp.login(e_account, e_password)

except Exception, e:

print 'Mail connect failed: %s' % e

exit( -1 )

msg = MIMEMultipart('related')

创建“写邮件内容”函数

def smtp_set_content( subject, main_body ):

global msg

msg['Subject'] = subject

body = MIMEText( main_body, 'plain', 'utf-8' )

msg.attach( body )

创建“添加附件”函数

def smtp_set_attachment( file_path ):

global msg

part = MIMEBase( 'application', 'octet-stream' )

part.set_payload( open(file_path,'rb').read() )

encoders.encode_base64(part)

part.add_header( 'Content-Disposition', 'attachment; filename=%s' % file_path.split('/')[-1] )

msg.attach(part)

创建“发送邮件”函数

def smtp_send():

global smtp

global e_smtpserver

global e_account

global e_password

global e_target

global msg

try:

smtp.sendmail( e_account, e_target, msg.as_string() )

except Exception, e:

print 'Mail send Failed: %s' % e

exit( -1 )

使用示例

if __name__ == '__main__':

smtp_connect( 'smtp.xxxx.com.cn', 'xxxx@xxxx.com.cn', 'password',

'xxxx@xxxx.com.cn' )

smtp_set_content( 'Test subject', 'Test_content' )

smtp_set_attachment( os.getcwd() + '/mail.py' )

smtp_send()

用Python发送邮件,可以群发,带有多个附件

''''' 

函数说明:Send_email_text() 函数实现发送带有附件的邮件,可以群发,附件格式包括:xlsx,pdf,txt,jpg,mp3等 

参数说明: 

1. subject:邮件主题 

2. content:邮件正文 

3. filepath:附件的地址, 输入格式为["","",...] 

4. receive_email:收件人地址, 输入格式为["","",...] 

'''  

def Send_email_text(subject,content,filepath,receive_email):  

import smtplib  

from email.mime.multipart import MIMEMultipart   

from email.mime.text import MIMEText   

from email.mime.application import MIMEApplication  

sender = "发送方邮箱"  

passwd = "填入发送方密码"  

receivers = receive_email   #收件人邮箱  

msgRoot = MIMEMultipart()   

msgRoot['Subject'] = subject  

msgRoot['From'] = sender  

if len(receivers)1:  

msgRoot['To'] = ','.join(receivers) #群发邮件  

else:  

msgRoot['To'] = receivers[0]  

part = MIMEText(content)   

msgRoot.attach(part)  

##添加附件部分  

for path in filepath:  

if ".jpg" in path:  

#jpg类型附件  

jpg_name = path.split("\\")[-1]  

part = MIMEApplication(open(path,'rb').read())   

part.add_header('Content-Disposition', 'attachment', filename=jpg_name)  

msgRoot.attach(part)  

if ".pdf" in path:  

#pdf类型附件  

pdf_name = path.split("\\")[-1]  

part = MIMEApplication(open(path,'rb').read())   

part.add_header('Content-Disposition', 'attachment', filename=pdf_name)   

msgRoot.attach(part)  

if ".xlsx" in path:  

#xlsx类型附件  

xlsx_name = path.split("\\")[-1]  

part = MIMEApplication(open(path,'rb').read())   

part.add_header('Content-Disposition', 'attachment', filename=xlsx_name)  

msgRoot.attach(part)  

if ".txt" in path:  

#txt类型附件  

txt_name = path.split("\\")[-1]  

part = MIMEApplication(open(path,'rb').read())  

part.add_header('Content-Disposition', 'attachment', filename=txt_name)  

msgRoot.attach(part)  

if ".mp3" in path:  

#mp3类型附件  

mp3_name = path.split("\\")[-1]  

part = MIMEApplication(open(path,'rb').read())   

part.add_header('Content-Disposition', 'attachment', filename=mp3_name)   

msgRoot.attach(part)  

try:  

s = smtplib.SMTP()  

s.connect("smtp.mail.aliyun.com") #这里我使用的是阿里云邮箱,也可以使用163邮箱:smtp.163.com  

s.login(sender, passwd)  

s.sendmail(sender, receivers, msgRoot.as_string())  

print ("邮件发送成功")  

except smtplib.SMTPException as e:  

print("Error, 发送失败")  

finally:  

s.quit()

python 怎么把excel写到邮件里

import xlrd

import os,time

#引入邮件相关库

import smtplib

from email.mime.text import MIMEText

from email.header import Header

import base64

#处理从excel中读取的float类型数据的类

#目前集成两种处理:(1)float到int型的转换(2)float到str型的转换,后续有需要可以增加方法以集成其他类型的转换

class judgeFloat:

def floatToInt(self,variable):

variable="%d"%variable

return variable

def floatToStr(self,variable):

variable=xlrd.xldate_as_tuple(variable,0)

variable=list(variable)

if variable[1]10:

variable[1]='0'+str(variable[1])

variable=str(variable[0])+str(variable[1])+str(variable[2])

return variable

#确定文档是否修改的函数:获取文档的修改时间与本地时间对比,不一致要求用户确认是否继续执行,一致则直接执行

def openFile(filename,address):

filetime=time.strftime("%Y/%m/%d",time.localtime(os.stat(address+filename).st_mtime))

local=time.strftime("%Y/%m/%d",time.localtime())

if filetime!=local:

single=input("文档今天还没有修改过,请确认是否继续?确认请输入1后点击回车,否则输入2点击回车。")

if single==1:

pass

elif single==2:

exit()

else:

print '您的输入有误!脚本即将结束。'

time.sleep(5)

exit()

else:

pass

#写邮件的函数

def mailWrite(filename,address):

header='htmlheadmeta http-equiv="Content-Type" content="text/html; charset=utf-8" //head'

th='body text="#000000"committed缺陷详情:table border="1" cellspacing="0" cellpadding="3" bordercolor="#000000" width="1800" align="left" tr bgcolor="#F79646" align="left" th标识/thth摘要/thth状态/thth优先级/thth严重性/thth标记/thth所有者/thth创建时间/thth修改时间/th/tr'

#打开文件

filepath=address+filename

book=xlrd.open_workbook(filepath)

sheet=book.sheet_by_index(0)

#获取行列的数目,并以此为范围遍历获取单元数据

nrows = sheet.nrows-1

ncols = sheet.ncols

body=''

cellData=1

for i in range(1,nrows+1):

td=''

for j in range(ncols):

#读取单元格数据,赋给cellData变量供写入HTML表格中

cellData=sheet.cell_value(i,j)

#调用浮点型转换方法解决读取的日期内容为浮点型数据的问题

if isinstance(cellData,float):

if j==0 and i0:

cellDataNew=judgeFloat()

cellData=cellDataNew.floatToInt(cellData)

else:

cellDataNew=judgeFloat()

cellData=cellDataNew.floatToStr(cellData)

else:

pass

tip='td'+cellData+'/td'

#并入tr标签

td=td+tip

tr='tr'+td+'/tr'

#为解决字符串拼接问题增设语句,tr从excel中读取出来是unicode编码,转换成UTF-8编码即可拼接

tr=tr.encode('utf-8')

#并入body标签

body=body+tr

tail='/table/body/html'

#将内容拼接成完整的HTML文档

mail=header+th+body+tail

return mail

#发送邮件

def mailSend(mail):

#设置发件人

sender = '***'

#设置接收人

receiver = '***@***.com'

#设置邮件主题

subject = '测试邮件,请忽略!'

#设置发件服务器,即smtp服务器

smtpserver = 'smtp.***.net'

#设置登陆名称

username = '***@***.net'

#设置登陆密码

password = '******'

#实例化写邮件到正文区,邮件正文区需要以HTML文档形式写入

msg = MIMEText(mail,'html','utf-8')

#输入主题

msg['Subject'] = subject

#调用邮件发送方法,需配合导入邮件相关模块

smtp = smtplib.SMTP()

#设置连接发件服务器

smtp.connect('smtp.***.net')

#输入用户名,密码,登陆服务器

smtp.login(username, password)

#发送邮件

smtp.sendmail(sender, receiver, msg.as_string())

#退出登陆并关闭与发件服务器的连接

smtp.quit()

#入口函数,配置文件地址和文件名

def main():

filename='Sheet1.xlsx'

address='d:/defectManage/'

openFile(filename,address)

mail=mailWrite(filename,address)

mailSend(mail)

#调用执行main函数

if __name__=="__main__":

main()

python实现Excel邮件合并

众所周知word/WPS中的邮件合并功能可以根据word模板从excel表格中读取数据,进而生成不同的文件

但Excel却没有这个功能,如果需要根据excel表格模板生成不同文件的话,手动填写就显得很麻烦

举例:需对1、2图片模板表格的2个sheet中所有'{姓名}'、'{案卷号}'修改为第3个图片表格的数据,按姓名保存为不同文件

使用程序读取数据excel表格,对固定模板excel表格指定内容进行替换,并生成文件,就是一个比较好的选择

实际使用中,模板excel表格中单个单元格内,可能有多个需要替换的内容,为便于使用,单独将字符串替换功能写为函数

xlrd模块,常用于读取xls和xlsx格式excel表格

xlwt模块,常用于写入xls格式excel表格

xlutils模块,可将xlrd.Book对象转为xlwt.Workbook对象,从而实现对已有excel表格的写入功能

方法1只能生成xls格式excel表格,如果需要生成xlsx格式,参考方式2

openpyxl模块,常用于读取、写入xlsx格式excel表格

pywin32模块可以直接调用Excel程序,试验使用该模块实现以上功能

既然试验了pywin32调用Excel程序实现邮件合并功能,为什么不直接在Excel中使用VBA呢?

python电子邮件系列(三)之POP接收邮件

由上篇文章我们已经得知邮件从发送到接收的过程:

发件人-MUA-MTA-若干MTA-MDA-MUA-收件人

本节接收邮件主要就是编写一个 MUA 客户端,从 MDA 将邮件取回本地。

收取邮件最常用的是 POP协议 ,目前版本是第三版,也称 POP3 。python内置了 poplib 模块,支持POP3协议。

回想上一节 SMTP ,我们对要发送的邮件内容进行了各种编码,包括添加MIME header,编码之后再进行发送。

因此,我们通过POP3协议接收的也不是原内容,而是经过一系列编码等处理的文本。

所以,要想把POP3收取的文本变为可阅读的邮件对象,就需要利用 email 模块对原始邮件进行解析。

所以,邮件收取的流程就是:

由上一篇 文章 最后总结部分可知。邮件由字符到发送到网络经历了如下的格式转化:

纯文本:

str-bytes-base64-str-bytes

二进制文件:

binary code-base64-str-bytes

我们解析邮件也是按这个思路,逆序解析出内容。

这里的 decode('utf-8') 先把字节流转化为字符串,再将字符串转化为 message 结构的对象。这步与发送邮件的 as_string 函数相反。

先从上一节结构化的 msg 中取出信件头,打印出来。

如果是 multipart 结构, get_payload 函数会返回一个包含不同part的list,然后对每一part递归调用 print_info ,打印子信件头和子信件内容。

不是 multipart 时,之后再依据 Content-Type 作不同处理:

如果是 text :

利用 get_payload(decode = Ture) 取出子信件的内容, decode 为True,则按照 Content-Transfer-Type 将 base64 或 QP 解码为 bytes 。

再 guess_charset 猜出编码方式,之后将其解码为字符显示。

如果不是 Text 对象,则为附件:

打印出附件的 Content-Type 。

python定义一函数,接受一表示email的字符串类型参数,返回一bool类型,表示该参数所示的email格式正确否

函数如下:

使用正则表达式对输入的字符串进行验证

import re

def validateEmail(email):

if len(email)  7:

if re.match("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$", email) != None:

return 1

return 0


分享名称:python邮件函数 python接收邮件
URL分享:http://scyanting.com/article/dodsodd.html