2

以下は、メールホストから個人のメールアドレスにメールを送信するために書いたものと、表示されるエラーです。

エラーが発生する理由を教えてください。

cmm_ping.pl 行 2 の未定義の値に対してメソッド「mail」を呼び出すことはできません。

use Net::SMTP;
$smtp->mail("jo-sched@abcd.com");
$smtp->recipient("Myname@XXX-XXXX.com");
$smtp->datasend("From: jo-sched@abcd.com");
$smtp->datasend("To: Myname@xxxx-xxxxxx.com");
$smtp->datasend("Subject: This is a test");
$smtp->datasend("\n");
$smtp->datasend("This is a test");
$smtp->dataend;
$smtp->quit;
4

2 に答える 2

3

変数$smtpはまだ定義されていません。Net::SMTPの使用例を見てください。この例は、コードが行うことをほぼ実行します。

use Net::SMTP;

$smtp = Net::SMTP->new('mailhost');

$smtp->mail($ENV{USER});
$smtp->to('postmaster');

$smtp->data();
$smtp->datasend("To: postmaster\n");
$smtp->datasend("\n");
$smtp->datasend("A simple test message\n");
$smtp->dataend();

$smtp->quit;
于 2012-06-07T17:10:44.913 に答える
3

オブジェクト指向の Perl がどのように機能するかをよく知っていますか?

オブジェクト指向の Perl モジュールを使用するには、最初にそのクラス タイプのオブジェクトを作成する必要があります。通常、これはnewメソッドを介して行われます。

my $smtp = Net::SMTP->new($mailhost);

今、クラス$smtpオブジェクトNet::SMTPです。基本的に、これはデータ構造 (送信先、メッセージなど) を格納できるグロブへの参照です。その後、Perl はメソッド呼び出し (パッケージ Net::SMTP の一部である単なるサブルーチン) 中にこの情報を使用できます。

私が書いたプログラムの例を次に示します。

use Net::SMTP;

my $smtp = Net::SMTP->new(
    Host  => $watch->Smtp_Host,
    Debug => $debug_level,
);

if ( not defined $smtp ) {
    croak qq(Unable to connect to mailhost "@{[$watch->Smtp_Host]}");
}

if ($smtp_user) {
    $smtp->auth( $watch->Smtp_User, $watch->Smtp_Password )
        or croak
        qq(Unable to connect to mailhost "@{[$watch->Smtp_Host]}")
        . qq( as user "@{[$watch->Smtp_User]}");
}

if ( not $smtp->mail( $watch->Sender ) ) {
    carp qq(Cannot send as user "@{[$watch->Sender]}")
        . qq( on mailhost "@{[$watch->Smtp_Host]}");
    next;
}
if ( not $smtp->to($email) ) {
    $smtp->reset;
    next;    #Can't send email to this address. Skip it
}

#
# Prepare Message
#
# In Net::SMTP, the Subject and the To fields are actually part
# of the message with a separate blank line separating the
# actual message from the header.
#
my $message = $watch->Munge_Message( $watcher, $email );
my $subject =
    $watch->Munge_Message( $watcher, $email, $watch->Subject );

$message = "To: $email\n" . "Subject: $subject\n\n" . $message;

$smtp->data;
$smtp->datasend("$message");
$smtp->dataend;
$smtp->quit;
于 2012-06-07T18:26:55.010 に答える