美文网首页
邮件发送

邮件发送

作者: 酷飒de小姐姐 | 来源:发表于2021-05-17 19:33 被阅读0次

    SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

    SMTP发送邮件Python对SMTP的支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。

    Python创建SMTP对象的语法如下:

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

    语法中各个参数说明如下:

    ● host:SMTP服务器主机。可以指定主机的IP地址或域名(如www.baidu.com),是可选参数。

    ● port:如果提供了host参数,就需要指定SMTP服务使用的端口号。一般情况下,SMTP的端口号为25。

    ● local_hostname:如果SMTP在本地主机上,只需要指定服务器地址为localhost即可。

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

    语法中各个参数说明如下:

    ● from_addr:邮件发送者的地址。

    ● to_addrs:字符串列表,邮件发送地址。

    ● msg:发送消息。msg是字符串,表示邮件内容。我们知道邮件一般由标题、发信人、收件人、邮件内容、附件等构成,发送邮件时,要注意msg的格式。这个格式就是SMTP协议中定义的格式。

    普通文本邮件发送的实现关键要将MIMEText中的_subtype设置为plain。首先导入smtplib和MIMEText。创建smtplib.smtp实例,连接邮件SMTP服务器,登录后发送,具体代码如下(send_email.py):

    #! /usr/bin/python

    # -*-coding:UTF-8-*-

    import smtplib

    from email.mime.textimport MIMEText

    from email.headerimport Header

    sender ='1510101@163.com'

    pwd ='xxxxx' #开通邮箱服务后,设置的客户端授权密码

    receivers = ['to@uzoo.cn']# 接收邮件,可设置为你的邮箱

    # 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码

    message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')

    message['From'] = Header("邮件测试", 'utf-8')

    message['To'] = Header("测试", 'utf-8')

    subject ='Python SMTP 邮件测试'

    message['Subject'] = Header(subject, 'utf-8')

    try:

    # 使用非本地服务器,需要建立SSL连接

        smtpObj = smtplib.SMTP_SSL("smtp.163.com", 465)

    smtpObj.login(sender, pwd)

    smtpObj.sendmail(sender, receivers, message.as_string())

    print("邮件发送成功")

    except smtplib.SMTPExceptionas se:

    print(f"Error: 无法发送邮件.Case:{se}")

    发送HTML格式的邮件如果我们要发送的是HTML邮件,而不是普通的纯文本文件怎么办呢?方法很简单,在构造MIMEText对象时把HTML字符串传进去,再把第二个参数由plain变为html就可以了。代码实现如下(send_html_email.py):

    #! /usr/bin/python

        # -*-coding:UTF-8-*-

        import smtplib

        from email.mime.text import MIMEText

        from email.header import Header

        sender = '15101@163.com'

        pwd = 'xxxxx' #开通邮箱服务后,设置的客户端授权密码

        receivers = ['to@uzoo.cn']  # 接收邮件,可设置为你的邮箱

        mail_msg = """

        <p>Python 邮件发送测试...</p >

        <p>< a href=" ">这是一个链接</ a></p >

        """

        message = MIMEText(mail_msg, 'html', 'utf-8')

        message['From'] = Header("邮件测试", 'utf-8')

        message['To'] =  Header("测试", 'utf-8')

        subject = 'Python SMTP 邮件测试'

        message['Subject'] = Header(subject, 'utf-8')

        try:

            # 使用非本地服务器,需要建立SSL连接

            smtpObj = smtplib.SMTP_SSL("smtp.163.com", 465)

            smtpObj.login(sender, pwd)

            smtpObj.sendmail(sender, receivers, message.as_string())

            print("邮件发送成功")

        except smtplib.SMTPException as se:

            print(f"Error: 无法发送邮件.Case:{se}")

    发送带附件的邮件,可以构造一个MIMEMultipart对象代表邮件本身,然后往里面添加一个MIMEText作为邮件正文,再添加表示附件的MIMEBase对象即可。代码实现如下(send_fujian_email.py):

    #coding:utf-8

    import smtplib

    from email.mime.multipartimport MIMEMultipart

    from email.mime.textimport MIMEText

    #发送邮件smtblib,邮件格式:MIMEText

    import os

    class SendEmail:

    #全局变量

        global send_user

    global email_host

    global password

    email_host ="smtp.163.com"

        send_user ="151010@163.com"

        password ="ALFIUIP"

        def send_mail(self,user_list,sub,content,att1):

    #构建

            user ="1510101" +"<"+send_user+">"

            #构建邮件内容格式

    # message = MIMEText(content,_subtype='plain',_charset='utf-8')

            message = MIMEMultipart(_charset='utf-8')

    message['Subject'] = sub#主题格式

            message['From'] = user#发送人

            message['To'] =";".join(user_list)#多个收件人,分号分割

            message.attach(MIMEText(content,_subtype='plain',_charset='utf-8'))

    # 构造附件1,传送当前目录下的文件

            att1 = MIMEText(open('../dataconfig/appellation.xls', 'rb').read(), 'base64', 'utf-8')

    att1["Content-Type"] ='application/octet-stream'

            # 这里的filename可以任意写,写什么名字,邮件中显示什么名字

            att1["Content-Disposition"] ='attachment; filename="test.xls"'

            message.attach(att1)

    message.attach(MIMEText(content, 'html', _charset='utf-8'))

    server = smtplib.SMTP()#创建邮件服务

            server.connect(email_host)#连接服务

            server.login(send_user,password)

    server.sendmail(user,user_list,message.as_string())

    server.close()

    def send_main(self,pass_list,fail_list):

    pass_num =len(pass_list)#成功总数

            fail_num =len(fail_list)#错误总数

            count_num = pass_num+fail_num#执行用例总数

    #百分比

            pass_result ="%.2f%%" %(pass_num/count_num*100)#%.2f指却取值小数点后两位,%表示百分号

            fail_result ="%.2f%%" %(fail_num/count_num*100)

    att1 = MIMEText(open('../dataconfig/appellation.xls', 'rb').read(),'base64','utf-8')

    att1["Content-Type"] ='application/octet-stream'

            # 这里的filename可以任意写,写什么名字,邮件中显示什么名字

            att1["Content-Disposition"] ='attachment; filename="test.xls"'

            user_list = ['li@uzoo.cn']

    sub ='接口自动化测试报告'

            content="<p>此次一共运行接口个数为%s个</p><html><body><div><tr id="" class="" style=""><td><h1>用例集/测试用例</h1></td></tr></div></body></html>" \

    "通过个数为%s个,失败个数为%s个,通过率为%s,失败率为%s"%(count_num,pass_num,fail_num,pass_result,fail_result)

    # content = """

    此次一共运行接口个数为%count_num个

    # 通过个数%s失败个数%s

    # 通过个数%pass_num失败个数%fail_num

    #

    # 通过率%s失败率%s

    # 通过率%pass_result失败率%fail_result"""

            if fail_num>=0:

    self.send_mail(user_list,sub,content,att1)

    else:

    print("")

    if __name__ =='__main__':

    sen = SendEmail()

    sen.send_main([1,2],[3,4])

    相关文章

      网友评论

          本文标题:邮件发送

          本文链接:https://www.haomeiwen.com/subject/jitsjltx.html