Perl SMTP-停止工作,但我';我不知道为什么[IO::Socket::SSL?]

Perl SMTP-停止工作,但我';我不知道为什么[IO::Socket::SSL?],perl,ssl,smtp,Perl,Ssl,Smtp,我真的被这个弄糊涂了!我们有一个向客户发送发票的电子邮件系统,直到大约一个月前,该系统运行良好。有几个人联系我要发票,我觉得有点奇怪。无论如何,我看了一下剧本,它似乎停止发送了!(它挂在$smtp->data($email);行) 代码如下: my $to = qq|"Andy" <andy.newby\@gmail.com>|; my $subject_val = "test subject"; my $write_path = "/srv/www/mysite

我真的被这个弄糊涂了!我们有一个向客户发送发票的电子邮件系统,直到大约一个月前,该系统运行良好。有几个人联系我要发票,我觉得有点奇怪。无论如何,我看了一下剧本,它似乎停止发送了!(它挂在
$smtp->data($email);
行)

代码如下:

my $to          = qq|"Andy" <andy.newby\@gmail.com>|;
my $subject_val = "test subject";

my $write_path = "/srv/www/mysite.net/www/cgi-bin/admin/invoice_pdfs/new/pdf_versions/$order->{amazon_order_id}.pdf";
my $file_name  = "$order->{amazon_order_id}.pdf";

if (!-e $write_path) {
    print qq|PDF doesn't seem to exist yet! SKIPPING ($write_path) \n|;
    next;
}

print "TO: $to \n";

my $to          = qq|"$order->{buyer_name}" <andy.newby\@gmail.com>|;
my $subject_val = sprintf($languages->{subject}->{$lang},$order->{amazon_order_id});

my $write_path = "/srv/www/mysite.net/www/cgi-bin/admin/invoice_pdfs/new/pdf_versions/$order->{amazon_order_id}.pdf";
my $file_name  = "$order->{amazon_order_id}.pdf";

my $msg = MIME::Lite->new(
    Type     => 'multipart/mixed',
    Subject  => $subject_val,
    To => $to,
    From => $from
);

# create a sub-part
my $part = MIME::Lite->new(
    Type => 'multipart/alternative',
);

my $att_html = MIME::Lite->new(
    Type     => 'text',
    Data     => "text version",
    Encoding => 'quoted-printable',
);
$att_html->attr('content-type' => 'text/plain; charset=iso-8859-1');
$part->attach($att_html);

my $att_text = MIME::Lite->new(
    Type     => 'text',
    Data     => "html version",
    Encoding => 'quoted-printable',
);
$att_text->attr('content-type' => 'text/html; charset=iso-8859-1');
$part->attach($att_text);

$msg->attach($part);

$msg->attach(
     Type     =>'application/pdf',
     Path     => $write_path,
     Filename => $file_name,
     Disposition => 'attachment'
);

my $email = $msg->as_string();

# now do the sending...
my $smtp = Net::SMTP->new('smtp.gmail.com',
                       Hello => 'steampunkjunkies.net',
                       Timeout => 30,
                       Debug   => 1,
                       SSL     => 1
                      ) || die "Error: $!";

$smtp->auth($CFG->{db_smtp_user}, $CFG->{db_smtp_pass}) or die "Could not authenticate with mail.\n";

$smtp->mail($from); # from addr
$smtp->to($to);
$smtp->bcc('myemail@gmail.com');
$smtp->data($email); # It hangs here
$smtp->quit();
如果我把那个部分注释掉,它可以正常工作(但显然没有附件!!!)。以下是来自Net::SMTP的调试:

