精华内容
下载资源
问答
  • python邮件发送HTML表格

    2020-10-09 15:19:04
    /usr/bin/env python3 #coding=utf-8 from HTMLTable import HTMLTable from email.mime.text import MIMEText from email.utils import formatdate, make_msgid from smtplib import SMTP, SMTP_SSL from email....

    很多时候需要把表格发送到邮件,HTML格式的则比较好用。
    安装html-table包

    pip install html-table
    

    使用HTMLTable编辑表格,包括单元格合并,表格样式,单元格样式,表头样式,遍历表格数值,单元格背景色填充,整行背景色填充等等。

    #!/usr/bin/env python3
    #coding=utf-8
    from HTMLTable import HTMLTable
    from email.mime.text import MIMEText
    from email.utils import formatdate, make_msgid
    from smtplib import SMTP, SMTP_SSL
    from email.mime.multipart import MIMEMultipart
    
    #标题
    table = HTMLTable(caption="appale")
    #表头,表头分为两行,有些单元格需要合并,被合并的单元格需要留空占位
    table.append_header_rows((
      ('地区',  '房价',  '环比',       ''),
      ('',    '',       '增长量',   '增长率'),
    ))
    
    # 合并单元格
    table[0][0].attr.rowspan = 2
    table[0][1].attr.rowspan = 2
    table[0][2].attr.colspan = 2
    
    # 数据行
    table.append_data_rows((
      ('深圳', 11, 1, '10%'),
      ('东莞', 4, -1, '-20%'),
      ('惠州',3, 1, '20%'),
    ))
    
    # 标题样式
    table.caption.set_style({
      'font-size': '100px',
    })
    
    # 表格样式,即<table>标签样式
    table.set_style({
      'border-collapse': 'collapse',
      'word-break': 'keep-all',
      'white-space': 'nowrap',
      'font-size': '14px',
      'width': '100%',
      'height': '200px'
    })
    
    # 统一设置所有单元格样式,<td>或<th>
    table.set_cell_style({
      'border-color': '#000',
      'border-width': '1px',
      'border-style': 'solid',
      'padding': '5px',
    })
    
    # 表头样式
    table.set_header_row_style({
      'color': '#fff',
      'background-color': '#48a6fb',
      'font-size': '18px',
    })
     
    # 覆盖表头单元格字体样式
    table.set_header_cell_style({
      'padding': '15px',
    })
    
    # 调小次表头字体大小
    table[1].set_cell_style({
      'padding': '8px',
      'font-size': '15px',
    })
    
    # 遍历数据行,如果增长量为负,单元格背景颜色标红
    for row in table.iter_data_rows():
      if row[2].value < 0:
        row[2].set_style({
          'background-color': '#DC143C',
        })
    
    # 遍历数据行,如果增长量为负,整行背景颜色标绿
    for row in table.iter_data_rows():
      if row[1].value > 10:
        row.set_style({
          'background-color': '	#00FF00',
        })
    
    html_table = table.to_html()
    print(html_table)
    
    
    context = MIMEText( html_table, _subtype='html', _charset='utf-8')
    msg = MIMEMultipart()
    
    mail_to_list = ["noah@qq.com"]
    
    msg['To'] = ",".join(mail_to_list)
    msg['From'] = 'noah@qq.com'
    msg['Subject'] = '日报'
    msg['Date'] = formatdate(localtime=1)
    msg['Message-ID'] = make_msgid()
    
    msg.attach(context)
    
    smtp_server = 'smtp.qq.com'
    smtp = SMTP(smtp_server)
    smtp.login('noah@qq.com', '123456')
    smtp.sendmail(msg['From'], mail_to_list, msg.as_string())
    smtp.quit()
    
    展开全文
  • python邮件发送

    2020-02-12 14:22:27
    SMTP是发送邮件的协议,python内置对SMTP的支持,可以发送纯文本邮件HTML邮件,还有带附件的邮件 python对SMTP的支持:email模块–负责构造邮件 smtplib模块–负责发送邮件。 2.关于授权码 不管是使用QQ邮箱,网易...

    1.相关知识

    SMTP是发送邮件的协议,python内置对SMTP的支持,可以发送纯文本邮件,HTML邮件,还有带附件的邮件
    python对SMTP的支持:email模块–负责构造邮件 smtplib模块–负责发送邮件。

    2.关于授权码

    不管是使用QQ邮箱,网易邮箱,还是新浪邮箱,要利用他们的SMTP服务器来发送邮件,POP3服务器来接受邮件,都需要授权码,为了防止你的客户端密码泄露而造成邮箱隐患,而使用只有你自己知道的授权码来登陆第三方客户端,比如smtplib模块就属于第三方客户端。而授权码即使在服务器端也是加密的,所以无法修改授权码,只能重置授权码。

    邮箱的pop/smtp服务器默认是关闭的,需要手动开启,进行短信验证。

    3.邮箱开启POP/SMTP服务

    QQ邮箱开启pop/smtp服务:

    • 点击设置
    • 点击账户
    • 鼠标下滑,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
    • 开启POP3/SMTP服务,然后需要发送短信,记下自己的授权码,在第三方登录时需要用到

    新浪邮箱开启pop/smtp服务:

    • 点击设置
    • 点击左侧客户端pop/imap/smtp
    • 找到右侧客户端授权码,点击开启,然后发送短信,获取授权码。

    网易邮箱开启pop/smtp服务:

    • 点击设置
    • 点击左侧POP3/SMTP/IMAP
    • 右侧开启POP3/SMTP服务
    • 需要发送短信,再设置授权码。

    4.服务器地址及帮助

    服务器地址及协议端口:
    新浪邮箱帮助:http://help.sina.com.cn/comquestiondetail/view/160/

    # ################选择新浪邮箱###############
    # 新浪@sina.com邮箱                                        新浪@sina.cn邮箱
    # 接受服务器地址:pop.sina.com or pop3.sina.com             pop.sina.cn or pop3.sina.cn
    # 发送服务器地址:smtp.sina.com                             smtp.sina.cn
    # ###########端口号设置###################
    # POP 协议            pop端口:110      smtp 端口:25
    # IMAP 协议           IMAP 端口:143    smtp 端口:25
    # ############加密设置####################
    # pop: 995         imap: 993
    # smtp: 587 or 465
    

    网易邮箱的帮助:https://help.mail.163.com/faq.do?m=list&categoryID=76
    QQ邮箱的帮助:https://service.mail.qq.com/cgi-bin/help?subtype=1&&no=430&&id=48

    除了改个域名,基本上一样。

    5开始发送邮件-纯文本

    5.1邮件发送

    # 发送纯文本邮件
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.header import Header
    from smtplib import SMTP_SSL
    
    server = 'smtp.qq.com'			# 使用的QQ邮箱的SMTP服务器
    sender = 'xxx@qq.com'			# 你的QQ邮箱账号
    pwd = 'xxxxxxxxxxxxxxxx'		# 你的16位授权码
    
    sender_mail = 'xxx@qq.com'		# 发送方的邮箱
    receiver = 'xxx@sina.com'		# 接收方的邮箱
    
    mail_title = 'xxx@qq.com'				# 邮件标题
    mail_content = '用QQ邮箱发的!'			# 邮件内容
    
    # 构造邮件
    msg = MIMEMultipart()
    msg['Subject'] = Header(mail_title, 'utf-8')		# 构造邮件标题
    msg['From'] = sender_mail							# 构造邮件发送方
    msg['To'] = Header('test', 'utf-8')					# 构造邮件接受方
    msg.attach(MIMEText(mail_content, 'plain', 'utf-8'))		# 构造邮件内容
    
    # 发送邮件
    smtp = SMTP_SSL(server)     # 加密发送
    smtp.set_debuglevel(1)		# 打印smtplib库和smtp服务器的交互过程
    smtp.login(sender_mail, pwd)	# 通过smtplib登录smtp服务器
    somebody = smtp.sendmail(sender_mail, [receiver], msg.as_string())		# 发送邮件
    smtp.quit()			# 退出服务器
    

    交互过程:

    send: 'ehlo [192.168.48.1]\r\n'
    reply: b'250-newxmesmtplogicsvrsza2.qq.com\r\n'
    reply: b'250-PIPELINING\r\n'
    reply: b'250-SIZE 73400320\r\n'
    reply: b'250-AUTH LOGIN PLAIN\r\n'
    reply: b'250-AUTH=LOGIN\r\n'
    reply: b'250-MAILCOMPRESS\r\n'
    reply: b'250 8BITMIME\r\n'
    reply: retcode (250); Msg: b'newxmesmtplogicsvrsza2.qq.com\nPIPELINING\nSIZE 73400320\nAUTH LOGIN PLAIN\nAUTH=LOGIN\nMAILCOMPRESS\n8BITMIME'
    send: 'AUTH PLAIN ADEzMTUzOTU2MjFAcXEuY29tAHF5dGZyc29nY2R2eWphZ2c=\r\n'
    reply: b'235 Authentication successful\r\n'
    reply: retcode (235); Msg: b'Authentication successful'
    send: 'mail FROM:<xxx@qq.com> size=402\r\n'
    reply: b'250 OK.\r\n'
    reply: retcode (250); Msg: b'OK.'
    send: 'rcpt TO:<xxx@sina.com>\r\n'
    reply: b'250 OK\r\n'
    reply: retcode (250); Msg: b'OK'
    send: 'data\r\n'
    reply: b'354 End data with <CR><LF>.<CR><LF>.\r\n'
    reply: retcode (354); Msg: b'End data with <CR><LF>.<CR><LF>.'
    data: (354, b'End data with <CR><LF>.<CR><LF>.')
    send: b'Content-Type: multipart/mixed; boundary="===============4761608527476114621=="\r\nMIME-Version: 1.0\r\nSubject: =?utf-8?q?1315395621=40163=2Ecom?=\r\nFrom: xxx@qq.com\r\nTo: =?utf-8?q?test?=\r\n\r\n--===============4761608527476114621==\r\nContent-Type: text/plain; charset="utf-8"\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: base64\r\n\r\n55SoUVHpgq7nrrHlj5HnmoQh\r\n\r\n--===============4761608527476114621==--\r\n.\r\n'
    reply: b'250 OK: queued as.\r\n'
    reply: retcode (250); Msg: b'OK: queued as.'
    data: (250, b'OK: queued as.')
    send: 'quit\r\n'
    reply: b'221 Bye.\r\n'
    reply: retcode (221); Msg: b'Bye.'
    

    新浪邮箱收到:
    在这里插入图片描述

    5.2代码解析

    • 构造一个邮件对象就是一个Message对象
    • 如果使用MIMEText构造一个MEMEText对象,就表示一个文本邮件对象;
    • 如果构造一个MIMEImage对象,就是一个作为附件的图片;
    • 要把多个对象组合起来,使用MIMEMultipart对象;
    • MIMEBase可以表示任何对象。

    继承关系:

    Message
    	MIMEBase
    		MIMEMultipart
    		MIMENonMultipart
    			MIMEMessage
    			MIMEText
    			MIMEImage	
    

    6.不同邮箱互发测试

    测试目标:1-新浪邮箱 2-QQ邮箱 3-网易邮箱
    发送测试结果:

    • QQ邮箱可以发送给自己,网易邮箱和新浪邮箱
    • 新浪邮箱可以发送给自己,但是发送给QQ邮箱和网易邮箱的失败了
    • 网易邮箱可以发送给自己,新浪邮箱和QQ邮箱。

    关于新浪的SMTP服务器发送失败,怀疑是SMTP服务器把我的邮件误认为是群发邮件或者是有毒邮件,所以偷偷扔掉了,但是不通知我,还返回给我一个成功的状态码。。。

    关于邮件发送成功对方却接受不到的几种可能:http://qunfa.abot.cn/post/68.html
    还有通过退信码查找错误原因:http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html

    展开全文
  • python 邮件发送

    2018-06-06 17:04:17
    一.SMTP发送邮件SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件HTML邮件以及带附件的邮件Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。实例:#导入...

    一.SMTP发送邮件

    SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。
    Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。

    实例:

    #导入模块
    import email.mime.multipart
    import email.mime.text
    import smtplib
    
    #首先创建一个消息对象:
    msg = email.mime.multipart.MIMEMultipart()
    #指明邮件的发件人
    msg['from'] = '13612093770@163.com'
    #指明邮件的收件人
    msg['to'] =  '13612093770@163.com'
    #指明邮件的主题
    msg['subject'] = 'six god !'
    
    #定义发送信息的内容
    context = '''
        <h1>hello</h1>
        你好,
         这是一封自动发送的邮件。
        '''
    text = email.mime.text.MIMEText(_text=context, _subtype="html")
                    #_subtype这个参数决定了你是以html解析的形式去发送,还是以text的形式去发送。(text形式则不写此参数)
    msg.attach(text)
    
    #创建一个smtp对象
    em = smtplib.SMTP_SSL()
    连接smtp服务器,端口
    em.connect("smtp.163.com", 465)
    #登录自己邮箱账号
    em.login("13612093770@163.com", 'password')
    #调用发送消息函数,参数:发件人,收件人,消息内容
    em.sendmail(from_addr='13612093770@163.com', to_addrs='13612093770@163.com', msg=msg.as_string())
    #关闭连接
    em.quit()

    运行之后查看邮箱:可见消息内容已经按照HTML格式解析发送了。


    我们将_subtype="html"此参数删除,再次发送:可以看见直接以文本形式发送了。



    二.使用yagmail模块发送邮件

    安装模块

    pip install yagmail

    实例:

    #导入模块import yagmail as yagmail
    
    #连接邮箱服务器,即发件人
    xinxi = {
        "user":"13612093770@163.com",
        "password":"password",
        "host":"smtp.163.com",
        "port":"465"
    }#定义收件人
    to = "13612093770@163.com"#定义邮件主题
    subject ="测试"#定义邮件内容
    contents = "demaixya"#连接邮箱服务器
    email = yagmail.SMTP(**xinxi)#发送邮件,参数:收件人,主题,内容,附件,抄送cc=“xxx.com”(此处没进行抄送)
    email.send(to=to,subject=subject,contents=contents,attachments="demon1.py")

    运行之后查看邮件:

    给多个用户发送邮件,只需要将接收邮箱 变成一个list即可。

    #定义收件人
    to = ["13612093770@163.com","xxx.com"]

    发送带多个附件的邮件,也是变成一个list

    ["d://log.txt","d://baidu_img.jpg"]


    展开全文
  • Python邮件发送

    2018-11-11 16:50:00
    利用Python编辑一个发送邮件的脚本 """ 可选参数 text 邮件正文内容(文本) html 邮件附件内容(HTML) image_path 邮件附件内容(图片路径) att_path 邮件附件内容(文件路径) """ text = "Hi!你好...

    利用Python编辑一个发送邮件的脚本

    """
    可选参数
    text 邮件正文内容(文本)
    html 邮件附件内容(HTML)
    image_path 邮件附件内容(图片路径)
    att_path 邮件附件内容(文件路径)
    """
    text = "Hi!你好啊!!\nHow are you?\nHere is the link you wanted:\nhttp://www.baidu.com"
    html = """
    <html>  
      <head></head>  
      <body>  
        <p>Hi!<br>  
           How are you?<br>  
           Here is the <a href="http://www.baidu.com">link</a> you wanted.<br> 
        </p> 
      </body>  
    </html>  
    """
    image_path = "F:\爬虫\IMGS\image1.jpg"
    att_path = r'F:\Python开发工程师测试题(一).docx'
    
    """
    必要参数
    username  邮箱登陆账号
    password  邮箱密码
    subject   邮件主题
    server    邮件服务器
    sender    发送方
    receiver  收件人(列表格式,多个收件人)
    """
    username = "xxxx9.com"
    password = 'xxxx
    subject = '测试邮件'
    server = 'smtp.139.com'
    sender = 'xxx@139.com'
    receiver = ['xxx@qq.com']
    相关参数

    一:脚本的配置类

    import smtplib, time, os
    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
    
    
    class Settings():
        #脚本配置类
        def __init__(self, username, password, subject, server, sender, receiver):
            self.server = server
            self.sender = sender
            self.receiver = receiver
            self.username = username
            self.password = password
            self.subject = subject

    二:构造邮件MIMEMultipart对象

    class Message():
        # 构造邮件对象MIMEMultipart对象
        _msg = MIMEMultipart('mixed')
    
        def __init__(self, set, content):
            # 下面的主题,发件人,收件人,日期是显示在邮件页面上的。
            self._msg['Subject'] = set.subject
            self._msg['From'] = set.username
            # 收件人为多个收件人,通过join将列表转换为以;为间隔的字符串
            self._msg['To'] = ";".join(set.receiver)
            self._msg['Date'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
            self.content = content
    
        def get_msg(self):
            for info in self.content.get_content():
                if not info: continue
                self._msg.attach(info)
            return self._msg

    三:构造邮件正文及附件内容

    class EmailContent():
        def __init__(self, text=None, html=None, image_path=None, att_path=None):
            self.text = text
            self.image = image_path
            self.html = html
            self.att_path = att_path
    
        def get_filename(self, path):
            import os
            return os.path.basename(path)
    
        @property
        def get_text(self):
            # 构造文本
            if not self.text:
                return None
            self.text_plain = MIMEText(self.text, 'plain', 'utf-8')
            return self.text_plain
    
        @property
        def get_image(self):
            # 构造图片链接
            if not self.image:
                return None
            if not os.path.exists(self.image):
                raise FileNotFoundError("Not Find This File")
            filename = self.get_filename(self.image)
            self.sendimagefile = open(r'%s' % self.image, 'rb').read()
            self.image = MIMEImage(self.sendimagefile)
            self.image.add_header('Content-Disposition', 'attachment', filename=('gbk', '', filename))
            return self.image
    
        @property
        def get_html(self):
            # 构造html
            if not self.html:
                return None
            self.text_html = MIMEText(self.html, 'html', 'utf-8')
            self.text_html["Content-Disposition"] = 'attachment; filename="TEXT/HTML.html"'
            return self.text_html
    
        @property
        def get_att(self):
            "# 构造附件"
            if not self.att_path:
                return None
            if not os.path.exists(self.att_path):
                raise FileNotFoundError("Not Find This File")
            filename = self.get_filename(self.att_path)
            self.att = MIMEBase('application', 'octet-stream')
            self.att.set_payload(open(self.att_path, 'rb').read())
            self.att.add_header('Content-Disposition', 'attachment', filename=('gbk', '', filename))
            encoders.encode_base64(self.att)
            return self.att
    
        def get_content(self):

    四:邮件发送服务类

    class Smtp():
        _smtp = smtplib.SMTP()
        def __init__(self, set, msg):
            self.set = set
            self.msg = msg
    
        def _connect(self):
            self._smtp.connect(self.set.server)
    
        def _login(self):
            self._smtp.login(self.set.username, self.set.password)
    
        def _sendmail(self):
            self._smtp.sendmail(self.set.sender, self.set.receiver, self.msg.as_string())
    
        def _quit(self):
            self._smtp.quit()
    
        def start(self):
            self._connect()
            self._login()
            self._sendmail()
            self._quit()

    五:主程序

    if __name__ == '__main__':
        set = Settings(username, password, subject, server, sender, receiver)
        content = EmailContent(text=text, image_path=image_path, att_path=att_path, html=html)
        message = Message(set, content)
        msg = message.get_msg()
        smtp = Smtp(set, msg)
        smtp.start()

     

     

    # 构造邮件对象MIMEMultipart对象

    转载于:https://www.cnblogs.com/li1992/p/9942560.html

    展开全文
  • Python邮件发送案例

    2017-07-17 15:56:30
    发送邮件发送邮件的几个要素: 内容: 发件人(发件人的名称、发件人的邮箱地址) 收件人(收件人的名称、收件人的邮箱地址) 邮件的名称 邮件内容(文件邮件(文字和图片)、HTML邮件) 服务器: smtp...
  • Python邮件发送HTML表格快速建立

    万次阅读 热门讨论 2018-09-15 14:17:32
    有时候需要发送带表格邮件,可能我们的数据是从数据库导出,或者是来自外部的csv或者excel文件,不管是哪种形式,到了Python,都是DataFrame格式,这时候,我们想将表格嵌入到HTML中,别急!有捷径! 1、Head通用...
  • Python发送html邮件

    2019-10-06 00:09:15
    Python发送html邮件 Python发送html邮件 - 2010Freeze - 博客园Python发送html邮件1 if __name__ == '__main__': 2 ToUser='zhoujiebing@maimiaotec...
  • python发送html邮件

    2019-09-20 01:44:40
    python发送html邮件的的API可以参考python官方文档,但是可能会出现邮件的样式不符合预期,例如样式不全,图片展示异常等。这里总结2个踩过的坑的经验: html要使用table的方式布局,不排除现在有些邮件客户端对div...
  • python邮件发送带附件

    2016-03-16 22:12:03
    smtplib模块负责连接服务器和发送邮件 MIMEImage类:定义邮件的图片数据 MIMEText:HTML格式的邮件,定义Content-Disposition属性可以实现带附件 MIMEMultipart:负责将文字图片音频组装在一起和添加附件#coding:...
  • Python 发送HTML邮件

    千次阅读 2018-10-23 16:55:29
    Python 发送HTML邮件 在构造MIMEText对象时,把HTML字符串传进去,再把第二个参数由plain变为html就可以了 # -*- coding:utf-8 -*- import smtplib from email.mime.text import MIMEText from email.header import ...
  • Python 邮件发送之嵌套图片&发送附件

    千次阅读 2020-01-17 15:33:43
    4.发送各种文档和图片,html样式 1. SMTP 介绍 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议。 SMTP 是一种TCP协议支持的提供可靠且有效电子邮件传输的应用层协议。SMTP 是建立在 TCP上的一种邮件...
  • python邮件发送脚本

    2014-11-16 22:46:36
    转载自cnblogs博文http://www.cnblogs.com/phinecos/archive/2010/09/28/1837578.html
  • python邮件发送万能脚本及打包为exe程序 继上一篇博客讲完基础知识,这里分享一下一个能够应付所有普通情况的邮件发送的python程序脚本。 下面一起来看看吧! # coding=utf-8 import smtplib # 引用smtplib模块 ...
  • 1、邮件发送原理 发送方发送的信件内容经过SMPT协议上传到smpt服务器,转送给远方的smpt服务器,存储到存储设备,然后通过POP/IMAP协议从pop服务器上获取内容发给接收方。 2、常用服务器的名称、地址与端口: ...
  • Python邮件发送

    2020-08-19 14:02:50
    Python邮件发送 实现邮件发送功能,则需要smtplib和email两个模块。 smtplib模块主要和smtp邮件服务器进行交互,如登录、退出、发送邮件等。 email模块主要封装邮件消息,如普通邮件、HTML邮件、图片邮件或附件...
  • 使用smtplib.SMTP_SSL发送邮件 msg:需要发送html数据 message = MIMEText(msg, ‘html’, ‘utf-8’):设置发邮件内容msg、类型是html、编码是utf-8 message[‘From’] = Header(“测试”):设置发送人文本 ...
  • Python smtplib 发送HTML邮件(多个邮箱轮流发送)前言代码 前言 因为各大邮箱都对同一ip有一定时间内邮件发送数量的限制,因此可采用不同邮箱混合轮流发送邮件来缓解此限制,这里提供了两个邮箱轮流发送的源代码。 ...
  • Python 技术篇-邮件写入html代码,邮件发送表格,邮件发送超链接,邮件发送网络图片。 邮件可以发送html,那我们就能做个表格出来,做个超链接出来,网上找个图片发出来。 重点是:`message = MIMEText(html_text, '...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 929
精华内容 371
关键字:

python邮件发送html

python 订阅