在 MacOs 中调用邮件实用程序时转义 link 中的符号时出现问题

Having an issue escaping an ampersand in a link when calling mail utility in MacOs

所以我用 Python 编写了一些自动化代码来填充电子邮件模板字符串,其中一个是 link 到包含字符 & 的 Splunk 查询。一旦我填充了电子邮件,我就会使用传入的 args 创建一个 cmdline 来调用子进程库,如下所示:

pipe = subprocess.Popen(cmdline, stdin=inout, stdout=inout,
                                stderr=inout, close_fds=closefds,
                                preexec_fn=setsid, startupinfo=startupinfo)

现在 cmdline 是一个包含以下内容的列表:

['open', "mailto:comman_separated_emails?cc=dummy_email@gmail.com&subject=My subject&body=Some 
text with the following problem link: 
https://splunk-link.com:443/app/my_app/@go?dispatch_view=alert&s=%2FservicesNS%2Fnobody%2Fapigateway-prod%2Fsaved%2Fsearches%2FAPI%2520Gateway%2520Credential%2520Security%2520Violation%253A%2520Auth%2520Header%2520on%2520HTTP%2520%2528Non%2520SSL%2529%2520-%2520Daily"]

每次打开我的默认邮件提供商(本例中为 Outlook)时,邮件都会在 link 中的 & 处被截断。

我试过将 link 放在双引号和单引号中,用 \&\^& 转义,但还是不行。

有人可以帮助我吗?提前谢谢你。

-布莱恩

&是URL中参数之间的分隔符。您需要将其编码为 %26.

您可以使用urllib.parse.quote()编码所有需要编码的字符。

quoted_link = urllib.parse.quote('https://splunk-link.com:443/app/my_app/@go?dispatch_view=alert&s=%2FservicesNS%2Fnobody%2Fapigateway-prod%2Fsaved%2Fsearches%2FAPI%2520Gateway%2520Credential%2520Security%2520Violation%253A%2520Auth%2520Header%2520on%2520HTTP%2520%2528Non%2520SSL%2529%2520-%2520Daily')
cmdline = ["open", f"""mailto:comman_separated_emails?cc=dummy_email@gmail.com&subject=My subject&body=Some 
text with the following problem link: 
{quoted_link}"""]