欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python发送邮件的实例代码(支持html、图片、附件)

程序员文章站 2023-09-08 12:21:15
第一段代码:复制代码 代码如下:#!/usr/bin/python# -*- coding: utf-8 -*- import emailimport mimetypes...

第一段代码:

复制代码 代码如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import email
import mimetypes
from email.mimemultipart import mimemultipart
from email.mimetext import mimetext
from email.mimeimage import mimeimage
import smtplib

def sendemail(authinfo, fromadd, toadd, subject, plaintext, htmltext):

        strfrom = fromadd
        strto = ', '.join(toadd)

        server = authinfo.get('server')
        user = authinfo.get('user')
        passwd = authinfo.get('password')

        if not (server and user and passwd) :
                print 'incomplete login info, exit now'
                return

        # 设定root信息
        msgroot = mimemultipart('related')
        msgroot['subject'] = subject
        msgroot['from'] = strfrom
        msgroot['to'] = strto
        msgroot.preamble = 'this is a multi-part message in mime format.'

        # encapsulate the plain and html versions of the message body in an
        # 'alternative' part, so message agents can decide which they want to display.
        msgalternative = mimemultipart('alternative')
        msgroot.attach(msgalternative)

        #设定纯文本信息
        msgtext = mimetext(plaintext, 'plain', 'utf-8')
        msgalternative.attach(msgtext)

        #设定html信息
        msgtext = mimetext(htmltext, '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.set_debuglevel(1)
        smtp.connect(server)
        smtp.login(user, passwd)
        smtp.sendmail(strfrom, strto, msgroot.as_string())
        smtp.quit()
        return

if __name__ == '__main__' :
        authinfo = {}
        authinfo['server'] = 'smtp.somehost.com'
        authinfo['user'] = 'username'
        authinfo['password'] = 'password'
        fromadd = 'username@somehost.com'
        toadd = ['someone@somehost.com', 'other@somehost.com']
        subject = '邮件主题'
        plaintext = '这里是普通文本'
        htmltext = '<b>html文本</b>'
        sendemail(authinfo, fromadd, toadd, subject, plaintext, htmltext)



文件形式的邮件

复制代码 代码如下:

#!/usr/bin/env python3  
#coding: utf-8  
import smtplib  
from email.mime.text import mimetext  
from email.header import header  

sender = '***'  
receiver = '***'  
subject = 'python email test'  
smtpserver = 'smtp.163.com'  
username = '***'  
password = '***'  

msg = mimetext('你好','text','utf-8')#中文需参数‘utf-8',单字节字符不需要  
msg['subject'] = header(subject, 'utf-8')  

smtp = smtplib.smtp()  
smtp.connect('smtp.163.com')  
smtp.login(username, password)  
smtp.sendmail(sender, receiver, msg.as_string())  
smtp.quit()  

html形式的邮件

复制代码 代码如下:

#!/usr/bin/env python3
#coding: utf-8
import smtplib
from email.mime.text import mimetext

sender = '***'
receiver = '***'
subject = 'python email test'
smtpserver = 'smtp.163.com'
username = '***'
password = '***'

msg = mimetext('<html><h1>你好</h1></html>','html','utf-8')

msg['subject'] = subject

smtp = smtplib.smtp()
smtp.connect('smtp.163.com')
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()

带图片的html邮件

复制代码 代码如下:

#!/usr/bin/env python3
#coding: utf-8
import smtplib
from email.mime.multipart import mimemultipart
from email.mime.text import mimetext
from email.mime.image import mimeimage

sender = '***'
receiver = '***'
subject = 'python email test'
smtpserver = 'smtp.163.com'
username = '***'
password = '***'

msgroot = mimemultipart('related')
msgroot['subject'] = 'test message'

msgtext = mimetext('<b>some <i>html</i> text</b> and an image.<br><img src="cid:image1"><br>good!','html','utf-8')
msgroot.attach(msgtext)

fp = open('h:\\python\\1.jpg', 'rb')
msgimage = mimeimage(fp.read())
fp.close()

msgimage.add_header('content-id', '<image1>')
msgroot.attach(msgimage)

smtp = smtplib.smtp()
smtp.connect('smtp.163.com')
smtp.login(username, password)
smtp.sendmail(sender, receiver, msgroot.as_string())
smtp.quit()

带附件的邮件

复制代码 代码如下:

#!/usr/bin/env python3
#coding: utf-8
import smtplib
from email.mime.multipart import mimemultipart
from email.mime.text import mimetext
from email.mime.image import mimeimage

sender = '***'
receiver = '***'
subject = 'python email test'
smtpserver = 'smtp.163.com'
username = '***'
password = '***'

msgroot = mimemultipart('related')
msgroot['subject'] = 'test message'

#构造附件
att = mimetext(open('h:\\python\\1.jpg', 'rb').read(), 'base64', 'utf-8')
att["content-type"] = 'application/octet-stream'
att["content-disposition"] = 'attachment; filename="1.jpg"'
msgroot.attach(att)

smtp = smtplib.smtp()
smtp.connect('smtp.163.com')
smtp.login(username, password)
smtp.sendmail(sender, receiver, msgroot.as_string())
smtp.quit()

群邮件

复制代码 代码如下:

#!/usr/bin/env python3
#coding: utf-8
import smtplib
from email.mime.text import mimetext

sender = '***'
receiver = ['***','****',……]
subject = 'python email test'
smtpserver = 'smtp.163.com'
username = '***'
password = '***'

msg = mimetext('你好','plain','utf-8')

msg['subject'] = subject

smtp = smtplib.smtp()
smtp.connect('smtp.163.com')
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()

各种元素都包含的邮件

复制代码 代码如下:

#!/usr/bin/env python3
#coding: utf-8
import smtplib
from email.mime.multipart import mimemultipart
from email.mime.text import mimetext
from email.mime.image import mimeimage

sender = '***'
receiver = '***'
subject = 'python email test'
smtpserver = 'smtp.163.com'
username = '***'
password = '***'

# create message container - the correct mime type is multipart/alternative.
msg = mimemultipart('alternative')
msg['subject'] = "link"

# create the body of the message (a plain-text and an html version).
text = "hi!\nhow are you?\nhere is the link you wanted:\nhttp://www.python.org"
html = """\
<html>
  <head></head>
  <body>
    <p>hi!<br>
       how are you?<br>
       here is the <a href="http://www.python.org">link</a> you wanted.
    </p>
  </body>
</html>
"""

# record the mime types of both parts - text/plain and text/html.
part1 = mimetext(text, 'plain')
part2 = mimetext(html, 'html')

# attach parts into message container.
# according to rfc 2046, the last part of a multipart message, in this case
# the html message, is best and preferred.
msg.attach(part1)
msg.attach(part2)
#构造附件
att = mimetext(open('h:\\python\\1.jpg', 'rb').read(), 'base64', 'utf-8')
att["content-type"] = 'application/octet-stream'
att["content-disposition"] = 'attachment; filename="1.jpg"'
msg.attach(att)

smtp = smtplib.smtp()
smtp.connect('smtp.163.com')
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()

基于ssl的邮件

复制代码 代码如下:

#!/usr/bin/env python3
#coding: utf-8
import smtplib
from email.mime.text import mimetext
from email.header import header
sender = '***'
receiver = '***'
subject = 'python email test'
smtpserver = 'smtp.163.com'
username = '***'
password = '***'

msg = mimetext('你好','plain','utf-8')#中文需参数‘utf-8',单字节字符不需要
msg['subject'] = header(subject, 'utf-8')

smtp = smtplib.smtp()
smtp.connect('smtp.163.com')
smtp.ehlo()
smtp.starttls()
smtp.ehlo()
smtp.set_debuglevel(1)
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()