Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
错误:将smtp与perl一起使用时需要MAIL命令_Perl_Email_Smtp_Amazon Ses_Smtp Auth - Fatal编程技术网

错误:将smtp与perl一起使用时需要MAIL命令

错误:将smtp与perl一起使用时需要MAIL命令,perl,email,smtp,amazon-ses,smtp-auth,Perl,Email,Smtp,Amazon Ses,Smtp Auth,我尝试使用Mime::Lite perl模块和smtp身份验证发送电子邮件。但不幸的是,这不起作用。它表明 错误:需要邮件命令,错误:命令未实现 以下是更新的代码段和调试输出 #!/usr/bin/perl use warnings; use strict; use MIME::Lite; use Net::SMTP; use MIME::Base64; my $smtp = Net::SMTP->new(<mail host>,Port=>587,Debug=>

我尝试使用Mime::Lite perl模块和smtp身份验证发送电子邮件。但不幸的是,这不起作用。它表明

错误:需要邮件命令,错误:命令未实现

以下是更新的代码段和调试输出

#!/usr/bin/perl
use warnings;
use strict;
use MIME::Lite;
use Net::SMTP;
use MIME::Base64;


my $smtp = Net::SMTP->new(<mail host>,Port=>587,Debug=>1)or die;
$smtp->starttls();
$smtp->auth($username,$password) or die $!;
my $msg = MIME::Lite -> new ( 
  From  => 'from@mail.com',
  TO    => 'to@mail.com', 
  Subject  => 'Testing Text Message',
  Data     => 'How\'s it going.' );

$smtp->mail(<from mail>);
$smtp->to(<to mail>);
$smtp -> data();
$smtp -> datasend( $msg->as_string() );
$smtp -> dataend(); 
print $smtp ->message();
$smtp -> quit;
#/usr/bin/perl
使用警告;
严格使用;
使用MIME::Lite;
使用Net::SMTP;
使用MIME::Base64;
我的$smtp=Net::smtp->new(,Port=>587,Debug=>1)或die;
$smtp->starttls();
$smtp->auth($username,$password)或die$!;
my$msg=MIME::Lite->new(
From=>'from@mail.com',
TO=>'to@mail.com', 
主题=>“测试短信”,
数据=>“情况如何?”);
$smtp->mail();
$smtp->to();
$smtp->data();
$smtp->datasend($msg->as_string());
$smtp->dataend();
打印$smtp->message();
$smtp->退出;
调试输出:

Net::SMTP>>> Net::SMTP(3.10)
Net::SMTP>>>   Net::Cmd(3.10)
Net::SMTP>>>     Exporter(5.68)
Net::SMTP>>>   IO::Socket::INET6(2.71)
Net::SMTP>>>     IO::Socket(1.36)
Net::SMTP>>>       IO::Handle(1.34)
Net::SMTP=GLOB(0x1e0a920)<<< 220 email-smtp.amazonaws.com ESMTP SimpleEmailService-2108164273 5RjAQr5ZFI284sDt1KWu
Net::SMTP=GLOB(0x1e0a920)>>> EHLO localhost.localdomain
Net::SMTP=GLOB(0x1e0a920)<<< 250-email-smtp.amazonaws.com
Net::SMTP=GLOB(0x1e0a920)<<< 250-8BITMIME
Net::SMTP=GLOB(0x1e0a920)<<< 250-SIZE 10485760
Net::SMTP=GLOB(0x1e0a920)<<< 250-STARTTLS
Net::SMTP=GLOB(0x1e0a920)<<< 250-AUTH PLAIN LOGIN
Net::SMTP=GLOB(0x1e0a920)<<< 250 Ok
Net::SMTP=GLOB(0x1e0a920)>>> STARTTLS
Net::SMTP=GLOB(0x1e0a920)<<< 220 Ready to start TLS
Net::SMTP::_SSL=GLOB(0x1e0a920)>>> EHLO localhost.localdomain
Net::SMTP::_SSL=GLOB(0x1e0a920)<<< 250-email-smtp.amazonaws.com
Net::SMTP::_SSL=GLOB(0x1e0a920)<<< 250-8BITMIME
Net::SMTP::_SSL=GLOB(0x1e0a920)<<< 250-SIZE 10485760
Net::SMTP::_SSL=GLOB(0x1e0a920)<<< 250-STARTTLS
Net::SMTP::_SSL=GLOB(0x1e0a920)<<< 250-AUTH PLAIN LOGIN
Net::SMTP::_SSL=GLOB(0x1e0a920)<<< 250 Ok
Died at test_script.pl line 17.
Net::SMTP>>Net::SMTP(3.10)
Net::SMTP>>>Net::Cmd(3.10)
Net::SMTP>>>导出程序(5.68)
Net::SMTP>>>IO::Socket::INET6(2.71)
Net::SMTP>>>IO::套接字(1.36)
Net::SMTP>>>IO::Handle(1.34)
Net::SMTP=GLOB(0x1e0a920)>EHLO localhost.localdomain

