1

perl でメールを送信するときに、いくつかのメール ヘッダーを設定しようとしています。次のコードがありますが、メッセージの本文で Content-Type と X-Priority が送信されます。以下は私のコードです。

my $sendmail = "| /usr/sbin/sendmail -t";

open(MAIL,$sendmail)
        or die("Unable to open sendmail.  $!");
print MAIL "Reply-to: $reply\n";
print MAIL "From: $from\n";
print MAIL "To: $to\n";
print MAIL "Subject: $subject\n\n";
print MAIL "Content-Type: text/plain\n";
print MAIL "X-Priority: 1\n";
print MAIL "blah\n";
print MAIL "$link\n\n";
close(MAIL);

わざわざ追加のものをインストールする必要なく、箱から出してすぐに使えるものが欲しいので、sendmailを使用しています。

4

2 に答える 2

2

下の行から 2 番目の「\n」を削除します。Sendmailは、最初の空行を「ヘッダーの終わり」として扱います。

print MAIL "件名: $subject\n\n";

追加の修正:

  • コマンド ライン オプションを追加-iして、ドットで始まる行の特別な処理を回避します
  • --コマンド ライン オプションの後に sendmail に渡されるコマンド ライン引数として受信者を指定する
  • によって返された sendmail 終了コードを確認します。close
  • 「ヒアドキュメント」でシングルプリントを使用する

print MAIL <<"END_OF_MESSAGE";
Reply-to: $reply
From: $from
To: $to
Subject: $subject
X-Priority: 1

blah blah blah
$link
END_OF_MESSAGE
于 2013-11-05T19:50:01.733 に答える
0

あなたの実際のエラーは\n\n、件名の後に置くことです。これでヘッダーが終了し、本文が始まります。

ほとんどすべての Perl ディストリビューションに付属しているNet::SMTPを実際に使用する必要があります。この方法では、 の動作に依存しませんsendmail

モジュールのNet::SMTP使い方もかなり簡単です。生のプロトコルに少し近すぎるため、多くの人はそれを好まない. 多くの人はMail::Sendmailのようなものを好みますが、それは Perl の標準配布の一部ではありません。

于 2013-11-05T20:11:21.643 に答える