2010-11-07 88 views
1

我在使用perl發送郵件時遇到問題。當我輸入以下命令: my $ smtp = Net :: SMTP-> new($ ServerName,Debug => 0); $ ServerName =「localhost」。 $ smtp沒有設置。它是空的。有人可以告訴我爲什麼它沒有適當設置的原因。由於相同的腳本正在我的其他Linux服務器上運行。在Linux上使用perl發送SMTP郵件的郵件

幫助是真正的讚賞。

感謝 DD

回答

0

您是否嘗試過啓用調試?

$smtp = Net::SMTP->new(
Host => 'mailhost', 
Hello => 'my.mail.domain', 
Timeout => 30, 
Debug => 1, 
); 

然後看看調試輸出說什麼。

+0

是的,我試過..可惜沒有現身在控制檯上。我相信它通過應該打印在控制檯上的stderr寫入。請介意幫助我跟蹤調試日誌? – user343283 2010-11-07 16:00:26

+0

好的,如果可以的話,我會嘗試重現您的問題,然後發佈更多。 – sleske 2010-11-07 16:21:05

+0

是的,顯然「調試」不報告任何錯誤。奇怪的 :/。 – sleske 2010-11-07 22:53:57

2

Net::SMTP,看起來,它的錯誤處理方式非常不盡人意。 你能做的最好的是:

my $smtp = Net::SMTP->new($ServerName) 
      or die "Unable to connect to SMTP server '$ServerName'"; 

即使經過Debug => 1顯得無能爲力時,它不能創建對象。

超過三年沒有新版本的libnet(包括Net :: SMTP)。有一個從2010年5月這也似乎有一些改善一個developer release:它documents

On failure undef will be returned and [email protected] will contain the reason for the failure.

(最近的適當的釋放並沒有這樣做。)

如果你願意嘗試安裝該開發者版本,你可以提高你的代碼:

my $smtp = Net::SMTP->new($ServerName) 
      or die "Unable to connect to SMTP server '$ServerName': [email protected]"; 

可能的原因您的連接失敗:

  • $服務器名稱不是一個有效的主機名
  • 在$服務器名稱
  • 沒有運行SMTP服務的服務器並不像標準問候語,localhost.localdomain。將Hello => 'your.fully.qualified.host.name'傳遞給構造函數。

您可以嘗試連接到命令行上的SMTP服務器,在那裏你想運行此腳本的主機上:

$ telnet smtp.example.com 
EHLO localhost.localdomain 
quit 
+1

感謝朋友。實際上sendmail服務沒有運行。調試信息不​​會拋出任何使生活痛苦以認同這樣一個愚蠢問題的錯誤是非常奇怪的。 – user343283 2010-11-07 17:08:34