您的位置:首页 > 编程语言 > Python开发

python脚本实现发送邮件功能

2016-07-30 10:35 1141 查看
#!/usr/bin/env python
# coding=utf-8

import os

from email import encoders

from email.header import Header

from email.mime.base import MIMEBase

from email.mime.multipart import MIMEMultipart

from email.mime.message import MIMEMessage

from email.mime.text import MIMEText

from email.mime.image import MIMEImage

from email.utils import parseaddr, formataddr, formatdate

import smtplib

def _format_addr(s):

    name, addr = parseaddr(s)

    return formataddr(

        (Header(name, 'utf-8').encode(),

         addr.encode('utf-8') if isinstance(addr, unicode) else addr)

    )

def send_mail(smtp_server, from_addr, passwd, to_addr, subject, text='Hello, send by Python...', files=[]):

    ## --------------------------------------------------------------------------------------

    # assert type(to_addr) == list

    # assert type(files) == list

    assert isinstance(to_addr, list)

    assert isinstance(files, list)

    ## --------------------------------------------------------------------------------------

    '''plain or html'''

    msg = MIMEText(text, 'plain', 'utf-8')

    # msg = MIMEText('<html><body>'+'<h1>'+text+'</h1>'+'</body></html>', 'html', 'utf-8')

    ## --------------------------------------------------------------------------------------

    '''plain and html'''

    # msg = MIMEMultipart('alternative')

    # msg.attach(MIMEText(text, 'plain', 'utf-8'))

    # msg.attach(MIMEText('<html><body>'+'<h1>'+text+'</h1>'+'</body></html>', 'html', 'utf-8')) # 附件不嵌入正文

    # # msg.attach(MIMEText('<html><body>'+'<h1>'+text+'</h1>'+'<p><img src="cid:0"></p>'+'</body></html>', 'html', 'utf-8')) # 附件嵌入正文

    # for file in files:

    #     part = MIMEBase('application', 'octet-stream') # 'octet-stream': binary data

    #     part.set_payload(open(file, 'rb').read())

    #     encoders.encode_base64(part) # 用Base64编码

    #     part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file))

    #     part.add_header('Content-ID', '<0>')

    #     part.add_header('X-Attachment-Id', '0')

    #     msg.attach(part) # 添加到MIMEMultipart

    msg['From'] = _format_addr('Me <%s>' % from_addr)

    msg['To'] = _format_addr('You <%s>' % ','.join(to_addr))

    msg['Subject'] = Header(subject, 'utf-8').encode()

    msg['Date'] = formatdate(localtime=True)

    ## --------------------------------------------------------------------------------------

    ## 基于SSL安全连接,Gmail提供的SMTP服务必须要加密传输

    server = smtplib.SMTP(smtp_server, 25) # SMTP协议默认端口是25

    # server.starttls() # 创建安全连接,对于'smtp.gmail.com',端口587

    server.set_debuglevel(1) # 打印信息

    server.login(from_addr, passwd)

    server.sendmail(from_addr, to_addr, msg.as_string())

    server.quit()

if __name__ == '__main__':

    smtp_server = 'smtp.163.com'

    from_addr = '×××××@163.com'       #从该邮箱发出邮件

    passwd = '××××××'                     #该密码不是你用客户端登陆邮箱时所用的密码,而是设置开启smpt时设置的密码

    to_addr = ['××××××@qq.com']        #该邮箱为接收邮件的邮箱

    subject = 'Hello...'    #邮件主题名字

    #with open('names.txt','r') as fp:

    #    text=fp.read()                        #我这里是把一个名字为names.txt的文件内容读出来作为邮件内容

    text = "Hello, I'm dc,send by Python..."

    files = []
    send_mail(smtp_server, from_addr, passwd, to_addr, subject, text, files)

把以上程序中发送邮箱、密码、接受邮箱改为自己的(记住一定要进入自己邮箱开启smtp服务),改好后把程序复制到一个.py文件中直接执行python 文件名即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: