2013-07-09 66 views
0

電子郵件發送在Perl中,但在shell中工作。我的shell腳本是否正確?電子郵件發送通過Perl腳本,但不是shell腳本

如果Perl腳本是工作的,看起來像服務器SMTP conf是正確的。我怎樣才能找出是什麼導致電子郵件不能在shell腳本中工作?

My perl script:

#!/usr/bin/perl -w 

use strict; 
use warnings; 
use Net::SMTP; 

sub sendmail(); 

my $email  = '[email protected]'; 
my $smtp_server = '10.233.1.199'; 

sub sendmail() { 
    my $s = Net::SMTP->new($smtp_server); 
    $s->mail($email); 
    $s->to($email); 
    $s->data(); 
    $s->datasend("Subject: Test"); 
    $s->datasend("\n"); 
    $s->datasend("Testing\n"); 
    $s->dataend(); 
    $s->quit; 
} 
sendmail(); 

Shell script:

#!/bin/sh 

SUBJECT="some subject" 
smtp=10.233.1.199 
[email protected] 
echo "some message" | mailx -s "$SUBJECT" "$EMAIL" 
+1

Shell腳本看起來沒有錯誤。但假設您的示例代碼中包含虛擬數據,那麼您的變量的實際值可能存在問題。我很驚訝你的'smtp'變量有任何作用。可能導出它?此外,全部帽子更典型。或者完全評論它。查看郵件代理是否發回了錯誤響應? '郵件'。祝你好運。 – shellter

+0

是出口做的伎倆。謝謝 !! – iaav

回答

0

你要導出smtp變量,否則mailx不會看到它。就像這樣:

#!/bin/sh 

SUBJECT="some subject" 
export smtp=10.233.1.199 
[email protected] 
echo "some message" | mailx -s "$SUBJECT" "$EMAIL" 

者均基於smtp變量沒有man mailx在我的系統,也沒有在其他的Linux系統中提到我有機會獲得。但我發現它在an answer on superuser.com中提到過。也就是說,我不確定這是否適用於man mailx中未提及的系統,但如果它對您有用,那很好。