Net::SMTP::\u SSL>>Net::SMTP::\u SSL
Net::SMTP::_SSL>>>IO::Socket::SSL(2.019)
Net::SMTP::_SSL>>>IO::Socket::IP(0.32)
Net::SMTP::_SSL>>>IO::套接字(1.38)
Net::SMTP::_SSL>>>IO::Handle(1.35)
Net::SMTP::_SSL>>>导出程序(5.71)
Net::SMTP::_SSL>>>Net::SMTP(3.10)
Net::SMTP::_SSL>>>Net::Cmd(3.10)
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>EHLO-steampunkjunkies.Net
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>MIME版本:1.0
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>X-Mailer:MIME::Lite 3.030(F2.85;T2.11;A2.13;B3.15;Q3.13)
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>日期:2016年12月5日星期一08:59:21+0000
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>主题:测试主题
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>收件人:“Andy”
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>发件人:蒸汽朋克瘾君子
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>这是一个MIME格式的多部分消息。
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>-->------=_148092836161299110
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>内容传输编码:二进制
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>内容类型:多部分/可选;boundary=“134;---------=14809283616129911”
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>MIME版本:1.0
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>X-Mailer:MIME::Lite 3.030(F2.85;T2.11;A2.13;B3.15;Q3.13)
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>日期:2016年12月5日星期一08:59:21+0000
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>这是一个MIME格式的多部分消息。
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>-->------=_14809283616129911
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>内容处置:内联
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>内容传输编码:带引号的可打印
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>内容类型:文本/普通;字符集=iso-8859-1
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>MIME版本:1.0
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>X-Mailer:MIME::Lite 3.030(F2.85;T2.11;A2.13;B3.15;Q3.13)
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>日期:2016年12月5日星期一08:59:21+0000
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>纯文本版本
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>-->------=_14809283616129911
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>内容处置:内联
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>内容传输编码:带引号的可打印
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>内容类型:text/html;字符集=iso-8859-1
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>MIME版本:1.0
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>X-Mailer:MIME::Lite 3.030(F2.85;T2.11;A2.13;B3.15;Q3.13)
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>日期:2016年12月5日星期一08:59:21+0000
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>html版本
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>-->------=_14809283616129911--
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>-->------=_148092836161299110
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>内容处置:附件;filename=“205-2876651-1862762.pdf”
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>内容传输编码:base64
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>内容类型:application/pdf;name=“205-2876651-1862762.pdf”
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>jvberi0xljmkmsawig9iago8pcavvhlwzsavq2f0ywxvzwovt3v0bgxmg
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>>miawifikl1bhz2vzidmgmcmbsid4+CmVuZG9iagoyIDAgb2JqCjw8IC9UeXBl
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>IC9PdXRsaW5lcyAvQ291bnQgMCA+PgplbmRvYmoKMyAwIG9iago8PCAvVHlw
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>zsavugfnzxmkl0tpzhmgwzygmcbscjzidagugpdci9db3vudcayci9szxnv
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>DXJJZXMGPDWKL1BB2NTZXQGNCAWIKL0ZVBNQGPDWGCI9GMSA4IDAGUGOV
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>RjIgMTUgMCBSCj4+Ci9YT2JqZWN0IDw8IAovSTEgMjIgMCBSCj4+Cj4+Ci9N
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>zwrpyujvecbmc4wmdagmc4wmdagnjeyljawmca3otiumdawxqogpj4kzw5k
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>B2JQCJQGMCBVYMKWY9QREYGL1RLEHQGL0LTYWDLQYBDCMVUZG9IAGO1IDAG
Net::SMTP::_SSL=GLOB(0x2d3b7a0)>>>b2JqCjw8Ci9Qcm9kdWNlciAo/V8AZABVAG0ACABKAGYAAA8AGUANABIADQA
…base64的其余部分
Net::SMTP::_SSL=GLOB(0x23e9340)>>>bmZvIDUgMCBSCj4+CnN0YXJ0eHJlZgoxNjA5MTk2CiUlRU9GCg==
Net::SMTP::_SSL=GLOB(0x23e9340)>>
Net::SMTP::_SSL=GLOB(0x23e9340)>>>>-->----=_148092924910810--
Net::SMTP::_SSL=GLOB(0x23e9340)>>。
我已经取出base64作为附件,因为那会很长。我能想到的唯一一件事是,Net::SMTP被更新到了一个更新的版本——但我不确定何时/如何做到这一点,因为我是系统管理员(我没有做到)

使用调试器,我得到:

perl -d test.cgi

Loading DB routines from perl5db.pl version 1.44
Editor support available.

Enter h or 'h h' for help, or 'man perldebug' for more help.

