`
忧里修斯
  • 浏览: 437037 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

python发送邮件

阅读更多
# -*- coding:UTF-8 -*-
'''
Created on 2010-5-27

@author: 忧里修斯
'''
import smtplib
import email
import os
import traceback 
from email.message import Message
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.base import MIMEBase
from email import encoders
import mimetypes
from email.mime.audio import MIMEAudio

'''
     邮件收发管理
'''

#发送服务器信息
smtpserver='smtp.qq.com'  
smtpuser='***@qq.com'  
smtppass='***'  
smtpport='25'

def login():
    '''
        发件人登录到服务器
    '''
    server=smtplib.SMTP(smtpserver,smtpport)  
    server.ehlo()  
    server.login(smtpuser,smtppass)  
    return server

def sendTextEmail(toAdd,subject,content):
    '''
        功能:发送纯文本邮件
        参数说明:
        toAdd:收件人E-mail地址    类型:list
        subject:主题,类型:string
        content:邮件内容    类型:string
        fromAdd:发件人,默认为服务器用户
        返回值:True/False
    '''
    result = False
    server = login()
    msg = Message()
    msg['Mime-Version']='1.0'  
    msg['From']    = smtpuser  
    msg['To']      = toAdd  
    msg['Subject'] = subject  
    msg['Date']    = email.Utils.formatdate()          # curr datetime, rfc2822  
    msg.set_payload(content)  
    try:      
        server.sendmail(smtpuser,toAdd,str(msg))   # may also raise exc  
        result = True
    except Exception ,ex:  
        print Exception,ex  
        print 'Error - send failed'  
        
    return result


def sendEmail(toAdd,subject,html):
    '''
        发送html邮件
    '''
    result = False
    try:
        msgRoot = MIMEMultipart('ralated')
        msgRoot['Subject'] = subject  
        msgRoot['From'] = smtpuser  
        msgRoot['To'] = toAdd  
        msgRoot.preamble = 'This is a multi-part message in MIME format.' 
        msgAlternative = MIMEMultipart('alternative')  
        msgRoot.attach(msgAlternative)
        #设定HTML信息  
        msgText = MIMEText(html, 'html', 'utf-8')  
        msgAlternative.attach(msgText)
        #设定内置图片信息  
        fp = open('test.jpg', 'rb')  
        msgImage = MIMEImage(fp.read())  
        fp.close()  
        msgImage.add_header('Content-ID', '<image1>')  
        msgRoot.attach(msgImage)  
        #发送邮件  
        smtp = smtplib.SMTP()  
        smtp.connect(smtpserver)  
        smtp.login(smtpuser, smtppass)  
        smtp.sendmail(smtpuser, toAdd, msgRoot.as_string())  
        smtp.quit()  
        result = True
    except:
        result = False
        
    return result

def sendMultiMail(toAdd,subject,html):
    '''
    发送带附件的邮件
    '''
    result = False
    try:
        msgRoot = MIMEMultipart('ralated')
        msgRoot['Subject'] = subject  
        msgRoot['From'] = smtpuser  
        msgRoot['To'] = toAdd  
        msgRoot.preamble = 'This is a multi-part message in MIME format.' 
        msgAlternative = MIMEMultipart('alternative')  
        msgRoot.attach(msgAlternative)
        #设定HTML信息  
        msgText = MIMEText(html, 'html', 'utf-8')  
        msgAlternative.attach(msgText)
        #设定内置图片信息  
        fp = open(u'c:\\capmm.jpg', 'rb+')  
        msgImage = MIMEImage(fp.read())  
        fp.close()  
        msgImage.add_header('Content-ID', '<image1>')  
        msgRoot.attach(msgImage)  

        #构造附件
        filepath = u'C:\\constant.py'
        ctype, encoding = mimetypes.guess_type(filepath)
        if ctype is None or encoding is not None:
            ctype = 'application/octet-stream'
        maintype, subtype = ctype.split('/', 1)
        if maintype == 'text':
            fp = open(filepath)
            msg = MIMEText(fp.read(), _subtype=subtype)
            fp.close()
        elif maintype == 'image':
            fp = open(filepath, 'rb')
            msg = MIMEImage(fp.read(), _subtype=subtype)
            fp.close()
        elif maintype == 'audio':
            fp = open(filepath, 'rb')
            msg = MIMEAudio(fp.read(), _subtype=subtype)
            fp.close()
        else:
            fp = open(filepath, 'rb')
            msg = MIMEBase(maintype, subtype)
            msg.set_payload(fp.read())
            fp.close()
            encoders.encode_base64(msg)
        msg.replace_header('Content-type','Application/octet-stream;name=%s' % filepath) 
        msg.add_header('Content-Disposition', 'attachment',filename = filepath)
        msgRoot.attach(msg)

        #发送邮件  
        smtp = smtplib.SMTP()  
        smtp.connect(smtpserver)  
        print smtp.login(smtpuser, smtppass)  
        smtp.sendmail(smtpuser, toAdd, msgRoot.as_string())  
        smtp.quit()  
        result = True
    except:
        print traceback.format_exc() 
        result = False
    return result

if __name__ == '__main__':
    
#    print sendTextEmail('...@qq.com', '爱动注册通知', '本邮件有爱动系统自动发出,请勿回复,谢谢')
#    print sendEmail('...@qq.com', 'html爱动注册通知', '<font color=red><b>本邮件有爱动系统自动发出,请勿回复,谢谢</b><img src="cid:image1"></font>')
    print sendMultiMail('769435570@qq.com', 'html爱动注册通知', '<font color=red><b>本邮件有爱动系统自动发出,请勿回复,谢谢</b></font><img src="cid:image1">')
        


说明:如何在邮件中显示图片
1、为上传的图片设置名称
msgImage.add_header('Content-ID', '<image1>')
2、使用名称显示
<font color=red><b>本邮件有爱动系统自动发出,请勿回复,谢谢</b><img src="cid:image1"></font>
分享到:
评论
2 楼 tuoxie007 2010-09-12  
好像需要把
  mailServer.ehlo()
改为:
  mailServer.ehlo()
  mailServer.starttls()
  mailServer.ehlo()
1 楼 earl86 2010-07-07  
一直 报错。File "./pymail.py", line 98
    print sendEmail('wang.chao@goodhope.net', 'test', 'test')
        ^
IndentationError: expected an indented block

相关推荐

    Python发邮件代码

    Python发邮件代码

    Python发邮件源码

    这里我们关注的主题是“Python发邮件源码”,这通常涉及到使用SMTP(Simple Mail Transfer Protocol)来实现邮件的发送。下面我们将深入探讨这个话题,并提供一个实际的Python代码示例。 首先,你需要了解Python中...

    python发邮件详细实例

    详细展示了各种使用python发邮件的程序实例

    python发送邮件脚本

    python发送邮件代码,服务器配置请自行修改,脚本中的地址是内网搭建的邮件服务器。可以结合系统定时任务配置邮件定时发送。希望帮到你

    python 发送邮件简单示例

    简单的python发送邮件的示例,基于python2.7

    python发邮件程序

    python发邮件程序,发送方法:./mail.py 收件人 主题 html内容 图片文件 附件文件'

    python发送邮件的脚本

    半天时间写了个python发送邮件的脚本 作者: jeffery ( email:dungeonsnd@126.com, msn:dungeonsnd@hotmail.com, csdn blog:http://blog.csdn.net/dungeonsnd) 时间: 2011-06-19 地点: SH --------------------------...

    python_发送邮件.docx

    Python发送邮件是编程中常见的需求,特别是在自动化任务和通知系统中。本文档主要介绍了两种使用Python发送邮件的方法,涉及到了smtplib和email模块。 首先,smtplib是Python的标准库,它提供了一种与SMTP(简单...

    基于Python实现多进程的发送邮件.zip

    本课程设计的目标是利用Python实现多进程发送邮件的功能。 首先,我们需要了解Python中的`multiprocessing`模块,它是Python提供的一个标准库,用于实现多进程。通过创建子进程,每个进程可以独立地执行任务,互不...

    使用python通过qq邮箱代理发送邮件

    python发送邮件,通过qq邮箱代理,具体怎么设置请百度(获取qq邮箱授权码),可以发送邮件到邮箱,非常简洁的代码

    python3发送邮件

    使用python3发送QQ电子邮件,发送人为自己,接收人可以一个可以多个。

    python发送邮件(smtplib).docx

    在Python编程中,发送邮件是一项常见的任务,尤其在自动化测试或通知系统中。要实现这一功能,我们可以利用Python内置的`smtplib`和`email`模块。`smtplib`负责处理邮件的发送过程,而`email`则用于构建邮件内容。在...

    Python-Python实现自动发邮件支持HTML富文本

    在Python编程语言中,发送邮件是一项常见的任务,尤其在自动化脚本或系统通知中非常有用。Python通过内置的`smtplib`库提供了对简单邮件传输...解压后,通过阅读和理解代码,可以更好地掌握Python发送邮件的实践技巧。

    python发送邮件源码

    python发送邮件源码有注释

    python发邮件

    使用python发送邮件,使用的是smtplib库

    【Python发送邮件】源码,支持群发和添加附件.py

    这是python发送邮件的源码,支持群发和添加邮件, 文章中有免费下载地址,这里是土豪专用下载地址,

    使用Python发送邮件附件以定时备份MySQL的教程

    标题中的“使用Python发送邮件附件以定时备份MySQL的教程”是指使用Python编程语言编写脚本来自动备份MySQL数据库,并将备份文件作为邮件附件发送出去。这个过程通常涉及到几个关键步骤:数据库备份、文件处理以及...

    Python-python发送邮件报表

    subject = 'Python发送的报表' body = '这是使用Python自动发送的报表邮件。' msg = MIMEMultipart() msg['From'] = sender msg['To'] = receiver msg['Subject'] = subject ``` 若邮件内容包含纯文本和HTML两种...

    python发送邮件的脚本 v0.3

    python发送邮件的脚本 作者: jeffery ( email:dungeonsnd@126.com, msn:dungeonsnd@hotmail.com, csdn blog:http://blog.csdn.net/dungeonsnd) 时间: 2011-07-10 地点: GZ ----------------------------------------...

    Python实现SMTP发送邮件详细教程

    以下是一个基本的Python发送邮件的示例代码: ```python import smtplib from email.mime.text import MIMEText from email.utils import formataddr my_sender = '发件人邮箱账号' my_user = '收件人邮箱账号' ...

Global site tag (gtag.js) - Google Analytics