【メールについて】CGI/PerlとPerlモジュールNet::SMTPを使って、メール送信スクリプトを作成しているのですが、どうしてもうまくいきません。というのも、ぼくは@niftyのメールアカウントを使っていて、@niftyのSMTPサーバーへ送信するようにしているのですが、思うように行きません。sendmailでもです。

***環境***
OS:FreeBSD 5.3-R(取りやめになりましたが。)
SMTP:smtp.nifty.com
状態:POP Brfore SMTPや、SMTP認証に関しては、意識していません。また、Win2Kのときは成功していた記憶があります。
もし、詳しい情報が必要の場合おっしゃってもらえれば、提供します。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:clinejp No.1

回答回数13ベストアンサー獲得回数0

ポイント20pt

http://alice-world.net/x2/modules/news/article.php?storyid=22

jensen ackles ブログ ビジネス インターネット at alice-world.net

Nifty固有の問題ではないでしょうか?

id:tpichu

そうかもしれません

2004/10/30 17:46:16
id:farside No.2

回答回数16ベストアンサー獲得回数0

ポイント20pt

http://www.vector.co.jp/soft/win95/net/se241507.html

EPDエポックパケットディテクター(Windows95/98/Me / インターネット&通信)

このような場合は、パケットキャプチャーにより、①正規のメーラで普通に送信できた場合、②自作スクリプトで失敗した場合、の両方のSMTPのやりとりを記録して、原因と対策をたてると良いです。

POP Brfore SMTPやSMTP認証が怪しいと思われるなら、なおさら確認してみるべきと思います。

id:tpichu

なるほど、参考にしてみます。

2004/10/30 17:47:13
id:farside No.3

回答回数16ベストアンサー獲得回数0

ポイント15pt

URLはダミーです。

さきほど回答した者です。

パケットキャプチャソフトEPDはWindows用であってFreeBSD用ではありません。

原因探索のために、Windows環境でまずパケットのやりとりを確認してみては、ということです。Windows上のActivePerlで正常に動作するスクリプトは、私の場合、Red Hat Linux 9やFedora Core 2でも正常に動作していますので。

id:tpichu

わかりました

2004/10/30 17:47:35
id:MAS3 No.4

回答回数40ベストアンサー獲得回数2

ポイント15pt

niftyではSMTP認証が必要みたいです。

Net::SMTPを使う場合はauthメソッドを使いますけど、この場合は別途MIME::Base64モジュールとAuthen::SASLモジュールが必要なので入っていない場合はインストールして下さい。

Net::SMTPのnewを呼ぶときに引数に Debug=>1 を入れるとデバッグメッセージが表示されるのでうまくいかないときはこれを入れてチェックしてみて下さい。

id:tpichu

試してみます

追伸

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させています。

2004/10/30 21:28:10
id:MAS3 No.5

回答回数40ベストアンサー獲得回数2

ポイント10pt

URLはダミーです。

CGIで実行するとエラーがわかりにくいので、コマンドラインから実行してみると何か分かると思います。

デバッグメッセージ表示のDebug=>1は先頭大文字になります。またCGIで実行する場合は余計なのでDebug=>0にするか削除してください。

id:tpichu

試してみたところ、通信が見られました。

そのあと、確かにテストメールが届きました。

しかし、メールスクリプトから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’;と

しなければならないのに。

でも、他の原因もあったかもしれません。

解決です。

2004/10/31 09:09:09

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません