繁体   English   中英

Perl中的电子邮件主题MIME编码。

[英]Email subject MIME encoding in Perl.

我试图在Perl 5.8.5下的主题行中发送包含非ASCII字符的电子邮件。 我的简单示例使用了单词“Änderungen”(德语为umlaut),但未正确转换为“Ä”,主题行始终显示为“Ã?nderungen”。

#!/usr/bin/env perl

use warnings;
use strict;
use Encode qw(decode encode);

my $subject = "Änderungen";
my $subject_encoded = encode("MIME-Q", $subject);

[...]

open(MAIL, "| /usr/sbin/sendmail -n -t $recipient") || return "ERROR";
print MAIL 'Content-Type: text/plain; charset="utf-8"\n';
print MAIL "To: $recipient\n";
print MAIL "From: $from\n";
print MAIL "Reply-To: $from\n";
print MAIL "Subject: $subject\n\n";
print MAIL "$body\n\n";
print MAIL ".\n";
close(MAIL);

$ subject_encoded的内容打印为=?UTF-8?Q?=C3=83=C2=84nderungen?=而在线编码器工具显示它实际上应为=?UTF-8?Q?=C3=84nderungen?=

当使用后一种编码手动构造主题字符串时,邮件主题将在我的电子邮件软件中正确显示“Änderungen”,因此问题似乎出在实际的Perl编码命令上。 我正在尝试使用带引号的可打印编码,但是通过MIME-B和MIME-Header进行编码也会导致“Ã?nderungen”的错误表示。

我确实检查了我的代码文件的文件格式,并且字符集也返回为utf-8。 因此,我很茫然,为什么Perl显然以错误的方式编码它。 有什么想法或我可能会忽略的东西吗?

您的编辑器将该文件视为UTF-8,因此显示

my $subject = "Änderungen";

Perl有效地将该文件视为iso-8859-1,因此可以看到

my $subject = "Ã?nderungen";

通过添加以下内容告诉Perl您使用UTF-8编码了脚本

use utf8;

在您的问题中,您声明:

my $subject_encoded = encode("MIME-Q", $subject);

但是您以后没有使用它。

print MAIL "Subject: $subject\n\n";

应该:

print MAIL "Subject: $subject_encoded\n\n";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM