|
>>4554 かず さんへ > FTPコマンド > (QUIT,USER,PASS,PWD,STAT,MKD,RMD,CDW,DEL,LIST,HELPcmd,HELP,PORT,NLST) > の組み込み方がイマイチよく分りません。 あんまりな方法だと思いますよ。 vsftpd とか proftpd 辺りのソースを拾って読んでみてはどうでしょうか? |
|
Solarisで、Perlで、smtpで、メール送信をしていいます。 ポート番号25を使って、smtpサーバに接続してメールの 送信をしているのですが、処理は、正常に終わるのですが、 メールが送信されません。届きません。 どこがいけないのでしょうか。 ------------------------------ use Socket; $server = 'SMTPサーバ' ; $from = '送信元アドレス' ; $to = '送信先アドレス' ; $subject = 'テストメール' ; $data = 'メール送信テスト' ; $send_data = 'X-Mailer: SMTP tool' . "\n"; $send_data .= 'MIME-Version: 1.0' . "\n"; $send_data .= 'Content-Type: text/plain; charset=iso-2022-jp' . "\n"; $send_data .= 'From: '. $from . "\n"; $send_data .= 'To: '. $to . "\n"; $send_data .= 'Subject: ' . $subject . "\n"; $send_data .= "\n"; $send_data .= $data; $port = getservbyname('smtp','tcp'); $struct = sockaddr_in($port,inet_aton($server)); socket(SH, PF_INET, SOCK_STREAM, 0) || die("ソケットの生成失敗 $!") ; connect(SH, $struct ) || die("接続失敗 $!") ; select(SH); $| = 1; select(STDOUT); $respons = <SH> ; unless($respons =~ /^220/) { close(SH); die("接続失敗 $!") ; } $command = "HELO $server\n"; print SH $command ; $respons = <SH> ; &decode(\$respons) ; unless($respons =~ /^250/){ close(SH); die("HELOコマンド失敗 $!") ; } $command = "MAIL FROM:$from\n"; print SH $command ; $respons = <SH> ; &decode(\$respons) ; unless($respons =~ /^250/){ print SH "RSET\n"; close(SH); die("MAILコマンド失敗 $!") ; } $command = "RCPT TO:$to\n"; print SH $command ; $respons = <SH> ; &decode(\$respons) ; unless($respons =~ /^25[0|1]/){ print SH "RSET\n"; close(SH); die("RCPTコマンド失敗 $!") ; } $command = "DATA\n"; print SH $command ; $respons = <SH> ; &decode(\$respons) ; unless($respons =~ /^354/){ print SH "RSET\n"; close(SH); die("DATAコマンド失敗 $!") ; } $command = "$send_data\n.\n"; print SH $command ; $respons = <SH> ; &decode(\$respons) ; unless($respons =~ /^250/){ print SH "RSET\n"; close(SH); die("本文、ヘッダ部送信失敗 $!") ; } $command = "QUIT\n"; print SH $command ; close(SH); select(STDOUT); print "MAILは正常に送信されました。\n"; sub decode{ my $inf = $_[0]; $$inf =~ s/\x0D\x0A|\x0D|\x0A/\n/g; } ----------------------------- |
|
UNIXを良く知らずみようみまねでshellを作成しています。 ある処理のエラーをハンドリングして結果に対してメール を送信する様にしました。 /usr/bin/mail -s "hoge" megu@hoge.com < hoge.txt ここで質問なのですが、該当コマンドをプロンプト上で 実行すると処理が実行されません。 (実行中のまま戻って来ない?) 強制終了すると、dead.letterが更新されます。 該当処理を記載したshellを実行しても、上記コマンド迄 は実行されているのですが、該当mailコマンドの部分で 処理がされない様で、コマンドを実行した様にshell自体も 終了しません。 cronや他ツールで自動実行させる様にすると実行されます。 根本的なOSの知識なのか、環境の問題なのかさえも分かりません。 とても基本的な質問になるかと思うのですが、教えて頂ければと 思います。 |
|
はじめまして。質問させてください。 sin_port=0で空いているポート番号を自動取得できますが、 ・ここで取得されたくない番号を指定 ・決められた帯域内(5000〜6000など)で限定して取得 ・予め取得される範囲を取得 のいずれかを行いたいのですが、方法はありますでしょうか? |
|
>>4556 まんたろう > ポート番号25を使って、smtpサーバに接続してメールの > 送信をしているのですが、処理は、正常に終わるのですが、 > メールが送信されません。届きません。 うちの環境では正常に送信されました。telnet での送信や、メーラー 送信のパケット観察などを行って、成功/失敗時の違いを観察してください。 >>4557 megu - 「sh -x スクリプト名」として、実際に実行されているコマンドを確認する。 端末からの入力を待っているなら、リダイレクトまわりが怪しげな気が。 - dead.letter の中を見て、エラーを観察する (dead.letter の中にエラーが 記述されるのかは覚えていませんが) - mail コマンドが吐くエラーを観察する。標準出力・標準エラー出力を捨てて いるなら、捨てないようにする。 >>4558 カルネ Linux なら ip_local_port_range、NetBSD なら net.inet.ip.anonportmax、 FreeBSD なら制限方法がない (たぶん) など、OS によって異なります。 |
|
シェルで、dateコマンドで取得した時間から5分前の の時間を取得したいのですが、できるでしょうか。 date +%H%M%S と実行します。 結果として、「130530」が取得できます。 そこから、取得した、「1305030」から5分前の「130030」を 求めたいのですが、できるのでしょうか。 環境は、 Solaris、shです。 |