2017-11-06 19 views
-1

これは私がperlでメールを送信するために使用しているコードです。しかし私はメールを受け取っていませんでした。モジュールを使わずにperlでメールを送る方法は?

私はエラーが発生していませんが、メールが送信されない理由は見つかりません。

私はいくつかの例とフォーラムを試してみましたが、何も効果がありません。これは、サーバーの移行

後に起こっている

私はこの質問を数回に尋ねてきた知っているし、それらのどれも私を助けてくれません。

+0

メール(1)を使用します。あなたのシステムではmailx(1)であるかもしれません。 – jira

+0

このサーバーの移行についてもっと詳しく教えてください。古いオペレーティングシステムと新しいオペレーティングシステムは何でしたか?どのバージョン? 2つのサーバーは同じ場所にありますか?彼らは同じネットワークにいますか? 'mailx'などを使って新しいサーバから手動でメールを送ることはできますか?プログラマーのように考える。問題をデバッグしてください。 –

+0

私は実際にはPHPの男ですが、私はperlに新しいです。プロジェクトはPHPとperlの両方を使用していますが、私はPHPからメールを送ることができますが、perlからメールを送ることはできません –

答えて

0

私はやっとperlスクリプトでphpコマンドを実行しました。

私はPHPでメール機能を書いて、perlからそのファイルにparamsを渡しました。

#!/usr/bin/perl 

print "Content-type: text/html\n\n"; 

use CGI::Carp 'fatalsToBrowser'; 
my $mail = '[email protected]'; 
$mail =~ s/@/%40/g; 
my $sub = 'Subject'; 
$sub =~ s/\s/+/g; 
my $msg = 'Message'; 
$msg =~ s/\s/+/g; 
my $output = `php path-to-php-file 'to=$mail&message=$msg&sub=$sub'`; 

このlinkが私を助けました。

しかし、私は本当にこのようにして悪いと感じました。これは感謝してはならない。

皆様に感謝します。

1

このような何か試してみてください:この行

open MAIL, "| mailx -s '$subject' -r $from $to"; 
print MAIL $mail_message; 
close MAIL; 
0

は、読書のための "は/ usr/sbinに/ sendmailの-t" と呼ばれるファイルを開いています。

open(MAIL, "/usr/sbin/sendmail -t"); 

あなたが戻っ何openチェックしたい場合は、そのファイルが存在しないので、それがエラーを返し見つけるだろう。代わりに、出力をsendmailにパイプしたいとします。ここにあなたのコードがopen

if(open(my $mail, "|-", "/usr/sbin/sendmail -t")) 
    { 
    ## Mail Header 
    print $mail "To: $to\n"; 
    print $mail "From: $from\n"; 
    print $mail "Subject: $subject\n\n"; 
    ## Mail Body 
    print $mail "This is a test message from Cyberciti.biz! You can write your 
mail body text here\n"; 

    close($mail); 
    } 
else 
    { 
    print "open failed: $!\n"; 
    } 
3

を呼び出すより近代的な方法を使ってどのように見えるべきかであるあなたは、常にopen()からの戻り値をチェックし、それが失敗した場合に適切な行動を取る必要があります。この場合

open MAIL, '/usr/sbin/sendmail -t' or die $!; 

のように、あなたは、エラーメッセージが表示されます:私はあなたがよりあなたのコードをコピーしている場所がわからないんだけど

そのようなファイルやディレクトリ

しかし、私はあなたが転写エラーを起こしていると推測しています。 /usr/sbin/sendmail -tというファイルを開こうとしていますが、システムにはそのファイルがありません(特に末尾に-tはありません)。

実際に何をしたいのは、コマンドにパイプを開くことです。

open MAIL, '|/usr/sbin/sendmail -t' or die $!; 

注ファイル名の先頭に|:あなただけの単一の文字を省略しました。

また、裸語の代わりに字句ファイルハンドルを使用することをおすすめします。

open my $mail_fh, '|/usr/sbin/sendmail -t' or die $!; 

しかし、最も重要なことに、なぜモジュールを使用しないでこれを実行しようとしていますか? Perlモジュールは、Perlの力の大きな部分です。モジュールを使用できない場合(そしてCPANから新しいモジュールをインストールする場合)は、Perlプログラミングの容易さの多くを逃してしまいます。あなたの試用版が試用版として利用可能なときに、なぜコードを書き換えるのに時間をかけるのでしょうか?

Perlモジュールの使用を妨げているボトルネックが何であれ、それらを削除するために時間を費やすことをお勧めします。あなたのPerlプログラミングのキャリアははるかに楽しいでしょう。

Perl FAQは、Email::MIMEEmail::Sender::Simpleを推奨します。個人的には、私はほとんどの場合Email::Stufferに行きます。 Email :: *名前空間は良いものです。

+0

私はこのオープンMAIL、 '/ usr/sbin/sendmail -t'またはdie $!しようとしました。そして、sendmailのパスは正しいと思われます。しかし、私はメールを受け取っていませんでした。サーバーのエラーログを確認する方法はありますか?今はモジュールをインストールできません。私はこのための迅速な解決策が必要です –

+0

はい。メールログを確認することができます。しかし、ローカルのシステム管理者にそれがどこにあるのかを尋ねる必要があります。なぜあなたはモジュールをインストールできないと思いますか?それはまれです。 –

+0

プロジェクトが約8〜10年後に終了したので、私はちょうどそれをうまく動作させようとしています。 –

2

モジュールを使用せずにPerlでメールを送信するにはどうすればよいですか?

しないでください。

CPANのモジュールは十分にテストされ、安全です。そして、彼らはあなたが気づいていない問題を世話します。専門家がそれらを避けるための言い訳はありません。

+0

あなたのお気に入りの短い例を追加するのでしょうか? – zdim

+0

@shawnhcorey私はすでにそれが働いているコードであり、修正しようとしていると言いました。 –

+0

それを修正する最善の方法は、実証済みのソフトウェアを使用することです。 – shawnhcorey

関連する問題