Perl 使用Net::SMTP发送邮件时使用SMTP 450

Perl 使用Net::SMTP发送邮件时使用SMTP 450,perl,email,smtp,Perl,Email,Smtp,所以 我无法从Perl脚本发送邮件。这就是我的代码的样子: use Net::SMTP; $smtp = Net::SMTP->new("smtpserver.mydomain.com"); $smtp->mail("myemail\@mydomain.com"); $smtp->to("myemail\@mydomain.com"); $smtp->data(); $smtp->datasend("Fr

所以

我无法从Perl脚本发送邮件。这就是我的代码的样子:

use Net::SMTP;
$smtp = Net::SMTP->new("smtpserver.mydomain.com");
$smtp->mail("myemail\@mydomain.com");
$smtp->to("myemail\@mydomain.com");
$smtp->data();                               
$smtp->datasend("From: myemail\@mydomain.com\n");
$smtp->datasend("To: myemail\@mydomain.com\n");
$smtp->datasend("Subject: Test message\n");
$smtp->datasend("Just a test message.\n");
$smtp->dataend();                   
$smtp->quit;
这是调试选项抛出的内容:

Net::SMTP>>> Net::SMTP(2.31)
Net::SMTP>>>   Net::Cmd(2.29)
Net::SMTP>>>     Exporter(5.64_03)
Net::SMTP>>>   IO::Socket::INET(1.31)
Net::SMTP>>>     IO::Socket(1.32)
Net::SMTP>>>       IO::Handle(1.31)
Net::SMTP=GLOB(0x1d1a06c)<<< 220 ESMTP Postfix
Net::SMTP=GLOB(0x1d1a06c)>>> EHLO localhost.localdomain
Net::SMTP=GLOB(0x1d1a06c)<<< 250-
Net::SMTP=GLOB(0x1d1a06c)<<< 250-PIPELINING
Net::SMTP=GLOB(0x1d1a06c)<<< 250-SIZE
Net::SMTP=GLOB(0x1d1a06c)<<< 250-ETRN
Net::SMTP=GLOB(0x1d1a06c)<<< 250-STARTTLS
Net::SMTP=GLOB(0x1d1a06c)<<< 250-ENHANCEDSTATUSCODES
Net::SMTP=GLOB(0x1d1a06c)<<< 250-8BITMIME
Net::SMTP=GLOB(0x1d1a06c)<<< 250 DSN
Net::SMTP=GLOB(0x1d1a06c)>>> MAIL FROM:<myemail@mydomain.com>
Net::SMTP=GLOB(0x1d1a06c)<<< 250 2.1.0 Ok
Net::SMTP=GLOB(0x1d1a06c)>>> RCPT TO:<myemail@mydomain.com>
Net::SMTP=GLOB(0x1d1a06c)<<< 450 4.7.1 <localhost.localdomain>: Helo command rejected: Service temporarily unavailable
Net::SMTP=GLOB(0x1d1a06c)>>> DATA
Net::SMTP=GLOB(0x1d1a06c)<<< 554 5.5.1 Error: no valid recipients
Net::SMTP=GLOB(0x1d1a06c)>>> From: myemail@mydomain.com
Net::SMTP=GLOB(0x1d1a06c)>>> To: myemail@mydomain.com
Net::SMTP=GLOB(0x1d1a06c)>>> Subject: Test message
Net::SMTP=GLOB(0x1d1a06c)>>> Just a test message.
Net::SMTP=GLOB(0x1d1a06c)>>> .
Net::SMTP=GLOB(0x1d1a06c)<<< 221 2.7.0 Error: I can break rules, too. Goodbye.
Net::SMTP=GLOB(0x1d1a06c)>>> QUIT
Net::SMTP>>Net::SMTP(2.31)
Net::SMTP>>>Net::Cmd(2.29)
Net::SMTP>>>导出程序(5.64_03)
Net::SMTP>>>IO::Socket::INET(1.31)
Net::SMTP>>>IO::套接字(1.32)
Net::SMTP>>>IO::Handle(1.31)
Net::SMTP=GLOB(0x1d1a06c)>EHLO localhost.localdomain
Net::SMTP=GLOB(0x1d1a06c)>>。
Net::SMTP=GLOB(0x1d1a06c)>退出
有趣的是,当我直接与SMTP服务器交谈时,SMTP服务器回复250 OK,我收到的邮件很好:

220 ESMTP Postfix
MAIL FROM:<myemail@mydomain.com>
250 2.1.0 Ok
RCPT TO:<myemail@mydomain.com>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Just a test message.
.
250 2.0.0 Ok: queued as B68672C02B
220 ESMTP后缀
邮寄地址:
250 2.1.0正常
RCPT至:
250 2.1.5正常
资料
354使用结束数据。
只是一条测试信息。
.
250 2.0.0正常:作为B68672C02B排队
有人有灯光可以照亮吗


提前感谢。

只需将此作为答案发布,这样就可以按照triplee的要求将其作为答案接受

域设置中可能有问题

还添加$smtp->datasend(“\n”);在$smtp->datasend下面(“主题:测试邮件\n”);在新行中,否则将不显示mesage文本

像这样

    $smtp->datasend("Subject: Test message\n");
    $smtp->datasend("\n");
    $smtp->datasend("Just a test message.\n");
SMTP服务器(后缀)“不喜欢”在
EHLO
命令中使用的主机名,但在答复
RCPT to:
命令时拒绝该主机名

>>> MAIL FROM:<myemail@mydomain.com>
<<< 250 2.1.0 Ok
....
>>> RCPT TO:<myemail@mydomain.com>
<<< 450 4.7.1 <localhost.localdomain>: Helo command rejected: Service temporarily unavailable

450通常是“服务器无法访问邮箱以传递邮件”您是否尝试发送其他邮件地址?只是尝试了。同样的结果。Perl脚本不起作用,SMTP起作用了。我使用了它,它也起作用了,您的域设置可能有问题。哦,还要添加$SMTP->datasend(“\n”);在$smtp->datasend下面(“主题:测试邮件\n”);在新行中,否则它将不显示mesage文本。您做到了。你给了我需要的暗示。这是域设置。我不得不使用$smtp->hello(“smtpserver.mydomain.com”)方法。我以前没有这样做,因为perldoc说:“由于此方法是在构造Net::SMTP对象时自动调用的,因此用户通常不必手动调用它。”这似乎是一个异常情况,我完全同意:)非常感谢您的时间。
$smtp = Net::SMTP->new('smtpserver.mydomain.com', Hello => 'host.example.net');