人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【メールについて】CGI/PerlとPerlモジュールNet::SMTPを使って、メール送信スクリプトを作成しているのですが、どうしてもうまくいきません。というのも、ぼくは@niftyのメールアカウントを使っていて、@niftyのSMTPサーバーへ送信するようにしているのですが、思うように行きません。sendmailでもです。
***環境***
OS:FreeBSD 5.3-R(取りやめになりましたが。)
SMTP:smtp.nifty.com
状態:POP Brfore SMTPや、SMTP認証に関しては、意識していません。また、Win2Kのときは成功していた記憶があります。
もし、詳しい情報が必要の場合おっしゃってもらえれば、提供します。

●質問者: tpichu
●カテゴリ:コンピュータ
✍キーワード:@nifty CGI FreeBSD NET Nifty
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● clinejp
●20ポイント

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

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

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

◎質問者からの返答

そうかもしれません


2 ● farside
●20ポイント

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

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

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

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

◎質問者からの返答

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


3 ● farside
●15ポイント

http://www.google.co.jp/

Google

URLはダミーです。

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

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

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

◎質問者からの返答

わかりました


4 ● MAS3
●15ポイント

http://www.nifty.com/support/manual/mail/win_oe6x.htm

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


5 ● MAS3
●10ポイント

http://www.yahoo.co.jp/

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’;と

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

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

解決です。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