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脚本测试:
查看是否有GPG相关的报错,比如找不到密钥、权限不足等。sudo -u www-data python3 /var/www/vhosts/your-domain/httpdocs/test.py
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
相关产品推荐
相关产品推荐