Net::SMTP=GLOB(0x1e0a920)您的代码没有任何错误检查,这就是您错过身份验证失败的原因:


您的代码没有任何错误检查,这就是您错过身份验证失败的原因:


您的代码中没有任何错误处理。我猜在您发出
$smtp->mail(…)
之前,有些东西失败了,例如身份验证失败。请将调试添加到您的代码中(即在调用
Net::SMTP_auth->new
时添加
Debug=>1
),并在问题中包含完整的调试输出。1)为什么使用
Net::SMTP_auth
而不是
Net::SMTP
?当前版本的
Net::SMTP
支持SMTP身份验证。2) 将
,Debug=>1)
添加到
Net::SMTP
构造函数(新)以获取SMTP会话的副本。@SteffenUllrich感谢您的评论。我已将调试输出添加到问题中,请让我知道如何修复此问题您的代码中没有任何错误处理。我猜在您发出
$smtp->mail(…)
之前,有些东西失败了,例如身份验证失败。请将调试添加到您的代码中(即在调用
Net::SMTP_auth->new
时添加
Debug=>1
),并在问题中包含完整的调试输出。1)为什么使用
Net::SMTP_auth
而不是
Net::SMTP
?当前版本的
Net::SMTP
支持SMTP身份验证。2) 将
,Debug=>1)
添加到
Net::SMTP
构造函数(新)以获取SMTP会话的副本。@SteffenUllrich感谢您的评论。我已将调试输出添加到问题中,请让我知道如何修复此问题。我们使用Net::SMTP版本3.10,现在它不会显示任何错误,但会在$SMTP->auth('LOGIN','')或die处停止@Sayooj:查看有关如何使用Net::SMTP的最新答案:首先需要调用
starttls
,然后需要以不同的方式调用
auth
。正如您所提到的,我已经尝试过,先调用
starttls
,然后以不同的方式调用
auth
。但结果是一样的。你能分享一下这个项目的代码片段吗same@Sayooj:如果用正确的值替换
etc,则我给出的示例代码对我有效。刚刚用
mail.gmx.net:587
对它进行了测试。我猜您缺少SASL模块(
Authen::SASL
),因为它不尝试根据调试输出进行身份验证。我们使用Net::SMTP版本3.10,现在它不显示任何错误,而是停止在$SMTP->auth('LOGIN','')或死亡@Sayooj:查看有关如何使用Net::SMTP的最新答案:首先需要调用
starttls
,然后需要以不同的方式调用
auth
。正如您所提到的,我已经尝试过,先调用
starttls
,然后以不同的方式调用
auth
。但结果是一样的。你能分享一下这个项目的代码片段吗same@Sayooj:如果用正确的值替换
etc,则我给出的示例代码对我有效。刚刚用
mail.gmx.net:587
对它进行了测试。我猜您缺少SASL模块(
Authen::SASL
),因为它不尝试根据调试输出进行身份验证。
Net::SMTP_auth=GLOB(0x13085a8)>>> AUTH LOGIN
Net::SMTP_auth=GLOB(0x13085a8)<<< 530 Must issue a STARTTLS command first
my $smtp = Net::SMTP->new( '<emailhost>') or die;
$smtp->starttls or die;
$smtp->auth('<username>', '<password>') or die;
...