[PR]ネットとスマホ OCNでまとめておトク!2つの割引で月額基本料が【永年1,300円/月割引】

メールフォームからメールを送信することについて、
FENICSメール(富士通株式会社)でNet::SMTPを使用してメールを送信しようと考えています。

お問い合せでNet::SMTPでメールを送信する場合、smtp authの認証が必要だとわかりまして、下記のサイトを参考にして組みましたが、
メールが送信されませんでした。
http://d.hatena.ne.jp/yoshifumi1975/20060831/115 …

色々と調べてみた結果、最初の
$smtp = Net::SMTP->new('SMTPサーバ', Hello=>"SMTPサーバ");
の文で$smtpに値がなく、サーバーに接続できてませんでした。
参考サイト)http://tech.bayashi.net/pdmemo/sendmailbyperl.html

でも、smtp情報はメーラーで問題なく設置できましたので、
サーバー情報、認証には間違いはないと考えられます。

Net::SMTPは使えているのにどうしてsmtpサーバーに接続できないのか
わからずにいます。

初歩的で恐縮ですが、ご回答お待ちしております。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

Net::SMTP->new のパラメータに、Debug=>1 を追加すれば、


うまくいかない原因がわかりそうです。

参考URL:http://q.hatena.ne.jp/1099119043
    • good
    • 0
この回答へのお礼

t-okuraさん

アドバイスありがとうございます。
参考にさせていただきます。

お礼日時:2008/09/21 16:59

> 「モジュールを入れる」と言うのは、サーバーにAuthen::SASLモジュールをインストールする言うことでしょうか?



そうです。

> もし、そうであれば、このサーバーは自由にインストールしたり出来ない環境にあります。
> サーバーにインストールせずにAuthen::SASLモジュールを使用する場合は、use とか require すればよろしいでしょうか?

use とか require で取り込むためにインストールが必要なんですけど。
Digest::MD5 とか Digest::SHA1 あたりがあればファイルのコピーで澄みそうですけどどうですか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうざいます。

