どのようにNetを使いますか?SMTPメールを送ります。


http://fayland.org/journal/NetSMTP.html
 
Category:Modules  Keywors:Net:SMTP mail
コードは163.comのSMTPでメールを送ります。
#!/usr/bin/perl
use Net::SMTP;

my $mailhost = "smtp.163.com"; # the smtp host
my $mailfrom = '[email protected]'; # your email address
my @mailto = ('[email protected]', '[email protected]'); # the recipient list
my $subject = "    ";
my $text = "    
。"; $smtp = Net::SMTP->new($mailhost, Hello => 'localhost', Timeout => 120, Debug => 1); # anth login, type your user name and password here $smtp->auth('user','pass'); foreach my $mailto (@mailto) { # Send the From and Recipient for the mail servers that require it $smtp->mail($mailfrom); $smtp->to($mailto); # Start the mail $smtp->data(); # Send the header $smtp->datasend("To: $mailto
"); $smtp->datasend("From: $mailfrom
"); $smtp->datasend("Subject: $subject
"); $smtp->datasend("
"); # Send the message $smtp->datasend("$text

"); # Send the termination string $smtp->dataend(); } $smtp->quit;
Trouble Shoting/Code Analysis
  • なぜ$stmp->auth('user'、'pass')が必要ですか?ほとんどのSMTPサーバは、spam/迷惑メールを防止するために、ユーザがアイデンティティを検証する必要がある。この方法は別途モジュールをインストールする必要があります。Authen:SASLはこのモジュールはシステムが持っていないかもしれません。システムが仮想ホストである場合、このモジュールはインストールできません。詳細なコードは、スクリプトLeoBBSまたは書籍「Perlネットワークプログラミング」を参照することができる。
  • Debug=>1このコードはテスト用に使われていますので、Debugを開いています。普通のテストは一回で終わります。正式に使うと閉じます。
  • 注意したいのは、送信者と受信者の住所はシングルで引用しますか?それとも「fayland\@gmail.com」を使います。変数の場合は、正の値で変換します。
    $mailto =~ s/\@/\\\@/;
  • 添付ファイルを送りたいですが、どうすればいいですか?「Perlネットワークプログラミング」を参照してください。
  • メール送信プロセスの簡単な紹介SMTPプロトコルは、文書rfc 821によって定義される。
    rfc 821プロトコルでは、送信者(Sで表されるメールを送信するプログラム)と受信者(Rで表されるSMTPサーバ)の2つの役割が定義されている。
  • SとRがシーケンシャル接続を通じて接続された後、SはまずRにアイデンティティを示すべきであり、このプロセスはheloコマンドで完成され、helo後に送信者のドメイン名(利用可能なlocal host)を接続する。Rの答えは接続に成功した状態コードやサーバのアイデンティティなどを表しています。例えば、
    S: helo 1313s.com
    R: 220 server.com Simple Mail Transfer Service Ready
    は、rfc 821によって定義された状態コードの中で、通常は2または3で開始される表現に成功し、4または5で開始される表現で送信プロセスに問題が発生する。サーバの認証が必要な場合はAUTH LOGINも送信します。
  • はヘッダファイルを送信する。
    S: MAIL FROM: 
    R: 250 OK
    S: RCPT TO: 
    R: 
    ここのrecipientのアドレスはSMTP同一サーバ上でサーバがこのアドレスを見つけられない場合、「550 No such user here」と答えます。
  • は本文を送信する。データで開始します。二つの改行で終了します。
    S: DATA
    R: 354 Start mail input; end with (    )
    S: To: [email protected]
    S: From: [email protected]
    S: subject: title
    S: ...
    S: text
    S: etc.
    S:
    S:
    R: 250 OK
  • は接続を終了する。
    S: QUIT
    R: 221 server.com Service closing transmission channel
  • 以上は簡単な接続過程です。Netを開くとき:SMTPのdebugは、この接続手順と似たものを出力します。