Perl 如何通过email::Simple发送电子邮件?

Perl 如何通过email::Simple发送电子邮件?,perl,email,utf-8,smtp,metacpan,Perl,Email,Utf 8,Smtp,Metacpan,我想发电子邮件。我的Email::Simple(模块版本2.216)对象是: Email::Simple { body => \## EXCEPTION MESSAGE RU Error message: Какой-то текст‚ at /home/kes/work/projects/tucha/monkeyman/lib/MaitreD.pm line 75. , header => Email::Simple::Header { headers =>

我想发电子邮件。我的
Email::Simple
(模块版本2.216)对象是:

Email::Simple {
  body => \## EXCEPTION MESSAGE
RU Error message: Какой-то текст‚ at /home/kes/work/projects/tucha/monkeyman/lib/MaitreD.pm line 75.
,
  header => Email::Simple::Header {
    headers => [
      To,
      [
        to@domain,
        To: to@domain,
      ],
      From,
      [
        from@domain,
        From: from@domain,
      ],
      Subject,
      [
        Exception,
        Subject: Exception,
      ],
      Content-Type,
      [
        text/plain; charset="utf8",
        Content-Type: text/plain; charset="utf8",
      ],
      Date,
      Wed, 26 Feb 2020 14:30:39 +0200,
    ],
    mycrlf => 
,
  },
  mycrlf => 
,
}




Net::SMTP::_SSL>>> Net::SMTP::_SSL
Net::SMTP::_SSL>>>   IO::Socket::SSL(2.066)
Net::SMTP::_SSL>>>     IO::Socket::IP(0.39)
Net::SMTP::_SSL>>>       IO::Socket(1.38)
Net::SMTP::_SSL>>>         IO::Handle(1.36)
Net::SMTP::_SSL>>>           Exporter(5.72)
Net::SMTP::_SSL>>>   Net::SMTP(3.08_01)
Net::SMTP::_SSL>>>     Net::Cmd(3.08_01)
Net::SMTP::_SSL=GLOB(0x10293e98)>>> MAIL FROM:<from@domain>
Net::SMTP::_SSL=GLOB(0x10293e98)<<< 250 2.1.0 <from@domain> ok
Net::SMTP::_SSL=GLOB(0x10293e98)>>> RCPT TO:<to@domain>
Net::SMTP::_SSL=GLOB(0x10293e98)<<< 250 2.1.5 <to@domain> recipient ok
Net::SMTP::_SSL=GLOB(0x10293e98)>>> DATA
Net::SMTP::_SSL=GLOB(0x10293e98)<<< 354 Enter mail, end with "." on a line by itself
H1
Net::SMTP::_SSL=GLOB(0x10293e98)>>> To: to@domain
Net::SMTP::_SSL=GLOB(0x10293e98)>>> From: from@domain
Net::SMTP::_SSL=GLOB(0x10293e98)>>> Subject: Exception
Net::SMTP::_SSL=GLOB(0x10293e98)>>> Content-Type: text/plain; charset="utf8"
Net::SMTP::_SSL=GLOB(0x10293e98)>>> Date: Wed, 26 Feb 2020 14:11:55 +0200
Net::SMTP::_SSL=GLOB(0x10293e98)>>> 
Net::SMTP::_SSL=GLOB(0x10293e98)>>> ## EXCEPTION MESSAGE
Net::SMTP::_SSL=GLOB(0x10293e98)>>> RU Error message: Какой-то текст at /home/kes/work/projects/tucha/monkeyman/lib/MaitreD.pm line 75.
H2
H3
Net::SMTP::_SSL=GLOB(0x10293e98)>>> .
UPD
邮件正文为:

Devel::Peek::Dump( $body )
SV = IV(0xc3ff920) at 0xc3ff930
  REFCNT = 2
  FLAGS = (ROK)
  RV = 0x10d0d530
  SV = PVMG(0x10d36f60) at 0x10d0d530
    REFCNT = 3
    FLAGS = (OBJECT,POK,IsCOW,pPOK,UTF8)
    IV = 0
    NV = 0
    PV = 0x10d69cd0 "## EXCEPTION MESSAGE\nRU Error message: \320\232\320\260\320\272\320\276\320\271-\321\202\320\276 \321\202\320\265\320\272\321\201\321\202 at /home/kes/work/projects/tucha/monkeyman/lib/MaitreD.pm line 75.\n\n"\0 [UTF8 "## EXCEPTION MESSAGE\nRU Error message: \x{41a}\x{430}\x{43a}\x{43e}\x{439}-\x{442}\x{43e} \x{442}\x{435}\x{43a}\x{441}\x{442} at /home/kes/work/projects/tucha/monkeyman/lib/MaitreD.pm line 75.\n\n"]
    CUR = 134
    LEN = 136
    COW_REFCNT = 1
    STASH = 0x35583d0   "Mojo::ByteStream"
当我
Encode::decode('utf8',$body)
我得到错误:

Wide character at ...
当我
Encode::Encode('utf8',$body)

发送

那么一切都好了:

Net::SMTP::_SSL=GLOB(0x10e280e8)>>> .
Net::SMTP::_SSL=GLOB(0x10e280e8)<<< 250 2.0.0 Ok: queued as D83FF102BA8
H4
Net::SMTP::_SSL=GLOB(0x10e280e8)>>。

Net::SMTP::_SSL=GLOB(0x10e280e8)谢谢@smonff。发送前应对正文进行编码:

$body =  Encode::encode( utf8 => $body )
现在我可以发送utf8电子邮件:

my $email =  Email::Simple->create(
    header =>  [
        To             =>  $address,
        From           =>  $cnf->{ from },
        Subject        =>  $subject,
        %$headers,
    ],
    body => $body,
);
my $err =  Email::Sender::Simple->send( $email, { transport => $transport } );

此外,我还发现了一些如何使用
utf8

的建议,也许您需要使用
$body
?您也可以
使用Try::Tiny
使用Email::Sender::Simple qw(sendmail)
并执行类似
我的$Email=Email::Simple->create(…);请尝试{sendmail($email)}捕获{warn“发送失败:$\u”}
检索更多有用的信息或参阅部分手册。另外,您使用的是哪个版本的
Email::Sender
?和CPAN安装或从操作系统软件包中安装?您是否有机会访问以下内容?完整集:
MIME版本:1.0
内容类型:text/plain;字符集=utf-8
内容传输编码:8bit
。警告:某些SMTP服务器将不接受8位(原始utf-8)编码。太好了。很高兴它有帮助!相反,您应该使用注释中提到的(一个Email::Simple子类)来正确处理此问题,或者将Email::MIME包装在一个更简单的界面中。@grinz:谢谢。是的,
Email::Simple
并不简单,所以我切换到了
Email::Stuffer
Net::SMTP::_SSL=GLOB(0x10e280e8)>>> .
Net::SMTP::_SSL=GLOB(0x10e280e8)<<< 250 2.0.0 Ok: queued as D83FF102BA8
H4
$body =  Encode::encode( utf8 => $body )
my $email =  Email::Simple->create(
    header =>  [
        To             =>  $address,
        From           =>  $cnf->{ from },
        Subject        =>  $subject,
        %$headers,
    ],
    body => $body,
);
my $err =  Email::Sender::Simple->send( $email, { transport => $transport } );