使用Python自动发送邮件的实现步骤

Written by

in

文章目录
  •  SMTP(Simple Mail Transfer Protocol)是简单传输协议。 python中对SMTP进行了简单的封装,可以发送纯文本邮件、HTML 邮件以及带附件的邮件。两个核心模块如下: email模块:负责构建邮件 smtplib模块:负责发送邮件 常用方法与属性:   如果要使用qq邮箱发送的话,需要在qq邮箱设置-账户里面开启POP3/SMTP服务  首次开启需要你用手机号发送短信,照着做就好了,做完之后会给你一个授权码,记着这个授权码,写代码需要用到,忘记了也可以找回 接着编写代码,发送普通邮件 import smtplib from email.mime.text import MIMEText from email.header import Header def send_email(): # 设置要登录的邮箱 smtp_obj = smtplib.SMTP(‘smtp.qq.com’) # 登录邮箱 这里需要填写你的qq邮箱地址和生成的授权码 smtp_obj.login(‘xxx@qq.com’,’spcdwgqkltjsbiah’) # 编辑内容 mail_text = ‘This is Email~ 您要的邮件来啦~~’ # plain 原生文本模式 msg_body = MIMEText(mail_text,’plain’,’utf-8′) # 设置从哪发送的 msg_body[‘From’] = Header(‘xxx’,’utf-8′) # 设置发送人 msg_body[‘Subject’] = Header(‘测试Python自动邮件’,’utf-8′) # 设置内容主题 # 发送邮件 这里第一个邮箱填自己的,第二个填收件人的邮箱地址 smtp_obj.sendmail(‘398707160@qq.com’,’hotelmail@126.com’,msg_body.as_string()) if __name__ ==’__main__’: send_email()
  •  发送HTML邮件只需要把发送的内容换成html代码即可 import smtplib from email.mime.text import MIMEText from email.header import Header def send_email(): # 设置要登录的邮箱 smtp_obj = smtplib.SMTP(‘smtp.qq.com’) # 登录邮箱 这里需要填写你的qq邮箱地址和生成的授权码 smtp_obj.login(‘xxx@qq.com’,’spcdwgqkltjsbiah’) # 编辑内容 mail_text = ”’ <h1 style=’color:red’>这是一个HTML邮件通知</h1> <p>这个是邮件的内容</p> <p><a href=’http://www.itbaizhan.cn’>这个是链接</a></p> ”’ # plain 原生文本模式 msg_body = MIMEText(mail_text,’plain’,’utf-8′) # 设置从哪发送的 msg_body[‘From’] = Header(‘xxx’,’utf-8′) # 设置发送人 msg_body[‘Subject’] = Header(‘测试Python自动邮件’,’utf-8′) # 设置内容主题 # 发送邮件 这里第一个邮箱填自己的,第二个填收件人的邮箱地址 smtp_obj.sendmail(‘398707160@qq.com’,’hotelmail@126.com’,msg_body.as_string()) if __name__ ==’__main__’: send_email()
  • 有时邮件的内容只靠文本是无法完全描述内容。这时就可以考虑发 送附件来携带内容。具体方法如下: 设置登录服务器 、登录邮箱、增加附件 、设置请求头、 发送邮件 import smtplib from email.mime.text import MIMEText from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart from email.header import Header def send_file_email(): # 设置邮箱服务器 stmp_obj = smtplib.SMTP(‘smtp.qq.com’) # 登录邮箱 stmp_obj.login(‘xxx@qq.com’,’spcdwgqkltjsbiah’) # 设置邮件内容 # 文本 msg_txt = MIMEText(‘这个带有附件的邮件’,’plain’,’utf-8′) # 附件 打开你要发送的文件 msg_file = MIMEApplication(open(‘./base_data/backg.jpg’,’rb’).read()) msg_file.add_header(‘Content-Disposition’,’attachment’,filename=’bg.jpg’) # 封装要发送的数据 part = MIMEMultipart() part.attach(msg_txt) part.attach(msg_file) # 设置邮件其它信息 part[‘From’] = Header(‘xx’,’utf-8′) part[‘Subject’] = Header(‘附件邮件’,’utf-8′) # 发送邮件 stmp_obj.sendmail(‘xxx@qq.com’,’hotelmail@126.com’,part.as_string()) if __name__ ==’__main__’: send_file_email()
  • 这里以发送工资条为例 工资数据如下:  from email.header import Header from email.mime.text import MIMEText import smtplib from openpyxl import load_workbook def send_many_mail(): # 设置登录邮箱服务器 smtp_obj = smtplib.SMTP(‘smtp.qq.com’) # 登录邮箱 smtp_obj.login(‘xxx@qq.com’,’spcdwgqkltjsbiah’) # 打开excel文件 wb = load_workbook(‘./base_data/工资数据.xlsx’,data_only=True) # 激活工作簿 sh = wb.active # 读取数据-遍历 for i,r in enumerate(sh.iter_rows()): if i != 0: # 编辑内容 msg_txt = f”’ <h3>您好:{r[1].value}</h3> <p>请查收2030年12月工资条详情:</p> <table border=”1″> <tr> <td>工号</td> <td>姓名</td> <td>部门</td> <td>基本工资</td> <td>提成</td> <td>加班工资</td> <td>社保扣除</td> <td>考勤扣除</td> <td>应发工资</td> <td>邮箱</td> </tr> <tr> <td>{r[0].value}</td> <td>{r[1].value}</td> <td>{r[2].value}</td> <td>{r[3].value}</td> <td>{r[4].value}</td> <td>{r[5].value}</td> <td>{r[6].value}</td> <td>{r[7].value}</td> <td>{r[8].value}</td> <td>{r[9].value}</td> </tr> </table> ”’ msg = MIMEText(msg_txt,’html’,’utf-8′) # 设置邮件其他信息 msg[‘From’] = Header(‘财务部’,’utf-8′) msg[‘Subject’] = Header(‘工资条’,’utf-8′) #发送邮件 smtp_obj.sendmail(‘xxx@qq.com’,{r[9].value},msg.as_string()) print(f'{r[1].value} 工资条发送成功!!’) if __name__ ==’__main__’: send_many_mail()
  •  Zmail的优势 1 自动填充大多数导致服务端拒信的头信息(From To LocalHost之类的) 2 将一个字典映射为email,构造信件就像构造字典一样简单 3 自动寻找邮件服务商端口号地址,自动选择合适的协议(经过认证的) 安装:pip install zmail 发送的消息以字典发送,包含的key: subject 邮件主题 from 发送人 content_text 邮件内容-文本 content_html 邮件内容-HTML attachments 邮件内容-附件,可写多个  import zmail def send_text(): # 登录邮箱 server = zmail.server(‘xxx@qq.com’,’spcdwgqkltjsbiah’) # 编写内容 info = { ‘from’:’笨笨的张小白’, ‘subject’:’测试zmail模块’, ‘content_text’:’这个是zmail邮件信息’ } # 发送邮件 server.send_mail(‘hotelmail@126.com’,info) def send_html(): # 登录邮箱 server = zmail.server(‘xxx@qq.com’,’spcdwgqkltjsbiah’) # 编写内容 info = { ‘from’:笨笨的张小白’, ‘subject’:’测试zmail模块’, ‘content_html’:'<h1>这个是zmail邮件信息</h1>’ } # 发送邮件 server.send_mail(‘hotelmail@126.com’,info) def send_file(): # 登录邮箱 server = zmail.server(‘xxx@qq.com’,’spcdwgqkltjsbiah’) # 编写内容 info = { ‘from’:’笨笨的张小白’, ‘subject’:’测试zmail模块’, ‘content_html’:'<h1>这个是zmail邮件信息</h1>’, ‘attachments’:[r’.base_databackg.jpg’] } # 发送邮件 server.send_mail(‘hotelmail@126.com’,info) def get_email(): # 登录邮箱 server = zmail.server(‘xxx@qq.com’,’tzteewnmyfqacbce’) email = server.get_latest() print(email.get(‘subject’)) print(email.get(‘from’)) print(email.get(‘content_html’)) print(email.get(‘content_text’)) if __name__ == ‘__main__’: # send_text() # send_html() # send_file() get_email() 以上就是使用Python自动发送邮件的实现步骤的详细内容,更多关于Python自动发送邮件的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: Python实现PC屏幕截图并自动发送邮件 Python实现自动发送测试报告邮件的示例代码 懒人必备Python代码之自动发送邮件 Python如何实现自动发送邮件 Python自动发送和收取邮件的方法
  • 目录
    • 发送普通邮件
    • 发送HTML邮件
    • 发送附件邮件-smtplib
    • 批量发送邮件-smtplib
    • 发送邮件-zmail

     SMTP(Simple Mail Transfer Protocol)是简单传输协议。

    python中对SMTP进行了简单的封装,可以发送纯文本邮件、HTML 邮件以及带附件的邮件。两个核心模块如下:

    email模块:负责构建邮件

    smtplib模块:负责发送邮件

    常用方法与属性: 

     如果要使用qq邮箱发送的话,需要在qq邮箱设置-账户里面开启POP3/SMTP服务

     首次开启需要你用手机号发送短信,照着做就好了,做完之后会给你一个授权码,记着这个授权码,写代码需要用到,忘记了也可以找回

    接着编写代码,发送普通邮件

    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    def send_email():
        # 设置要登录的邮箱
        smtp_obj = smtplib.SMTP('smtp.qq.com')
        # 登录邮箱  这里需要填写你的qq邮箱地址和生成的授权码
        smtp_obj.login('xxx@qq.com','spcdwgqkltjsbiah')
        # 编辑内容
        mail_text = 'This is Email~ 您要的邮件来啦~~'
        # plain 原生文本模式
        msg_body = MIMEText(mail_text,'plain','utf-8')
        # 设置从哪发送的
        msg_body['From'] = Header('xxx','utf-8')  # 设置发送人
        msg_body['Subject'] = Header('测试Python自动邮件','utf-8')  # 设置内容主题
        # 发送邮件  这里第一个邮箱填自己的,第二个填收件人的邮箱地址
        smtp_obj.sendmail('398707160@qq.com','hotelmail@126.com',msg_body.as_string())
    
    if __name__ =='__main__':
        send_email()

     发送HTML邮件只需要把发送的内容换成html代码即可

    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    def send_email():
        # 设置要登录的邮箱
        smtp_obj = smtplib.SMTP('smtp.qq.com')
        # 登录邮箱  这里需要填写你的qq邮箱地址和生成的授权码
        smtp_obj.login('xxx@qq.com','spcdwgqkltjsbiah')
        # 编辑内容
        mail_text = '''
        <h1 style='color:red'>这是一个HTML邮件通知</h1>
        <p>这个是邮件的内容</p>
        <p><a href='http://www.itbaizhan.cn'>这个是链接</a></p>
        '''
        # plain 原生文本模式
        msg_body = MIMEText(mail_text,'plain','utf-8')
        # 设置从哪发送的
        msg_body['From'] = Header('xxx','utf-8')  # 设置发送人
        msg_body['Subject'] = Header('测试Python自动邮件','utf-8')  # 设置内容主题
        # 发送邮件  这里第一个邮箱填自己的,第二个填收件人的邮箱地址
        smtp_obj.sendmail('398707160@qq.com','hotelmail@126.com',msg_body.as_string())
    
    if __name__ =='__main__':
        send_email()

    有时邮件的内容只靠文本是无法完全描述内容。这时就可以考虑发 送附件来携带内容。具体方法如下:

    设置登录服务器 、登录邮箱、增加附件 、设置请求头、 发送邮件

    import smtplib
    from email.mime.text import MIMEText
    from email.mime.application import MIMEApplication
    from email.mime.multipart import MIMEMultipart
    from email.header import Header
    
    def send_file_email():
        # 设置邮箱服务器
        stmp_obj = smtplib.SMTP('smtp.qq.com')
        # 登录邮箱
        stmp_obj.login('xxx@qq.com','spcdwgqkltjsbiah')
        # 设置邮件内容
        # 文本
        msg_txt = MIMEText('这个带有附件的邮件','plain','utf-8')
        # 附件  打开你要发送的文件
        msg_file = MIMEApplication(open('./base_data/backg.jpg','rb').read())
        msg_file.add_header('Content-Disposition','attachment',filename='bg.jpg')
        # 封装要发送的数据
        part = MIMEMultipart()
        part.attach(msg_txt)
        part.attach(msg_file)
        # 设置邮件其它信息
        part['From'] = Header('xx','utf-8')
        part['Subject'] = Header('附件邮件','utf-8')
        # 发送邮件
        stmp_obj.sendmail('xxx@qq.com','hotelmail@126.com',part.as_string())
    
    if __name__ =='__main__':
        send_file_email()

    这里以发送工资条为例

    工资数据如下: 

    from email.header import Header
    from email.mime.text import MIMEText
    import smtplib
    
    from openpyxl import load_workbook
    
    def send_many_mail():
         # 设置登录邮箱服务器
        smtp_obj = smtplib.SMTP('smtp.qq.com')
        # 登录邮箱
        smtp_obj.login('xxx@qq.com','spcdwgqkltjsbiah')
        # 打开excel文件
        wb = load_workbook('./base_data/工资数据.xlsx',data_only=True)
        # 激活工作簿
        sh = wb.active
        # 读取数据-遍历
        for i,r in enumerate(sh.iter_rows()):
            if i != 0:
                # 编辑内容
                msg_txt = f'''
                <h3>您好:{r[1].value}</h3>
                <p>请查收2030年12月工资条详情:</p>
                <table border="1">
                <tr>
                    <td>工号</td>
                    <td>姓名</td>
                    <td>部门</td>
                    <td>基本工资</td>
                    <td>提成</td>
                    <td>加班工资</td>
                    <td>社保扣除</td>
                    <td>考勤扣除</td>
                    <td>应发工资</td>
                    <td>邮箱</td>
                </tr>
                <tr>
                    <td>{r[0].value}</td>
                    <td>{r[1].value}</td>
                    <td>{r[2].value}</td>
                    <td>{r[3].value}</td>
                    <td>{r[4].value}</td>
                    <td>{r[5].value}</td>
                    <td>{r[6].value}</td>
                    <td>{r[7].value}</td>
                    <td>{r[8].value}</td>
                    <td>{r[9].value}</td>
                </tr>
            </table>
                '''
                msg =  MIMEText(msg_txt,'html','utf-8')
                # 设置邮件其他信息
                msg['From'] = Header('财务部','utf-8')
                msg['Subject'] = Header('工资条','utf-8')
                #发送邮件
                smtp_obj.sendmail('xxx@qq.com',{r[9].value},msg.as_string())
                print(f'{r[1].value} 工资条发送成功!!')
    if __name__ =='__main__':
        send_many_mail()

     Zmail的优势

    1 自动填充大多数导致服务端拒信的头信息(From To LocalHost之类的)

    2 将一个字典映射为email,构造信件就像构造字典一样简单

    3 自动寻找邮件服务商端口号地址,自动选择合适的协议(经过认证的)

    安装:pip install zmail

    发送的消息以字典发送,包含的key:

    subject 邮件主题

    from 发送人

    content_text 邮件内容-文本

    content_html 邮件内容-HTML

    attachments 邮件内容-附件,可写多个 

    import zmail
    def send_text():
        # 登录邮箱
        server = zmail.server('xxx@qq.com','spcdwgqkltjsbiah')
        # 编写内容
        info = {
            'from':'笨笨的张小白',
            'subject':'测试zmail模块',
            'content_text':'这个是zmail邮件信息'
        }
        # 发送邮件
        server.send_mail('hotelmail@126.com',info)
    def send_html():
        # 登录邮箱
        server = zmail.server('xxx@qq.com','spcdwgqkltjsbiah')
        # 编写内容
        info = {
            'from':笨笨的张小白',
            'subject':'测试zmail模块',
            'content_html':'<h1>这个是zmail邮件信息</h1>'
        }
        # 发送邮件
        server.send_mail('hotelmail@126.com',info)
    def send_file():
        # 登录邮箱
        server = zmail.server('xxx@qq.com','spcdwgqkltjsbiah')
        # 编写内容
        info = {
            'from':'笨笨的张小白',
            'subject':'测试zmail模块',
            'content_html':'<h1>这个是zmail邮件信息</h1>',
            'attachments':[r'.base_databackg.jpg']
        }
        # 发送邮件
        server.send_mail('hotelmail@126.com',info)
    def get_email():
        # 登录邮箱
        server = zmail.server('xxx@qq.com','tzteewnmyfqacbce')
        email = server.get_latest()
        print(email.get('subject'))
        print(email.get('from'))
        print(email.get('content_html'))
        print(email.get('content_text'))
        
    if __name__ == '__main__':
        # send_text()
        # send_html()
        # send_file()
        get_email()
    

    以上就是使用Python自动发送邮件的实现步骤的详细内容,更多关于Python自动发送邮件的资料请关注风君子博客其它相关文章!

    您可能感兴趣的文章:

    • Python实现PC屏幕截图并自动发送邮件
    • Python实现自动发送测试报告邮件的示例代码
    • 懒人必备Python代码之自动发送邮件
    • Python如何实现自动发送邮件
    • Python自动发送和收取邮件的方法

    站内搜索