zoukankan      html  css  js  c++  java
  • python发送邮件

    Python SMTP发送邮件
    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
    python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。
    Python创建 SMTP 对象语法如下:

    import smtplib
    smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
    

    参数说明:
    host: SMTP 服务器主机。 你可以指定主机的ip地址或者域名如: runoob.com,这个是可选参数。
    port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下 SMTP 端口号为25。
    local_hostname: 如果 SMTP 在你的本机上,你只需要指定服务器地址为 localhost 即可。
    Python SMTP 对象使用 sendmail 方法发送邮件,语法如下:

    SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
    

    参数说明:
    from_addr: 邮件发送者地址。
    to_addrs: 字符串列表,邮件发送地址。
    msg: 发送消息
    这里要注意一下第三个参数,msg 是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意 msg 的格式。这个格式就是 smtp 协议中定义的格式。
    实例
    1、以下是一个使用 Python 发送邮件简单的实例:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    sender = "huang@miyi.com"
    pwd='mima'
    receivers = ['11299999999433@qq.com']   #接收邮件
    
    # 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
    message = MIMEText("测试文本内容",'plain','utf-8')
    message['From']=Header("标题1",'utf-8')   # 发送者
    message['TO'] = Header("标题2",'utf-8')   # 接收者
    
    subject = "测试标题"
    message['Subject'] = Header(subject,'utf-8')
    
    try:
        smtObj = smtplib.SMTP_SSL('smtp.exmail.qq.com',465)   #发件箱的服务器
        smtObj.login(sender,pwd)
        smtObj.sendmail(sender,receivers,message.as_string())
        print("邮件发送成功")
    except smtplib.SMTPException:
        print("error:无法发送邮件")
    
    

    2、带HTML的邮件

    #coding:utf-8
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    sender = "huang@mayjii.com"
    pwd='123'
    receivers = ['199988886@qq.com']   #接收邮件
    
    mail_msg = """
    <p>Python 邮件发送测试...</p>
    <p><a href="http://www.baidu.com">这是一个链接</a></p>
    """
    # 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
    message = MIMEText(mail_msg,'html','utf-8')
    message['From']=Header("标题1",'utf-8')   # 发送者
    message['TO'] = Header("标题2",'utf-8')   # 接收者
    
    subject = "测试标题"
    message['Subject'] = Header(subject,'utf-8')
    
    try:
        smtObj = smtplib.SMTP_SSL('smtp.exmail.qq.com',465)   #发件箱的服务器
        smtObj.login(sender,pwd)
        smtObj.sendmail(sender,receivers,message.as_string())
        print("邮件发送成功")
    except smtplib.SMTPException:
        print("error:无法发送邮件")
    
    

    3、带附件的邮件

    # !/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.header import Header
    
    sender = "huang@mamimi.com"
    pwd='123'
    receivers = ['888989386@qq.com']   #接收邮件
    
    # 创建一个带附件的实例
    message = MIMEMultipart()
    message['From'] = Header("测试邮件", 'utf-8')
    message['To'] = Header("测试", 'utf-8')
    subject = 'Python SMTP 邮件测试'
    message['Subject'] = Header(subject, 'utf-8')
    
    # 邮件正文内容
    message.attach(MIMEText('邮件发送测试……', 'plain', 'utf-8'))
    
    # 构造附件1,传送当前目录下的 test1.txt 文件
    att1 = MIMEText(open('test1.txt', 'rb').read(), 'base64', 'utf-8')
    att1["Content-Type"] = 'application/octet-stream'
    # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
    att1["Content-Disposition"] = 'attachment; filename="test1.txt"'
    message.attach(att1)
    
    # 构造附件2,传送当前目录下的 test2.txt 文件
    att2 = MIMEText(open('test2.txt', 'rb').read(), 'base64', 'utf-8')
    att2["Content-Type"] = 'application/octet-stream'
    att2["Content-Disposition"] = 'attachment; filename="test2.txt"'
    message.attach(att2)
    
    try:
        smtObj = smtplib.SMTP_SSL('smtp.exmail.qq.com', 465)  # 发件箱的服务器
        smtObj.login(sender, pwd)
        smtObj.sendmail(sender, receivers, message.as_string())
        print("邮件发送成功")
    except smtplib.SMTPException:
        print("Error: 无法发送邮件")
    
    

    4、带图片的邮件

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    import smtplib
    from email.mime.image import MIMEImage
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.header import Header
    
    sender = "huang@mini.com"
    pwd='mimi'
    receivers = ['1188888888386@qq.com']   #接收邮件
    
    msgRoot = MIMEMultipart('related')
    msgRoot['From'] = Header("邮件测试", 'utf-8')
    msgRoot['To'] = Header("测试", 'utf-8')
    subject = 'Python SMTP 邮件测试'
    msgRoot['Subject'] = Header(subject, 'utf-8')
    
    msgAlternative = MIMEMultipart('alternative')
    msgRoot.attach(msgAlternative)
    
    mail_msg = """
    <p>Python 邮件发送测试...</p>
    <p><a href="http://www.baidu.com">百度链接</a></p>
    <p>图片演示:</p>
    <p><img src="cid:image1"></p>
    """
    msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))
    
    # 指定图片为当前目录
    fp = open(r'C:Usersds.jpg', 'rb')
    msgImage = MIMEImage(fp.read())
    fp.close()
    
    # 定义图片 ID,在 HTML 文本中引用
    msgImage.add_header('Content-ID', '<image1>')
    msgRoot.attach(msgImage)
    
    try:
        smtObj = smtplib.SMTP_SSL('smtp.exmail.qq.com', 465)  # 发件箱的服务器
        smtObj.login(sender, pwd)
        smtObj.sendmail(sender, receivers,  msgRoot.as_string())
        print("邮件发送成功")
    except smtplib.SMTPException:
        print("Error: 无法发送邮件")
    
    
  • 相关阅读:
    Jenkins结合.net平台综合应用之通过SSH方式拉取代码
    Jenkins结合.net平台综合之监听git仓库并自动摘取最新代码编译
    XCode插件因为升级不能用了怎么办?几个步骤教你搞定
    如何写一个FMDB帮助类?看看runtime吧
    ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(五) 补充:历史记录 和 消息提醒
    【转】iOS的APP资源,开源的哦
    活到老学到老:iOS开发中的基础知识(一)
    融云SDK:获取用户Token的方法
    对接融云即时通讯组件SDK,轻松实现App聊天室
    【iOS】那些年,遇到的小坑
  • 原文地址:https://www.cnblogs.com/hl-2030/p/11866345.html
Copyright © 2011-2022 走看看