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 } );