首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Net::SMTP发送邮件时SMTP 450

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

Stack Overflow用户
提问于 2013-06-06 14:58:50
回答 2查看 1.4K关注 0票数 1

所以。

我无法从Perl脚本发送邮件。下面是我的代码:

代码语言:javascript
复制
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;

这是debug选项抛出的内容:

代码语言:javascript
复制
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

有趣的是,当我直接与SMTP服务器对话时,SMTP服务器会回复250 OK,并且我可以正常接收邮件:

代码语言:javascript
复制
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

有没有人有什么要说的?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-06 17:14:22

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

您的域设置中可能有问题。

还要在$smtp->datasend(“\n”)下添加$smtp->datasend("Subject: Test message\n");,否则将不显示消息文本。

就像这样。

代码语言:javascript
复制
    $smtp->datasend("Subject: Test message\n");
    $smtp->datasend("\n");
    $smtp->datasend("Just a test message.\n");
票数 2
EN

Stack Overflow用户

发布于 2013-06-06 20:45:08

在回复RCPT TO:命令时,SMTP服务器(后缀)“不喜欢”EHLO命令中使用的主机名。

代码语言:javascript
复制
>>> 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

通过将Hello参数传递给new,可以在HELO/EHLO命令中使Net::SMTP使用另一个主机名。

代码语言:javascript
复制
$smtp = Net::SMTP->new('smtpserver.mydomain.com', Hello => 'host.example.net');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16955637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档