gpt4 book ai didi

Perl MIME::Lite 正在分解 HTML 主体

转载 作者:行者123 更新时间:2023-12-02 04:21:29 25 4
gpt4 key购买 nike

早在 2004 年,我就用 MIME::Lite 编写了一个 Perl 电子邮件程序,从那时起它就一直在工作。直到现在客户端才尝试用它发送 HTML。以下代码(精简到重要部分)正确设置所有值。 HTML 正文作为 text/html 附加。在附加之前,数据显然没有 CR(CRLF 或 LF)。但是在附加它之后,HTML确实有一个嵌入的 CR。这似乎是在 1000 个字符之后添加的。

不幸的是,它落在标签中间,从而破坏了在收件人电子邮件中呈现为标签的标签,而不是完全呈现为格式化文本:<BR>显示为< BR> 。而且它并没有破坏特定的标签。我可以更改标签,并且它总是围绕相同的字符位置中断。我已经通读了 MIME::Lite 代码(用我非常生疏的 Perl 技能),但我不知道它将在哪里执行此拆分操作。

use MIME::Lite; # v3.030

my $bodyWithNoCR = "<html>" . ("x" x 1020) . "</html>";

my $mime_msg = MIME::Lite->new(
From => '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7e063e06501d1113" rel="noreferrer noopener nofollow">[email protected]</a>',
To => '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e199a199cf828e8c" rel="noreferrer noopener nofollow">[email protected]</a>',
Subject => 'Subject',
Type =>'multipart/mixed')
or die "$!\n";

$mime_msg->attach(
Type => 'text/html',
Data => $bodyWithNoCR)
or die "$!\n";

my $bodyWithCR = $mime_msg->as_string;

这不仅仅是 as_string其中显示了这一点,Net::SMTP 转储显示了跨行分割的 HTML,这反射(reflect)在收件人的电子邮件客户端中。

我知道 MIME::Lite 被认为是有缺陷的。但我的问题是这个具体问题是否得到认可(最好引用跟踪器 ID)。 “是的,我已经看到了”的回答很有帮助,但(恭敬地)不足以确认这是旧代码中的已知问题。如果我可以找到此问题的跟踪器项目,那么我就会知道是否可以寻找补丁,或者是否需要向用户建议此特定代码不能用于此特定目的。

任何人都可以建议 attach() 的替代代码吗?这可能会导致它避免任何破坏 block 的东西?

至于使用其他工具(预期的响应),多年后我用 PHPMailer 为其他客户端重写了这一切,但 API 不同,客户端重新工具使用它会很麻烦。我还可以用其他东西替换 MIME::Lite (按照维护者的建议),但在旧的 Linux 机器上,对依赖链的要求可能会阻止加载任何更新的内容。也就是说,欢迎使用 MIME::Lite 的替代方法。

目前没有更好的解决方案,唯一正在考虑的解决方法(但根本不喜欢)是构建包含 980-1020、1980-2020 等列中嵌入空格的 HTML,这样即使 CR嵌入后,空白在收件人的邮件客户端中不可见。 (是啊,恶心!)

最佳答案

我相信this可能与正在发生的事情有关:

#------------------------------
#
# encode_8bit STRING
#
# Encode the given string using 8BIT.
# This breaks long lines into shorter ones.

sub encode_8bit {
my $str = shift;
$str =~ s/^(.{990})/$1\n/mg;
$str;
}

关于Perl MIME::Lite 正在分解 HTML 主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30132933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com