You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP脚本调用Python Envelope发加密邮件:浏览器运行失败求助

PHP调用Python Envelope库发加密邮件:终端正常但浏览器访问失败的排查方案

以下是针对问题的核心排查方向和解决步骤:

1. 权限与用户身份差异

终端运行脚本用的是你的个人用户,而浏览器访问时,PHP由web服务器用户(比如www-data、apache或nginx)执行,两者权限完全不同:

  • 检查Python脚本和附件文件text.txt的权限,确保web服务器用户有读取权限:
    chmod o+r /var/www/vhosts/your-domain/httpdocs/test.py /var/www/vhosts/your-domain/httpdocs/text.txt
    
  • 确认Envelope库在web服务器用户环境中已安装:终端的pip可能只给个人用户装了库,web服务器用户找不到。执行以下命令给web服务器用户安装:
    sudo -u www-data pip3 install envelope
    

2. 环境变量与路径问题

web服务器的环境变量远少于终端,容易出现路径找不到的情况:

  • 用Python的绝对路径执行脚本:先在终端执行which python3得到完整路径(比如/usr/bin/python3),然后修改PHP脚本:
    <?php
    // 替换成你实际的Python绝对路径,同时添加2>&1捕获错误输出
    $check = shell_exec("/usr/bin/python3 /var/www/vhosts/your-domain/httpdocs/test.py 2>&1");
    print_r($check);
    ?>
    
  • 附件用绝对路径:Python脚本里的text.txt是相对路径,web服务器的工作目录不是脚本所在目录,会找不到文件。修改为:
    file_path_attachment = "/var/www/vhosts/your-domain/httpdocs/text.txt"
    

3. 加密依赖检查

Envelope的encryption()方法依赖GPG工具,确保web服务器用户能访问GPG,且有对应的加密密钥:

  • 切换到web服务器用户,手动运行Python脚本测试:
    sudo -u www-data python3 /var/www/vhosts/your-domain/httpdocs/test.py
    
    查看是否有GPG相关的报错,比如找不到密钥、权限不足等。

4. 错误捕获优化

修改Python脚本添加异常捕获,方便定位问题:

#!/usr/bin/env python3
from envelope import Envelope
import sys

try:
    email_message = "Hello World"
    EMAIL_FROM = "你的发件邮箱"
    email_address_recipient = "收件邮箱"
    file_path_attachment = "/var/www/vhosts/your-domain/httpdocs/text.txt"
    print(email_message)

    e = (Envelope()
         .message(email_message)
         .from_(EMAIL_FROM)
         .to(email_address_recipient)
         .attach(path=file_path_attachment)
         .encryption()      
        )

    e.as_message()
    print("邮件构建成功")
except Exception as e:
    print(f"错误详情: {str(e)}", file=sys.stderr)

内容的提问来源于stack exchange,提问作者user23458706

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 14:06:10