Malformed UTF-8 character (unexpected non-continuation byte 0x63, immediately after start byte 0xe9) at test.cgi line 24.
 at test.cgi line 24.
"my" variable $to masks earlier declaration in same scope at test.cgi line 87.
 at test.cgi line 87.
"my" variable $subject_val masks earlier declaration in same scope at test.cgi line 88.
 at test.cgi line 88.
"my" variable $write_path masks earlier declaration in same scope at test.cgi line 90.
 at test.cgi line 90.
"my" variable $file_name masks earlier declaration in same scope at test.cgi line 91.
 at test.cgi line 91.
IO::Socket::SSL::CODE(0x29d3f50)(/usr/local/share/perl/5.20.2/IO/Socket/SSL.pm:192):
192:            INIT { init() }
                                                                                                                                                                                                                                               DB<1> r
void context return from CODE(0x29d3f50)
main::(test.cgi:14):    $| = 1;
                                                                                                                                                                                                                                               DB<1> r
Content-type: text/html; charset=utf-8

Doing: 205-2876651-1862762
TO: Indrek Päri
$VAR1 = 'Indrek Päri';
TO: "Andy" <andy.newby@gmail.com>
r



^X^CIO::Socket::SSL::readline(/usr/local/share/perl/5.20.2/IO/Socket/SSL.pm:1171):
1171:           if ( ! defined $poke or $poke eq '' ) {
perl-dtest.cgi
从perl5db.pl版本1.44加载数据库例程
编辑器支持可用。
输入h或“h”以获取帮助,或输入“man perldebug”以获取更多帮助。
test.cgi第24行出现格式错误的UTF-8字符(意外的非连续字节0x63,紧跟在起始字节0xe9之后)。
在test.cgi第24行。
“my”变量$to屏蔽test.cgi第87行相同范围内的早期声明。
在test.cgi第87行。
“my”变量$subject_val屏蔽test.cgi第88行相同范围内的早期声明。
在test.cgi第88行。
“my”变量$write_path屏蔽test.cgi第90行相同范围内的早期声明。
在test.cgi第90行。
“我的”变量$fi
perl -d test.cgi

Loading DB routines from perl5db.pl version 1.44
Editor support available.

Enter h or 'h h' for help, or 'man perldebug' for more help.

Malformed UTF-8 character (unexpected non-continuation byte 0x63, immediately after start byte 0xe9) at test.cgi line 24.
 at test.cgi line 24.
"my" variable $to masks earlier declaration in same scope at test.cgi line 87.
 at test.cgi line 87.
"my" variable $subject_val masks earlier declaration in same scope at test.cgi line 88.
 at test.cgi line 88.
"my" variable $write_path masks earlier declaration in same scope at test.cgi line 90.
 at test.cgi line 90.
"my" variable $file_name masks earlier declaration in same scope at test.cgi line 91.
 at test.cgi line 91.
IO::Socket::SSL::CODE(0x29d3f50)(/usr/local/share/perl/5.20.2/IO/Socket/SSL.pm:192):
192:            INIT { init() }
                                                                                                                                                                                                                                               DB<1> r
void context return from CODE(0x29d3f50)
main::(test.cgi:14):    $| = 1;
                                                                                                                                                                                                                                               DB<1> r
Content-type: text/html; charset=utf-8

Doing: 205-2876651-1862762
TO: Indrek Päri
$VAR1 = 'Indrek Päri';
TO: "Andy" <andy.newby@gmail.com>
r



^X^CIO::Socket::SSL::readline(/usr/local/share/perl/5.20.2/IO/Socket/SSL.pm:1171):
1171:           if ( ! defined $poke or $poke eq '' ) {
   DB<1> n
^CIO::Socket::SSL::readline(/usr/local/share/perl/5.20.2/IO/Socket/SSL.pm:1171):
1171:           if ( ! defined $poke or $poke eq '' ) {
use Encode; 
my $to = qq|"| . encode("MIME-Q", $order->{buyer_name}) . qq|" <me\@gmail.com>|;
To: "=?UTF-8?Q?=20P=C3=A4ri?=" <me@gmail.com>