Digest::MD5 、 Digest::SHA1 の確認をしましたが、Digest::MD5がインストールされていました!!!(嬉
感謝致します!

またまた、質問ばかりで申し訳ありませんが、コピーするというのは
どうすればよろしいでしょうか?

度々すみませんがよろしくお願いします。

【確認したプログラム】
----------------------------------------------------------
#!/usr/local/bin/perl -w

use Net::SMTP;
use Digest::MD5 qw(md5 md5_hex md5_base64);
use strict;
my $smtp = Net::SMTP->new('smtpサーバー名');
print my $smtp->domain,"\n";
my $smtp->quit;

【エラー文】
Can't call method "domain" on an undefined value at ./ファイル名.cgi 行番号 7.
----------------------------------------------------------

お礼日時:2008/09/18 10:33

> 真に恐縮ですが、参考となるホームページなどございませんでしょうか。



何の参考でしょうか?
モジュールをいれればいいだけだと思うのですが、Perlのみのコードで
smtp auth を通すコードですか?
    • good
    • 0
この回答へのお礼

ご意見ありがとうございます。
伝達不足で申し訳ございません。
-------------------
「モジュールを入れる」と言うのは、サーバーにAuthen::SASLモジュールをインストールする言うことでしょうか?
もし、そうであれば、このサーバーは自由にインストールしたり出来ない環境にあります。
サーバーにインストールせずにAuthen::SASLモジュールを使用する場合は、use とか require すればよろしいでしょうか?

よろしくお願いします。


--------------------------------------------------------
こちらに目的と、作業手順を追って挙げます

【目的】メールフォーム(Perl)の設置
1.$smtp = Net::SMTP->new('stmpサーバー', Timeout=>60, Debug=>0); でメールサーバーに接続し、
2.$smtp->auth($user, $passwd)で認証をクリアしてメールを送信したい。(※このサーバーは認証が必要です。)

【問題点】
・$smtp = Net::SMTP->new・・・の時に「$smtp」に値が入らない。
 他のサーバーではキチンと値が返ってきたのですが・・・

お礼日時:2008/09/17 17:38

これと同じ原因とか



Net::SMTP->auth - World Wide Walker
http://yoosee.net/d/archives/2004/08/25/002.html
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

早速上記のURLで確かめましたが、以下のエラーが
返ってきました。
---------------------------------------------------------
Can't locate Authen/SASL.pm in @INC (@INC contains: /usr/local/lib/perl5/5.8.0/sun4-solaris /usr/local/lib/perl5/5.8.0 /usr/local/lib/perl5/site_perl/5.8.0/sun4-solaris /usr/local/lib/perl5/site_perl/5.8.0 /usr/local/lib/perl5/site_perl .) at ./ファイル名.cgi 行番号 113.
BEGIN failed--compilation aborted at ./ファイル名.cgi 行番号 113.
---------------------------------------------------------
どうやら、Authen::SASL;がサーバーに無い様です。
Perlのバージョンは5以上でしたが、標準的なモジュールしか
インストールされていないとの事でした。

真に恐縮ですが、参考となるホームページなどございませんでしょうか。
よろしくお願いします。

お礼日時:2008/09/17 13:27

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QNet::SMTPでのメール送信について

Net::SMTPモジュールを利用してメール送信をしています。
複数の宛先にメールを送る場合に、

my ($smtp) = Net::SMTP->new($smtp_server);
$smtp->to('****@hogehoge.com', '**@mogemoge.com');

とすれば、複数に送れるのですが、

my ($mail_to) ='\'****@hogehoge.com\',\'**@mogemoge.com\'';
として
$smtp->to($mail_to);
とするとメールを送信することが出来ません。
何故でしょうか?教えてください。

Aベストアンサー

原因は$mail_toの中身がそのまま1つの引数として認識しているため
'****@hogehoge.com','**@mogemoge.com'
という1つの文字列がメールアドレスとされているからです。
Perlの仕様についてそれほど詳しくないのですが、おそらく、変数の評価を先に行い、その後に展開を行なっているので、引数が1つと認識しているためだと思います。

eval関数を使用して先に変数を展開してみるとうまく行くかもしれません。
例:
$smtp->to(eval($mail_to));

QPerlでSMTP-AUTH認証をする

現在、さくらのレンタルサーバにてperlスクリプトを稼動しています。

今回、さくらのレンタルサーバのメール認証がPOP before SMTPからSMTP認証(SMTP-AUTH)に変更になりましたので、perlスクリプト内で自動メール送信させるのにNet::SMTP::TLSモジュールを利用することにしました。そこで
(1)SMTPサーバー名、ポート番号、ユーザー名、パスワードを設定する
(2)宛先などの必要な設定をする
(3)メール内容を設定する
(4)メールヘッダを設定する
(5)メールを送信する
という流れで現在perlスクリプトを以下のように記述しました。

#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
use Net::SMTP::TLS;
use Authen::SASL;

my $smtp = Net::SMTP::TLS->new($mailhost,
Port => $mailport,
User => $mail_username,
Password => $mail_password
);
$smtp->mail($from_mail);
$smtp->to($tomail);
$smtp->data();
$smtp->datasend($header);
$smtp->datasend($message);
$smtp->dataend();
$smtp->quit;

変数の値は割愛していますが、
上記のスクリプトは、POP before SMTPの時は問題なくメール送信できたのですが、サーバのメール認証がSMTP認証(SMTP-AUTH)に変更になってからは以下のようなエラーが出ます。

invalid SSL_version specified at /usr/local/perl/5.8/lib/perl5/site_perl/5.8/IO/Socket/SSL.pm line 418

何か間違いであるとか、他に必要な設定がありますでしょうか?
宜しくご教授お願いいたします。

現在、さくらのレンタルサーバにてperlスクリプトを稼動しています。

今回、さくらのレンタルサーバのメール認証がPOP before SMTPからSMTP認証(SMTP-AUTH)に変更になりましたので、perlスクリプト内で自動メール送信させるのにNet::SMTP::TLSモジュールを利用することにしました。そこで
(1)SMTPサーバー名、ポート番号、ユーザー名、パスワードを設定する
(2)宛先などの必要な設定をする
(3)メール内容を設定する
(4)メールヘッダを設定する
(5)メールを送信する
という流れで現在perlスクリプトを以下のように...続きを読む

Aベストアンサー

http://matsup.blogspot.jp/2012/12/freebsd-perl-netsmtptls.html

上記のページに、今回の質問と同じトラブルが取り上げられています。とりあえず、バージョンを調べてみてはどうでしょうか。それで、原因が同じであれば、サポートに解決を依頼する必要があるかも?

QPerlからメール送信で文字化け

Perl5.8からsendmailを使ってメール送信しています。
髙や﨑が入ると文字化けします。文字化けしないようにする方法を教えてください。



#!/usr/bin/perl
require 'jcode.pl';
require 'mimew.pl';
$sendmail = '/usr/lib/sendmail';

print"Content-type: text/html\n\n test\n";

if (!(open(OUT,"| $sendmail -t -i -f xxxx\@hogehoge.co.jp"))) { ; }

print OUT "To: xxxx\@hogehoge.co.jp\n";
print OUT "From: xxxx\@hogehoge.co.jp\n";
print OUT "Reply-To: xxxx\@hogehoge.co.jp\n";

$subject = "サブジェクト 髙﨑";
$subject = &mimeencode($mail_subject);
print OUT "Subject: $mail_subject\n";

print OUT "Mime-version: 1.0\n";
print OUT "Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n";
print OUT "Content-Transfer-Encoding: 7bit\n\n";

$honbun = "メール本文 髙﨑";
&jcode'convert(*honbun, 'jis');
print OUT "$honbun\n";

close(OUT);

Perl5.8からsendmailを使ってメール送信しています。
髙や﨑が入ると文字化けします。文字化けしないようにする方法を教えてください。



#!/usr/bin/perl
require 'jcode.pl';
require 'mimew.pl';
$sendmail = '/usr/lib/sendmail';

print"Content-type: text/html\n\n test\n";

if (!(open(OUT,"| $sendmail -t -i -f xxxx\@hogehoge.co.jp"))) { ; }

print OUT "To: xxxx\@hogehoge.co.jp\n";
print OUT "From: xxxx\@hogehoge.co.jp\n";
print OUT "Reply-To: xxxx\@hogehoge.co.jp\n";

$subject = "サ...続きを読む

Aベストアンサー

根本的には perl の問題ではありません。
「髙」や「﨑」といった文字は、JIS(ISO-2022-JP)では規定されていないため、
ISO-2022-JPのメールに入れることはできないのです。

文字コードがUnicodeであれば、「髙」や「﨑」を表現できますので、

・perlのスクリプトを、Unicode(UTF-8)で記述するようにする
・メールのcharset を UTF-8で送信するようにする
・文字コードの変換を、perl4時代の古いライブラリ(Unicode非対応)である「mimew.pl」や「jcode.pl」ではなく、perl5世代の「Encode.pm」を使う

という対応になるかと思います。

---ここから---
#!/usr/bin/perl
use strict;
use utf8;

use Encode;

my $sendmail = '/usr/lib/sendmail';

print "Content-type: text/html\n\n test\n";

my $out;
if (!(open($out,"| $sendmail -t -i -f xxxx\@hogehoge.co.jp"))) { ; }

print $out "To: xxxx\@hogehoge.co.jp\n";
print $out "From: xxxx\@hogehoge.co.jp\n";
print $out "Reply-To: xxxx\@hogehoge.co.jp\n";

my $mail_subject = "サブジェクト 髙﨑";
$mail_subject = encode('MIME-Header', $mail_subject);
print $out "Subject: $mail_subject\n";

print $out "Mime-version: 1.0\n";
print $out "Content-Type: text/plain\; charset=\"UTF-8\"\n";
print $out "Content-Transfer-Encoding: 8bit\n\n";

my $honbun = "メール本文 髙﨑";
$honbun = encode("UTF-8", $honbun);
print $out "$honbun\n";

close($out);
---ここまで---

といった形でしょうか。

ただし、最近はまず大丈夫だと思いますが、
「日本語のメール」としては、ISO-2022-JPで送るのが主流であり、UTF-8で送った場合にはメールソフトによっては問題が出るかもしれないことは覚悟する必要があるかと思います。

根本的には perl の問題ではありません。
「髙」や「﨑」といった文字は、JIS(ISO-2022-JP)では規定されていないため、
ISO-2022-JPのメールに入れることはできないのです。

文字コードがUnicodeであれば、「髙」や「﨑」を表現できますので、

・perlのスクリプトを、Unicode(UTF-8)で記述するようにする
・メールのcharset を UTF-8で送信するようにする
・文字コードの変換を、perl4時代の古いライブラリ(Unicode非対応)である「mimew.pl」や「jcode.pl」ではなく、perl5世代の「Encode.pm」を使う

という対...続きを読む

Qcgi 実行時のエラー

perl初心者でまた質問させていただきます。「送信」ボタンをクリックすると、HPで入力してもらった情報をメールで送信するcgiを作成しました。ただ、実行すると、
Can't locate object method "new" via package "Net::SMTP" (perhaps you forgot to load "Net::SMTP"?) at C:\www\cgi-bin\downloadmail.cgi line 62.
というエラーが出ます。
cgiは、
my $smtp = Net::SMTP->new($192.1.1.1);
$smtp->mail($email);
$smtp->to($to);

$smtp->data();
$smtp->datasend("From:$email\n");
$smtp->datasend("To:***@***.co.jp\n");
$smtp->datasend("Subject:テストメール\n"); #件名
$smtp->datasend("Content-Type: text/plain; charset=iso-2022-jp\n\n");
$smtp->datasend("テストメール\n");
$smtp->dataend();
$smtp->quit;
というものです。どなたか分かりましたらお願いします。

perl初心者でまた質問させていただきます。「送信」ボタンをクリックすると、HPで入力してもらった情報をメールで送信するcgiを作成しました。ただ、実行すると、
Can't locate object method "new" via package "Net::SMTP" (perhaps you forgot to load "Net::SMTP"?) at C:\www\cgi-bin\downloadmail.cgi line 62.
というエラーが出ます。
cgiは、
my $smtp = Net::SMTP->new($192.1.1.1);
$smtp->mail($email);
$smtp->to($to);

$smtp->data();
$smtp->datasend("From:$email\n");
$smtp->datasend...続きを読む

Aベストアンサー

Net::SMTPモジュールのロードを指示する
use Net::SMTP;
は書いてある?

1行目の
#!/usr/bin/perl
の下あたりに
use Jcode;
って書いてあると思うので、そこを
use Net::SMTP;
use Jcode;
にしましょう。

Qsendmailのエラーを知りたい

こんにちわ。

sendmailを使って、メールの自動送信を行っています。

その際に、送れなかったsendmailのエラーは
どのようにすれば取得できるのでしょうか?

------

ちなみに、レンタルサーバーで、pos.toネット というところを使用しています。
(www.pos.to)

perl はバージョン 5.005_03 のようです。
sendmailは、sendmailと互換のMTAである qmail というものだそうです。



補足もいたしますので、よろしくお願いします。

参考サイトの紹介も大歓迎いたします。



_

Aベストアンサー

レンタルサーバでのメールの場合はログを見れない可能性もありますね。

pos.toネットのFAQにはなにもそういった記述はありませんでしたが一度直接問い合わせてみるしかないかと思います。

QNET::SMTPについて

おねがいします。
NT環境からperlでメール送信したいと思っています。
NET::SMTPをPPMでダウンロードしました。
以下のサンプルプログラムを得て、SMTPサーバ名など
を入れました。でも、エラーにはなりませんが送信されず。
そもそも、IDとpassの認証部分がないですよね。
このサンプルだと「SMTPサーバ名さえわかれば誰でも
そのSMTPサーバからメールできちゃう」ってことに
なりませんか??
他の方の質問にあった、
$smtp->auth( USERNAME, PASSWORD );
も試しましたが、エラーになりました。
認証うける方法があるのでしょうか?

よろしくおねがいします。

#!/usr/local/bin/perl -w

use Net::SMTP;

$smtp = Net::SMTP->new('mailhost');

$smtp->mail($ENV{USER});
$smtp->to('postmaster');

$smtp->data();
$smtp->datasend("To: postmaster\n");
$smtp->datasend("\n");
$smtp->datasend("A simple test message\n");
$smtp->dataend();

$smtp->quit;

おねがいします。
NT環境からperlでメール送信したいと思っています。
NET::SMTPをPPMでダウンロードしました。
以下のサンプルプログラムを得て、SMTPサーバ名など
を入れました。でも、エラーにはなりませんが送信されず。
そもそも、IDとpassの認証部分がないですよね。
このサンプルだと「SMTPサーバ名さえわかれば誰でも
そのSMTPサーバからメールできちゃう」ってことに
なりませんか??
他の方の質問にあった、
$smtp->auth( USERNAME, PASSWORD );
も試しましたが、エラーになりました。
認...続きを読む

Aベストアンサー

あなたが指定したメールサーバは認証が必要なサーバなのでしょうか?
認証が無い場合は auth は必要ではありません。

> $smtp->mail($ENV{USER});

$ENV{USER} には正しいメールアドレスが設定されているのでしょうか?
ここにあなたのメールアドレスを設定しても送信できませんか?
多分ここでエラーになっているんじゃないかと思います。
$smtp->mail('あなたのメールアドレス');
としてテストしてみてください。

> 「SMTPサーバ名さえわかれば誰でもそのSMTPサーバからメールできちゃう」ってことになりませんか??
SPAM 対策をしていなければそういうことが出来ちゃいます。
POP before SMTP とか SMTP auth とか relay を禁止とか設定されていると思いますので
そのようなことは出来ないようになっていると思います。

QCPANでインストールしたモジュールの削除方法

CPANであるモジュールをインストールしたのですが見当違いのモジュールでした。
削除しなければならず色々調べてみたのですがインストール方法しか見つからず削除方法がわかりません。

どなたかわかる方教えてください。

Aベストアンサー

がると申します。
uninstallは、install方法次第ではあるのですが。
もしcpanコマンド使ってであるとすると、それは実際にはMakefileでのコンパイル&installになります。
で。
make install系の、これは最大の欠点といわれているのですが。「自力で手動で探し出す以外に削除手段はない」です。
# rpm系の唯一にして最大の利点がココの部分の解消ですね。

cpanでのinstallですと、どこか(多分 /root あたり)に.cpan/build/というディレクトリがありまして、その下にソースが展開されているので。
ソースはそこから。.soファイルは…Makefile解析するか、findあたりで探すか、で削除するしかないです。
確か、メジャーなcpanのMakefileはそんなにお行儀悪くないので、そうあちこちには散らかしてないと思うのですが…。

また不明な点などあったら追加で質問していただければ。

QHTMLフォームのSELECTの幅を一定にするためには?

HTMLフォームのSELECTの幅を一定にするためにはどのようにすれば
いいのでしょうか?

CSS等で設定できるとありがたいのですが、やり方がわかりません。

Aベストアンサー

<select style="width: 200px">

Q文字コードの変換(Shift-JISからUTF8)

文字コードがShift-JISのCSVファイルを読み込み、UTF-8のテキストファイルに出力するのに
プログラムの中で変更しようとしているのですが、うまくいきません。出力ファイルの文字コードを
確認するとShift-JISのままです。
どなたか教えていただけないでしょうか?
ActivePerl v5.16.0を使用し、Encodeモジュールのfrom_toを使用しています。

#!/usr/bin/perl

use strict;
use warnings;

use utf8;
use Encode;

my $input_file="input.csv";
my $output_file="output.txt";
open (IN, $input_file) or die "$!";
open (OUT, ">$output_file") or die "$!";

while (<IN>){
chomp ($_);
my @data=split(/,/,$_);

for(my $i=0;$i<@data;$i++){
$data[$i]=Encode::from_to($data[$i],'shiftjis','utf8'); #Shift-JISからUTF-8に変換
$data[$i]=~s/\s+//g;
print OUT $_;
}
print OUT "\n";
}
close (IN);
close (OUT);

文字コードがShift-JISのCSVファイルを読み込み、UTF-8のテキストファイルに出力するのに
プログラムの中で変更しようとしているのですが、うまくいきません。出力ファイルの文字コードを
確認するとShift-JISのままです。
どなたか教えていただけないでしょうか?
ActivePerl v5.16.0を使用し、Encodeモジュールのfrom_toを使用しています。

#!/usr/bin/perl

use strict;
use warnings;

use utf8;
use Encode;

my $input_file="input.csv";
my $output_file="output.txt";
open (IN, $input_file) or die "$!...続きを読む

Aベストアンサー

あの、私のや他の回答をよく読んで考えてください。


for(my $i=0;$i<@data;$i++){
$data[$i]=Encode::from_to($data[$i],'shiftjis','utf8'); #Shift-JISからUTF-8に変換
$data[$i]=~s/\s+//g;
print OUT $_;
}

この部分は **** $_には何の影響も与えません ****
よって、** 出力に関することだけに注目したら **

for(my $i=0;$i<@data;$i++){
print OUT $_;
}

これと等価です。どこで「Shift_JIS からUTF-8へ変換」してますか?
$_は「while (<IN>){」の<IN>で1行読み込まれ、「chomp ($_);」で末尾の改行コードが削除されただけで、移行なにも変化していません。コードは入力のまま=Shift_JISです。それをそのまま出力すればShift_JISになるのが正解です。
しかも、項目数分だけ繰り返し出力されます。
(重複行になる、と#1に書いたのはchompのことを失念していた私のミスです)

@dataを変更したのなら、出力するのは@dataでしょう。
join(",", @data)とすれば、項目をカンマ区切りの文字列にすることができます。


あと#2にあったfrom_toの使い方。マニュアルをよく読みましょう
http://perldoc.perl.org/Encode.html#[$length-=]-from_to($octets,-FROM_ENC,-TO_ENC-[,-CHECK])
・$octetsを直接変換する
・$octetsの長さを返す
とあります。つまり
$data[$i]=Encode::from_to($data[$i],'shiftjis','utf8')
だと,$data[$i]には元の内容は破棄されて、文字列の長さになってしまいます。



各項目毎に処理したい、という意図はわかりました。

ですが、文字コードの変換が項目毎に違うなんてことはまず無いでしょう。
それならば、$_で1行をコード変換→splitして項目毎の処理、としてもいいのでは?

ついでにPerlIOを使って
open (IN, "<:encoding(shift_jis)", $input_file) or die "$!";
open (OUT, ">:utf8", $output_file) or die "$!";
とでもやれば、プログラム中はコードをあまり意識せずに文字列処理ができます。

あの、私のや他の回答をよく読んで考えてください。


for(my $i=0;$i<@data;$i++){
$data[$i]=Encode::from_to($data[$i],'shiftjis','utf8'); #Shift-JISからUTF-8に変換
$data[$i]=~s/\s+//g;
print OUT $_;
}

この部分は **** $_には何の影響も与えません ****
よって、** 出力に関することだけに注目したら **

for(my $i=0;$i<@data;$i++){
print OUT $_;
}

これと等価です。どこで「Shift_JIS からUTF-8へ変換」してますか?
$_は「while (<IN>){」の<IN>で1行読み込まれ、「chomp ($_);」で末尾の改行コ...続きを読む

QCSVファイルの中で、「 , 」カンマを使いたい

「 , 」で区切られたCSVファイルの中で、「 , 」カンマを使いたいのですが、可能でしょうか?

具体的には「これは1,500円でした。」というように、CSVファイルに収められた文章内で出てくる半角の数字(お金)の区切りに使いたいのです。
全角では代用したくないのですが、CSVファイルでデータを受け渡しする際に、困っています。

例えば、特殊文字などで対応可能でしょうか?

Aベストアンサー

受け渡しに使うと言うことは相手方のアプリケーションのことも考えなければいけないのですが・・・とりあえず対応が簡単そうな方法を。

1.各セルを""で囲む。(もちろんデータにダブルクォートがある場合はカンマと同様に困ります。
2.カンマで区切らずにタブで区切る。(比較的使われない文字ですが、やはりデータ中にタブがあるとカンマと同様です)

難しいけれど完璧に対応するためには、データ中の区切り文字は特殊な文字列に変更し、受け取り側のアプリケーションではその特殊な文字列をデータ中の区切り文字として扱うという方法が使われます。
例えば、データ中のカンマは\,にするとか。

データ作成側、受け取り側でそれぞれどこまで対応できるのか分かるともっと簡単かつ具体的な方法を回答できるかも知れません。


人気Q&Aランキング