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

    1. 简介:

    安装 smtplib 模块:pip install smtplib

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

    参数说明:

    1 host: SMTP服务器主机。 你可以指定主机的ip地址或者域名,可选参数。

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

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

    python SMTP对象使用sendmail方法发送邮件,语法如下:

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

    参数说明:

    1 from_addr: 邮件发送者地址。

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

    3 msg: 发送消息内容  

    这里要注意一下第三个参数,msg是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg的格式。这个格式就是smtp协议中定义的格式。

    2. 发送普通邮件实例

    QQ邮箱如何开启POP3/SMTP服务

    https://jingyan.baidu.com/article/425e69e61e9178be15fc168a.html

    复制代码
    import smtplib
    from email.mime.text import MIMEText
    
    # 发送普通邮件
    # POP3 服务器地址:pop.qq.com
    # SMTP 服务器地址:smtp.qq.com
    
    class SendEmail:
        def __init__(self,send_user,email_host,email_port,password,user_list,title,message):
            # 发送邮件的用户
            self.send_user = send_user
            # SMTP 服务器地址:smtp.qq.com
            self.email_host = email_host
            # 服务器端口 465
            self.email_port = email_port
            # 开启POP3/SMTP服务,在第三方客户端登录时,生成的授权码
            self.password = password
            # 接收邮件的用户
            self.user_list = user_list
            # 邮件内容
            self.message = message
            # 邮件标题
            self.title = title
        def send_email(self):
            try:
                user = "菜鸟程序员" + "<" + self.send_user + ">"
                message = MIMEText(self.message, _subtype='plain', _charset='utf-8')
                message['Subject'] = self.title
                message['From'] = user
                message['To'] = ";".join(self.user_list)
                server = smtplib.SMTP_SSL()
                server.connect(self.email_host, self.email_port)
                server.login(self.send_user, self.password)
                server.sendmail(user, self.user_list, message.as_string())
                server.close()
                print("发送邮件成功,请查收")
            except Exception as e:
                print("发送邮件失败,报错信息:",e)
    
    if __name__ == '__main__':
        send_user = "xxxxxxxxxxxxx@qq.com"
        email_host = "smtp.qq.com"
        email_port = 465
        password = "xxxxxxxxxxxxxxxxxxxx"
        user_list = ["xxxxxxxxxxxx@qq.com"]
        title = "邮件标题"
        message = "邮件内容"
        send = SendEmail(send_user,email_host,email_port,password,user_list,title,message)
        send.send_email()
    复制代码

    3.使用Python发送HTML格式的邮件

    复制代码
    import smtplib
    from email.mime.text import MIMEText
    
    # 发送HTML格式邮件
    # POP3 服务器地址:pop.qq.com
    # SMTP 服务器地址:smtp.qq.com
    
    class SendEmail:
        def __init__(self,send_user,email_host,email_port,password,user_list,title,message):
            # 发送邮件的用户
            self.send_user = send_user
            # SMTP 服务器地址:smtp.qq.com
            self.email_host = email_host
            # 服务器端口 465
            self.email_port = email_port
            # 开启POP3/SMTP服务,在第三方客户端登录时,生成的授权码
            self.password = password
            # 接收邮件的用户
            self.user_list = user_list
            # 邮件内容
            self.message = message
            # 邮件标题
            self.title = title
        def send_email(self):
            try:
                user = "菜鸟程序员" + "<" + self.send_user + ">"
                message = MIMEText(self.message, _subtype='html', _charset='utf-8')
                message['Subject'] = self.title
                message['From'] = user
                message['To'] = ";".join(self.user_list)
                server = smtplib.SMTP_SSL()
                server.connect(self.email_host, self.email_port)
                server.login(self.send_user, self.password)
                server.sendmail(user, self.user_list, message.as_string())
                server.close()
                print("发送邮件成功,请查收")
            except Exception as e:
                print("发送邮件失败,报错信息:",e)
    
    if __name__ == '__main__':
        send_user = "xxxxxxxxxx@qq.com"
        email_host = "smtp.qq.com"
        email_port = 465
        password = "xxxxxxxxxxxxx"
        user_list = ["xxxxxxxx@qq.com"]
        title = "邮件标题"
        message = """
            <p>全是BUG</p>
            <p><a href="https://www.cnblogs.com/xingxingnbsp/">菜鸟程序员博客</a></p>
        """
        send = SendEmail(send_user,email_host,email_port,password,user_list,title,message)
        send.send_email()
    复制代码

    4.Python 发送带附件的邮件

    复制代码
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    
    # 发送带附件的邮件
    # POP3 服务器地址:pop.qq.com
    # SMTP 服务器地址:smtp.qq.com
    
    class SendEmail:
        def __init__(self,send_user,email_host,email_port,password,user_list,title,message,file_path):
            # 发送邮件的用户
            self.send_user = send_user
            # SMTP 服务器地址:smtp.qq.com
            self.email_host = email_host
            # 服务器端口 465
            self.email_port = email_port
            # 开启POP3/SMTP服务,在第三方客户端登录时,生成的授权码
            self.password = password
            # 接收邮件的用户
            self.user_list = user_list
            # 邮件内容
            self.message = message
            # 邮件标题
            self.title = title
            # 附件地址
            self.file_path = file_path
    
        def send_email(self):
            try:
                user = "菜鸟程序员" + "<" + self.send_user + ">"
                # 创建一个带附件的实例
                message = MIMEMultipart()
                message.attach(MIMEText(self.message, 'plain', 'utf-8'))
                message['Subject'] = self.title
                message['From'] = user
                message['To'] = ";".join(self.user_list)
                for file in self.file_path:
                    # 构造附件
                    att1 = MIMEText(open(file, 'rb').read(), 'base64', 'utf-8')
                    att1["Content-Type"] = 'application/octet-stream'
                    # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
                    att1["Content-Disposition"] = 'attachment; filename={}'.format(file)
                    message.attach(att1)
                server = smtplib.SMTP_SSL()
                server.connect(self.email_host, self.email_port)
                server.login(self.send_user, self.password)
                server.sendmail(user, self.user_list, message.as_string())
                server.close()
                print("发送邮件成功,请查收")
            except Exception as e:
                print("发送邮件失败,报错信息:",e)
    
    if __name__ == '__main__':
        send_user = "xxxxxxxxxxx@qq.com"
        email_host = "smtp.qq.com"
        email_port = 465
        password = "xxxxxxxxxxxxxx"
        user_list = ["xxxxxxxx@qq.com"]
        title = "邮件标题"
        message = "发送带附件的邮件"
        file_path = ["附件1.txt","附件2.txt"]
        send = SendEmail(send_user,email_host,email_port,password,user_list,title,message,file_path)
        send.send_email()
    复制代码

    5.在 HTML 文本中添加图片

    复制代码
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage
    from email.mime.multipart import MIMEMultipart
    
    # 发送普通邮件
    # POP3 服务器地址:pop.qq.com
    # SMTP 服务器地址:smtp.qq.com
    
    class SendEmail:
        def __init__(self,send_user,email_host,email_port,password,user_list,title,message):
            # 发送邮件的用户
            self.send_user = send_user
            # SMTP 服务器地址:smtp.qq.com
            self.email_host = email_host
            # 服务器端口 465
            self.email_port = email_port
            # 开启POP3/SMTP服务,在第三方客户端登录时,生成的授权码
            self.password = password
            # 接收邮件的用户
            self.user_list = user_list
            # 邮件内容
            self.message = message
            # 邮件标题
            self.title = title
        def send_email(self):
            try:
                user = "菜鸟程序员" + "<" + self.send_user + ">"
                message = MIMEMultipart('related')
                content = MIMEText(self.message, 'html', 'utf-8')
                message.attach(content)
                message['Subject'] = self.title
                message['From'] = user
                message['To'] = ";".join(self.user_list)
                file = open("test.jpg", "rb")
                img_data = file.read()
                file.close()
                img = MIMEImage(img_data)
                img.add_header('Content-ID', 'image')
                message.attach(img)
                server = smtplib.SMTP_SSL()
                server.connect(self.email_host, self.email_port)
                server.login(self.send_user, self.password)
                server.sendmail(user, self.user_list, message.as_string())
                server.close()
                print("发送邮件成功,请查收")
            except Exception as e:
                print("发送邮件失败,报错信息:",e)
    
    if __name__ == '__main__':
        send_user = "xxxxxxxx@qq.com"
        email_host = "smtp.qq.com"
        email_port = 465
        password = "xxxxxxxxxxxxx"
        user_list = ["xxxxxxx@qq.com"]
        title = "邮件标题"
        message = """
            <p>全是BUG</p>
            <p><a href="https://www.cnblogs.com/xingxingnbsp/">菜鸟程序员博客</a></p>
            <p>图片演示:</p>
            <p><img src="cid:image"></p>
        """
        send = SendEmail(send_user,email_host,email_port,password,user_list,title,message)
        send.send_email()
    复制代码

     文章转载:https://www.cnblogs.com/xingxingnbsp/p/11693569.html

  • 相关阅读:
    thinkPHP 无法加载控制器:Hello
    在html中引用分享的链接
    div中iframe高度自适应问题
    php编写tcp服务器和客户端程序
    Maximum Subsequence Sum (25)——改进版
    水仙花数——升级版
    数据结构实验八——队列打印杨辉三角
    数据结构实验七——循环队列
    数据结构实验六——链队列
    水仙花数(20)
  • 原文地址:https://www.cnblogs.com/shenmiyang/p/14893176.html
Copyright © 2011-2022 走看看