使用Python实现自动发送邮件的实战指南(以QQ/163为例)

Written by

in

文章目录
  • 很多开发者需要将大模型生成的内容(如报告、代码、数据分析结果)自动发送给用户或团队,但手动复制粘贴效率低且容易出错。本文详细介绍如何用 Python 实现自动发送邮件,以 QQ 邮箱和 163 邮箱为例,结合大模型生成内容的场景,给出完整的代码示例,包括纯文本邮件、HTML 邮件、附件发送等功能,帮你快速实现自动化邮件推送。
  • 在大模型应用场景中,自动发送邮件可以解决以下痛点: 自动化报告生成:将大模型生成的数据分析报告、技术文档自动发送给相关人员; 代码推送:将大模型生成的代码自动发送给开发团队; 通知提醒:将大模型生成的异常检测结果、预警信息自动发送给运维人员; 批量处理:一次性将大模型生成的多份内容发送给不同收件人。 Python 的smtplib和email库可以轻松实现邮件发送功能,结合大模型 API(如 OpenAI、Ollama),可以实现从内容生成到邮件发送的全流程自动化。
  • 在使用 Python 发送邮件前,需要开启邮箱的 SMTP 服务,并获取授权码(而非邮箱密码)。
  • Python 发送邮件主要依赖smtplib(连接 SMTP 服务器)和email(构建邮件内容)两个库。
  • 结合 Ollama 本地大模型,实现从内容生成到邮件发送的全流程自动化。 代码示例: import ollama import smtplib from email.mime.text import MIMEText from email.header import Header def generate_content_with_ollama(model_name: str, prompt: str) -> str: “”” 使用Ollama大模型生成内容 :param model_name: 模型名称 :param prompt: 提示词 :return: 大模型生成的内容 “”” response = ollama.generate(model=model_name, prompt=prompt, stream=False) return response[“response”] def send_email( smtp_server: str, smtp_port: int, sender_email: str, sender_password: str, receiver_email: str, subject: str, content: str ): “”” 发送邮件 :param smtp_server: SMTP服务器地址 :param smtp_port: SMTP服务器端口 :param sender_email: 发件人邮箱 :param sender_password: 发件人邮箱授权码 :param receiver_email: 收件人邮箱 :param subject: 邮件主题 :param content: 邮件内容 “”” message = MIMEText(content, “plain”, “utf-8”) message[“From”] = Header(sender_email, “utf-8”) message[“To”] = Header(receiver_email, “utf-8”) message[“Subject”] = Header(subject, “utf-8”) try: with smtplib.SMTP_SSL(smtp_server, smtp_port) as server: server.login(sender_email, sender_password) server.sendmail(sender_email, receiver_email, message.as_string()) print(“邮件发送成功”) except Exception as e: print(f”邮件发送失败:{str(e)}”) # 主函数 if __name__ == “__main__”: # 大模型配置 model_name = “llama3:8b” prompt = “生成一份Python数据分析报告的大纲,包括数据收集、数据清洗、数据分析、数据可视化、报告总结等部分。” # 生成内容 content = generate_content_with_ollama(model_name, prompt) print(f”大模型生成的内容:n{content}”) # 邮件配置 smtp_server = “smtp.qq.com” smtp_port = 465 sender_email = “your_qq_email@qq.com” sender_password = “your_qq_authorization_code” receiver_email = “receiver_email@example.com” subject = “大模型生成的Python数据分析报告大纲” # 发送邮件 send_email( smtp_server, smtp_port, sender_email, sender_password, receiver_email, subject, content )
  • Python 的smtplib和email库可以轻松实现邮件发送功能,结合大模型生成内容的场景,可以实现从内容生成到邮件发送的全流程自动化。本文以 QQ 邮箱和 163 邮箱为例,给出了纯文本邮件、HTML 邮件、附件邮件的代码示例,并结合 Ollama 大模型实现了内容生成与邮件发送的自动化。希望本文对你有所帮助,让你在大模型应用场景中实现自动化邮件推送。 以上就是使用Python实现自动发送邮件的实战指南(以QQ/163为例)的详细内容,更多关于Python QQ/163自动发送邮件的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: Python实现Excel批量处理+邮件自动发送的全流程 基于Python+smtplib实现邮件自动发送功能 Python编写邮件自动发送工具的完整指南 Python使用smtplib库开发一个邮件自动发送工具 使用Python构建带GUI的邮件自动发送工具
  • 目录
    • 摘要
    • 一、引言:为什么要自动发送邮件?
    • 二、准备工作:开启邮箱 SMTP 服务
      • 2.1 QQ 邮箱设置
      • 2.2 163 邮箱设置
    • 三、Python 发送邮件核心代码
      • 3.1 发送纯文本邮件
      • 3.2 发送 HTML 邮件
      • 3.3 发送带附件的邮件
    • 三、实战案例:大模型生成内容自动发送邮件
      • 四、常见问题与解决方案
        • 4.1 授权码错误
        • 4.2 端口错误
        • 4.3 邮件被拦截
      • 五、总结

        很多开发者需要将大模型生成的内容(如报告、代码、数据分析结果)自动发送给用户或团队,但手动复制粘贴效率低且容易出错。本文详细介绍如何用 Python 实现自动发送邮件,以 QQ 邮箱和 163 邮箱为例,结合大模型生成内容的场景,给出完整的代码示例,包括纯文本邮件、HTML 邮件、附件发送等功能,帮你快速实现自动化邮件推送。

        在大模型应用场景中,自动发送邮件可以解决以下痛点:

        1. 自动化报告生成:将大模型生成的数据分析报告、技术文档自动发送给相关人员;
        2. 代码推送:将大模型生成的代码自动发送给开发团队;
        3. 通知提醒:将大模型生成的异常检测结果、预警信息自动发送给运维人员;
        4. 批量处理:一次性将大模型生成的多份内容发送给不同收件人。

        Python 的smtplibemail库可以轻松实现邮件发送功能,结合大模型 API(如 OpenAI、Ollama),可以实现从内容生成到邮件发送的全流程自动化。

        在使用 Python 发送邮件前,需要开启邮箱的 SMTP 服务,并获取授权码(而非邮箱密码)。

        1. 登录 QQ 邮箱,点击右上角的 “设置”→“账户”;
        2. 找到 “POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服务”;
        3. 开启 “SMTP 服务”;
        4. 点击 “生成授权码”,按照提示操作,获取授权码。

        1. 登录 163 邮箱,点击右上角的 “设置”→“POP3/SMTP/IMAP”;
        2. 开启 “SMTP 服务”;
        3. 点击 “设置客户端授权密码”,按照提示操作,获取授权码。

        Python 发送邮件主要依赖smtplib(连接 SMTP 服务器)和email(构建邮件内容)两个库。

        代码示例

        import smtplib
        from email.mime.text import MIMEText
        from email.header import Header
         
        def send_text_email(
            smtp_server: str,
            smtp_port: int,
            sender_email: str,
            sender_password: str,
            receiver_email: str,
            subject: str,
            content: str
        ):
            """
            发送纯文本邮件
            :param smtp_server: SMTP服务器地址
            :param smtp_port: SMTP服务器端口
            :param sender_email: 发件人邮箱
            :param sender_password: 发件人邮箱授权码
            :param receiver_email: 收件人邮箱
            :param subject: 邮件主题
            :param content: 邮件内容
            """
            # 构建邮件内容
            message = MIMEText(content, "plain", "utf-8")
            message["From"] = sender_email  # 直接设置邮箱地址,不使用Header包装
            message["To"] = receiver_email  # 直接设置邮箱地址,不使用Header包装
            message["Subject"] = Header(subject, "utf-8")
         
            # 发送邮件
            try:
                with smtplib.SMTP_SSL(smtp_server, smtp_port) as server:
                    server.login(sender_email, sender_password)
                    server.sendmail(sender_email, receiver_email, message.as_string())
                print("纯文本邮件发送成功")
            except Exception as e:
                print(f"纯文本邮件发送失败:{str(e)}")
         
        # 测试代码
        if __name__ == "__main__":
            # QQ邮箱配置
            smtp_server = "smtp.qq.com"
            smtp_port = 465
            sender_email = "your_qq_email@qq.com"
            sender_password = "your_qq_authorization_code"
            receiver_email = "receiver_email@example.com"
            subject = "大模型生成的纯文本邮件"
            content = "这是大模型生成的纯文本邮件内容,用于测试自动发送邮件功能。"
         
            send_text_email(
                smtp_server,
                smtp_port,
                sender_email,
                sender_password,
                receiver_email,
                subject,
                content
            )

        代码示例

        import smtplib
        from email.mime.text import MIMEText
        from email.header import Header
        
        def send_html_email(
            smtp_server: str,
            smtp_port: int,
            sender_email: str,
            sender_password: str,
            receiver_email: str,
            subject: str,
            html_content: str
        ):
            """
            发送HTML邮件
            :param smtp_server: SMTP服务器地址
            :param smtp_port: SMTP服务器端口
            :param sender_email: 发件人邮箱
            :param sender_password: 发件人邮箱授权码
            :param receiver_email: 收件人邮箱
            :param subject: 邮件主题
            :param html_content: HTML格式的邮件内容
            """
            # 构建邮件内容
            message = MIMEText(html_content, "html", "utf-8")
            message["From"] = sender_email  # 直接设置邮箱地址,不使用Header包装
            message["To"] = receiver_email  # 直接设置邮箱地址,不使用Header包装
            message["Subject"] = Header(subject, "utf-8")
        
            # 发送邮件
            try:
                with smtplib.SMTP_SSL(smtp_server, smtp_port) as server:
                    server.login(sender_email, sender_password)
                    server.sendmail(sender_email, receiver_email, message.as_string())
                print("HTML邮件发送成功")
            except Exception as e:
                print(f"HTML邮件发送失败:{str(e)}")
        
        # 测试代码
        if __name__ == "__main__":
            # 163邮箱配置
            smtp_server = "smtp.163.com"
            smtp_port = 465
            sender_email = "your_163_email@163.com"
            sender_password = "your_163_authorization_code"
            receiver_email = "receiver_email@example.com"
            subject = "大模型生成的HTML邮件"
            html_content = """
            <html>
                <body>
                    <h1>大模型生成的HTML邮件</h1>
                    <p>这是大模型生成的HTML邮件内容,用于测试自动发送邮件功能。</p>
                    <p>以下是大模型生成的代码示例:</p>
                    <pre><code>def fibonacci(n):
            if n <= 1:
                return n
            else:
                return fibonacci(n-1) + fibonacci(n-2)
        </code></pre>
                </body>
            </html>
            """
        
            send_html_email(
                smtp_server,
                smtp_port,
                sender_email,
                sender_password,
                receiver_email,
                subject,
                html_content
            )
        

        代码示例

        import smtplib
        from email.mime.text import MIMEText
        from email.mime.multipart import MIMEMultipart
        from email.mime.base import MIMEBase
        from email import encoders
        from email.header import Header
        import os
        
        def send_email_with_attachment(
            smtp_server: str,
            smtp_port: int,
            sender_email: str,
            sender_password: str,
            receiver_email: str,
            subject: str,
            content: str,
            attachment_path: str
        ):
            """
            发送带附件的邮件
            :param smtp_server: SMTP服务器地址
            :param smtp_port: SMTP服务器端口
            :param sender_email: 发件人邮箱
            :param sender_password: 发件人邮箱授权码
            :param receiver_email: 收件人邮箱
            :param subject: 邮件主题
            :param content: 邮件内容
            :param attachment_path: 附件路径
            """
            # 构建邮件内容
            message = MIMEMultipart()
            message["From"] = sender_email  # 直接设置邮箱地址,不使用Header包装
            message["To"] = receiver_email  # 直接设置邮箱地址,不使用Header包装
            message["Subject"] = Header(subject, "utf-8")
        
            # 添加邮件正文
            message.attach(MIMEText(content, "plain", "utf-8"))
        
            # 添加附件
            if os.path.exists(attachment_path):
                filename = os.path.basename(attachment_path)
                with open(attachment_path, "rb") as f:
                    part = MIMEBase("application", "octet-stream")
                    part.set_payload(f.read())
                    encoders.encode_base64(part)
                    part.add_header("Content-Disposition", f"attachment; filename={filename}")
                    message.attach(part)
            else:
                print(f"附件不存在:{attachment_path}")
                return
        
            # 发送邮件
            try:
                with smtplib.SMTP_SSL(smtp_server, smtp_port) as server:
                    server.login(sender_email, sender_password)
                    server.sendmail(sender_email, receiver_email, message.as_string())
                print("带附件的邮件发送成功")
            except Exception as e:
                print(f"带附件的邮件发送失败:{str(e)}")
        
        # 测试代码
        if __name__ == "__main__":
            # QQ邮箱配置
            smtp_server = "smtp.qq.com"
            smtp_port = 465
            sender_email = "your_qq_email@qq.com"
            sender_password = "your_qq_authorization_code"
            receiver_email = "receiver_email@example.com"
            subject = "大模型生成的带附件邮件"
            content = "这是大模型生成的带附件邮件内容,附件是大模型生成的代码文件。"
            attachment_path = "fibonacci.py"
        
            send_email_with_attachment(
                smtp_server,
                smtp_port,
                sender_email,
                sender_password,
                receiver_email,
                subject,
                content,
                attachment_path
            )
        

        结合 Ollama 本地大模型,实现从内容生成到邮件发送的全流程自动化。

        代码示例

        import ollama
        import smtplib
        from email.mime.text import MIMEText
        from email.header import Header
        
        def generate_content_with_ollama(model_name: str, prompt: str) -> str:
            """
            使用Ollama大模型生成内容
            :param model_name: 模型名称
            :param prompt: 提示词
            :return: 大模型生成的内容
            """
            response = ollama.generate(model=model_name, prompt=prompt, stream=False)
            return response["response"]
        
        def send_email(
            smtp_server: str,
            smtp_port: int,
            sender_email: str,
            sender_password: str,
            receiver_email: str,
            subject: str,
            content: str
        ):
            """
            发送邮件
            :param smtp_server: SMTP服务器地址
            :param smtp_port: SMTP服务器端口
            :param sender_email: 发件人邮箱
            :param sender_password: 发件人邮箱授权码
            :param receiver_email: 收件人邮箱
            :param subject: 邮件主题
            :param content: 邮件内容
            """
            message = MIMEText(content, "plain", "utf-8")
            message["From"] = Header(sender_email, "utf-8")
            message["To"] = Header(receiver_email, "utf-8")
            message["Subject"] = Header(subject, "utf-8")
        
            try:
                with smtplib.SMTP_SSL(smtp_server, smtp_port) as server:
                    server.login(sender_email, sender_password)
                    server.sendmail(sender_email, receiver_email, message.as_string())
                print("邮件发送成功")
            except Exception as e:
                print(f"邮件发送失败:{str(e)}")
        
        # 主函数
        if __name__ == "__main__":
            # 大模型配置
            model_name = "llama3:8b"
            prompt = "生成一份Python数据分析报告的大纲,包括数据收集、数据清洗、数据分析、数据可视化、报告总结等部分。"
        
            # 生成内容
            content = generate_content_with_ollama(model_name, prompt)
            print(f"大模型生成的内容:n{content}")
        
            # 邮件配置
            smtp_server = "smtp.qq.com"
            smtp_port = 465
            sender_email = "your_qq_email@qq.com"
            sender_password = "your_qq_authorization_code"
            receiver_email = "receiver_email@example.com"
            subject = "大模型生成的Python数据分析报告大纲"
        
            # 发送邮件
            send_email(
                smtp_server,
                smtp_port,
                sender_email,
                sender_password,
                receiver_email,
                subject,
                content
            )
        

        问题:发送邮件时提示 “535 Login Fail. Please enter your authorization code to login.”解决方案:检查授权码是否正确,确保使用的是授权码而非邮箱密码。

        问题:发送邮件时提示 “Connection refused”解决方案:检查 SMTP 服务器端口是否正确,QQ 邮箱和 163 邮箱的 SMTP 端口通常为 465(SSL)或 587(TLS)。

        问题:邮件发送成功但收件人未收到解决方案:检查邮件内容是否包含敏感词汇,避免被垃圾邮件过滤器拦截;可以在邮件中添加退订链接,提高邮件可信度。

        Python 的smtplibemail库可以轻松实现邮件发送功能,结合大模型生成内容的场景,可以实现从内容生成到邮件发送的全流程自动化。本文以 QQ 邮箱和 163 邮箱为例,给出了纯文本邮件、HTML 邮件、附件邮件的代码示例,并结合 Ollama 大模型实现了内容生成与邮件发送的自动化。希望本文对你有所帮助,让你在大模型应用场景中实现自动化邮件推送。

        以上就是使用Python实现自动发送邮件的实战指南(以QQ/163为例)的详细内容,更多关于Python QQ/163自动发送邮件的资料请关注风君子博客其它相关文章!

        您可能感兴趣的文章:

        • Python实现Excel批量处理+邮件自动发送的全流程
        • 基于Python+smtplib实现邮件自动发送功能
        • Python编写邮件自动发送工具的完整指南
        • Python使用smtplib库开发一个邮件自动发送工具
        • 使用Python构建带GUI的邮件自动发送工具

        站内搜索