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

Python014

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

''''' 

函数说明: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发送email还是比较简单的,可以通过登录邮件服务来发送,linux下也可以使用调用sendmail命令来发送,还可以使用本地或者是远程的smtp服务来发送邮件,不管是单个,群发,还是抄送都比较容易实现。

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

1 登录邮件服务

[python] view plain copy

#!/usr/bin/env python

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

#python2.7x

#send_simple_email_by_account.py  @2014-07-30

#author: orangleliu

'''''

使用python写邮件 simple

使用126 的邮箱服务

'''

import smtplib

from email.mime.text import MIMEText

SMTPserver = 'smtp.126.com'

sender = '[email protected]'

password = "xxxx"

message = 'I send a message by Python. 你好'

msg = MIMEText(message)

msg['Subject'] = 'Test Email by Python'

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 'send email success'

2调用sendmail命令 (linux)

[python] view plain copy

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

#python2.7x

#send_email_by_.py

#author: orangleliu

#date: 2014-08-15

'''''

用的是sendmail命令的方式

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

'''

from email.mime.text import MIMEText

from subprocess import Popen, PIPE

def get_sh_res():

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

return str(p.communicate()[0])

def mail_send(sender, recevier):

print "get email info..."

msg = MIMEText(get_sh_res())

msg["From"] = sender

msg["To"] = recevier

msg["Subject"] = "Yestoday interface log results"

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

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

print 'mail sended ...'

if __name__ == "__main__":

s = "[email protected]"

r = "[email protected]"

mail_send(s, r)

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

[python] view plain copy

#!/usr/bin/env python

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

#python2.7x

#send_email_by_smtp.py

#author: orangleliu

#date: 2014-08-15

'''''

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

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

#ps -ef|grep sendmail

#telnet localhost 25

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

'''

import smtplib

from email.mime.text import MIMEText

from subprocess import Popen, PIPE

def get_sh_res():

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

return str(p.communicate()[0])

def mail_send(sender, recevier):

msg = MIMEText(get_sh_res())

msg["From"] = sender

msg["To"] = recevier

msg["Subject"] = "Yestoday interface log results"

s = smtplib.SMTP('localhost')

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

s.quit()

print 'send mail finished...'

if __name__ == "__main__":

s = "[email protected]"

r =  s

mail_send(s, r)

我懒得在你的代码里面找bug了

你看看我的吧,只是贴进百度空间的时候格式没有了,你稍微调整一下

http://hi.baidu.com/linuxbird/blog/item/a931ff60b74a224cebf8f8fc.html

可以明确的说Python的邮件模块没有问题,也不需要自己修改什么。

Python 邮件列表里面上次有人发了一个多线程的邮件群发脚本,也很不错。有兴趣可以搜索一下。