***環境***
OS:FreeBSD 5.3-R(取りやめになりましたが。)
SMTP:smtp.nifty.com
状態:POP Brfore SMTPや、SMTP認証に関しては、意識していません。また、Win2Kのときは成功していた記憶があります。
もし、詳しい情報が必要の場合おっしゃってもらえれば、提供します。
http://alice-world.net/x2/modules/news/article.php?storyid=22
jensen ackles ブログ ビジネス インターネット at alice-world.net
Nifty固有の問題ではないでしょうか?
http://www.vector.co.jp/soft/win95/net/se241507.html
EPDエポックパケットディテクター(Windows95/98/Me / インターネット&通信)
このような場合は、パケットキャプチャーにより、①正規のメーラで普通に送信できた場合、②自作スクリプトで失敗した場合、の両方のSMTPのやりとりを記録して、原因と対策をたてると良いです。
POP Brfore SMTPやSMTP認証が怪しいと思われるなら、なおさら確認してみるべきと思います。
なるほど、参考にしてみます。
URLはダミーです。
さきほど回答した者です。
パケットキャプチャソフトEPDはWindows用であってFreeBSD用ではありません。
原因探索のために、Windows環境でまずパケットのやりとりを確認してみては、ということです。Windows上のActivePerlで正常に動作するスクリプトは、私の場合、Red Hat Linux 9やFedora Core 2でも正常に動作していますので。
わかりました
niftyではSMTP認証が必要みたいです。
Net::SMTPを使う場合はauthメソッドを使いますけど、この場合は別途MIME::Base64モジュールとAuthen::SASLモジュールが必要なので入っていない場合はインストールして下さい。
Net::SMTPのnewを呼ぶときに引数に Debug=>1 を入れるとデバッグメッセージが表示されるのでうまくいかないときはこれを入れてチェックしてみて下さい。
試してみます
追伸
require ’/***/***/***/**/**/jcode.pl’;
#===============================================================================
# jcode.plを使って、JISコードへ変換
#===============================================================================
sub ConvJis($) {
local($sWk) =@_;
&jcode’convert(*sWk, ’jis’);
return $sWk;
}
#===============================================================================
# メインルーチン
#===============================================================================
#オブジェクトの作成
sub send {
$s_smtp = ”smtp.nifty.com”;
$auth_id = ”***@@@@@”;
$auth_pw = ”********”;
($s_to,$s_from,$s_subject,$s_data,$s_host) = @_;
use Net::SMTP;
use MIME::Entity;
use MIME::Words qw (:all);
use MIME::Base64;
use Authen::SASL;
require MIME::Base64;
require Authen::SASL;
$smtp = Net::SMTP->new(
$s_smtp, #SMTPサーバ
Hello=>$s_smtp,
debug=>1); #SMTPサーバのドメインを指定
$smtp->auth($auth_id,$auth_pw);
#ヘッダ部の組み立て
$smtp->mail($s_from); #送信元
$smtp->to($s_to); #宛先
#データ部の組み立て(MIME::Entityによるデータの作成)
$smtp->data();
$s_data = ”$s_data¥n¥n$s_host”;
$s_data = &ConvJis(”$s_data”);
$oMime = MIME::Entity->build(
To => $s_to,
From => $s_from,
Subject => $s_subject,
Type => ’text/plain;charset=”iso-2022-jp”’, #後ろのcharsetがミソ
Data => $s_data,
Encoding => ”7bit” #7bitエンコード
);
$smtp->datasend($oMime->stringify);
# データの終わり、メール送信
$smtp->dataend();
#SMTP接続の終了
$smtp->quit;
何か問題があるのでしょうか?
このスクリプトを、requireさせています。
Yahoo! JAPAN
URLはダミーです。
CGIで実行するとエラーがわかりにくいので、コマンドラインから実行してみると何か分かると思います。
デバッグメッセージ表示のDebug=>1は先頭大文字になります。またCGIで実行する場合は余計なのでDebug=>0にするか削除してください。
試してみたところ、通信が見られました。
そのあと、確かにテストメールが届きました。
しかし、メールスクリプトからrequireするとなぜか届きません
require ”../****/*****.pl”;
unless ($in{’name’} and $in{’mail’} and $in{’subject’} and $in{’data’}) { &error(’ERROR! 抜けている項目があります!’); }
$dat = ”送信元=$in{’name’}($in{’mail’})¥n内容=$in{’data’}¥nHOST:none¥n¥n”;
&send($email,$in{’mail’},$in{’subject’},$dat,0);
&header;
print ”送信完了¥n”;
&footer;
exit;
これが問題のスクリプトの送信部分です。
と、思ったらただ単に原因はPerl5の仕様でした。
$email = ”****@****.com”;としていました。
$email = ”****¥@****.com”;もしくは
$email = ’****@****.com’;と
しなければならないのに。
でも、他の原因もあったかもしれません。
解決です。
そうかもしれません